CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
pat::PATElectronProducer Class Reference

Produces pat::Electron's. More...

#include "PhysicsTools/PatAlgos/interface/PATElectronProducer.h"

Inheritance diagram for pat::PATElectronProducer:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 PATElectronProducer (const edm::ParameterSet &iConfig)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 ~PATElectronProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Types

typedef edm::RefToBase< reco::GsfElectronElectronBaseRef
 
typedef std::vector< edm::Handle< edm::Association< reco::GenParticleCollection > > > GenAssociations
 
typedef std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
 
typedef std::pair< pat::IsolationKeys, edm::InputTagIsolationLabel
 
typedef std::vector< IsolationLabelIsolationLabels
 
typedef std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
 
typedef std::pair< std::string, edm::InputTagNameTag
 

Private Member Functions

void embedHighLevel (pat::Electron &anElectron, reco::GsfTrackRef track, reco::TransientTrack &tt, reco::Vertex &primaryVertex, bool primaryVertexIsValid, reco::BeamSpot &beamspot, bool beamspotIsValid)
 
void fillElectron (Electron &aElectron, const ElectronBaseRef &electronRef, const reco::CandidateBaseRef &baseRef, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const bool pfId, const IsolationValueMaps &isolationValues, const IsolationValueMaps &isolationValuesNoPFId) const
 common electron filling, for both the standard and PF2PAT case More...
 
void fillElectron2 (Electron &anElectron, const reco::CandidatePtr &candPtrForIsolation, const reco::CandidatePtr &candPtrForGenMatch, const reco::CandidatePtr &candPtrForLoader, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const IsolationValueMaps &isolationValues) const
 
template<typename T >
void readIsolationLabels (const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
 
void setElectronMiniIso (pat::Electron &anElectron, const pat::PackedCandidateCollection *pc)
 

Private Attributes

const bool addEfficiencies_
 
const bool addElecID_
 
bool addGenMatch_
 
const bool addMVAVariables_
 mva input variables More...
 
const bool addPFClusterIso_
 
const bool addPuppiIsolation_
 
const bool addResolutions_
 
const edm::EDGetTokenT< reco::BeamSpotbeamLineToken_
 
bool computeMiniIso_
 
const edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
 
const CaloTopologyecalTopology_
 
pat::helper::EfficiencyLoader efficiencyLoader_
 
std::vector< NameTagelecIDSrcs_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< float > > > elecIDTokens_
 
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electronToken_
 
const bool embedBasicClusters_
 
bool embedGenMatch_
 
const bool embedGsfElectronCore_
 
const bool embedGsfTrack_
 
const bool embedHighLevelSelection_
 embed high level selection variables? More...
 
const bool embedPFCandidate_
 
const bool embedPflowBasicClusters_
 
const bool embedPflowPreshowerClusters_
 
const bool embedPflowSuperCluster_
 
const bool embedPreshowerClusters_
 
const bool embedRecHits_
 
const bool embedSeedCluster_
 
const bool embedSuperCluster_
 
const bool embedTrack_
 
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
 
const edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
 
const edm::EDGetTokenT< reco::ConversionCollectionhConversionsToken_
 
IsolationLabels isoDepositLabels_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
 
IsolationLabels isolationValueLabels_
 
IsolationLabels isolationValueLabelsNoPFId_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueNoPFIdTokens_
 
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
 
pat::helper::MultiIsolator isolator_
 
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
 
std::vector< double > miniIsoParamsB_
 
std::vector< double > miniIsoParamsE_
 
edm::EDGetTokenT< pat::PackedCandidateCollectionpcToken_
 
const edm::EDGetTokenT< edm::ValueMap< reco::PFCandidatePtr > > pfCandidateMapToken_
 
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > pfCandidateMultiMapToken_
 
const edm::EDGetTokenT< reco::PFCandidateCollectionpfElecToken_
 
const GreaterByPt< ElectronpTComparator_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
 
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
 
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
 
const edm::InputTag reducedBarrelRecHitCollection_
 
const edm::EDGetTokenT< EcalRecHitCollectionreducedBarrelRecHitCollectionToken_
 
const edm::InputTag reducedEndcapRecHitCollection_
 
const edm::EDGetTokenT< EcalRecHitCollectionreducedEndcapRecHitCollectionToken_
 
pat::helper::KinResolutionsLoader resolutionLoader_
 
const bool useParticleFlow_
 pflow specific More...
 
const bool usePfCandidateMultiMap_
 
pat::PATUserDataHelper< pat::ElectronuserDataHelper_
 
const bool useUserData_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Produces pat::Electron's.

The PATElectronProducer produces analysis-level pat::Electron's starting from a collection of objects of reco::GsfElectron.

Author
Steven Lowette, James Lamb\
Version
Id
PATElectronProducer.h,v 1.31 2013/02/27 23:26:56 wmtan Exp

Definition at line 54 of file PATElectronProducer.h.

Member Typedef Documentation

Definition at line 118 of file PATElectronProducer.h.

Definition at line 89 of file PATElectronProducer.h.

Definition at line 119 of file PATElectronProducer.h.

Definition at line 154 of file PATElectronProducer.h.

Definition at line 155 of file PATElectronProducer.h.

typedef std::vector< edm::Handle< edm::ValueMap<double> > > pat::PATElectronProducer::IsolationValueMaps
private

Definition at line 120 of file PATElectronProducer.h.

typedef std::pair<std::string, edm::InputTag> pat::PATElectronProducer::NameTag
private

Definition at line 165 of file PATElectronProducer.h.

Constructor & Destructor Documentation

PATElectronProducer::PATElectronProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 55 of file PATElectronProducer.cc.

References addEfficiencies_, addElecID_, addGenMatch_, addPuppiIsolation_, addResolutions_, computeMiniIso_, edm::EDConsumerBase::consumes(), edm::EDConsumerBase::consumesCollector(), efficiencyLoader_, elecIDSrcs_, elecIDTokens_, Exception, edm::ParameterSet::existsAs(), genMatchTokens_, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), isoDepositLabels_, isoDepositTokens_, isolationValueLabels_, isolationValueLabelsNoPFId_, isolationValueNoPFIdTokens_, isolationValueTokens_, miniIsoParamsB_, miniIsoParamsE_, cscdqm::h::names, pcToken_, PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_photons_, readIsolationLabels(), resolutionLoader_, GlobalPosition_Frontier_DevDB_cff::tag, useParticleFlow_, usePfCandidateMultiMap_, userDataHelper_, useUserData_, and edm::vector_transform().

55  :
56  // general configurables
58  hConversionsToken_(consumes<reco::ConversionCollection>(edm::InputTag("allConversions"))),
59  embedGsfElectronCore_(iConfig.getParameter<bool>( "embedGsfElectronCore" )),
60  embedGsfTrack_(iConfig.getParameter<bool>( "embedGsfTrack" )),
61  embedSuperCluster_(iConfig.getParameter<bool> ( "embedSuperCluster" )),
62  embedPflowSuperCluster_(iConfig.getParameter<bool> ( "embedPflowSuperCluster" )),
63  embedSeedCluster_(iConfig.getParameter<bool>( "embedSeedCluster" )),
64  embedBasicClusters_(iConfig.getParameter<bool>( "embedBasicClusters" )),
65  embedPreshowerClusters_(iConfig.getParameter<bool>( "embedPreshowerClusters" )),
66  embedPflowBasicClusters_(iConfig.getParameter<bool>( "embedPflowBasicClusters" )),
67  embedPflowPreshowerClusters_(iConfig.getParameter<bool>( "embedPflowPreshowerClusters" )),
68  embedTrack_(iConfig.getParameter<bool>( "embedTrack" )),
69  addGenMatch_(iConfig.getParameter<bool>( "addGenMatch" )),
70  embedGenMatch_(addGenMatch_ ? iConfig.getParameter<bool>( "embedGenMatch" ) : false),
71  embedRecHits_(iConfig.getParameter<bool>( "embedRecHits" )),
72  // pflow configurables
73  useParticleFlow_(iConfig.getParameter<bool>( "useParticleFlow" )),
74  usePfCandidateMultiMap_(iConfig.getParameter<bool>( "usePfCandidateMultiMap" )),
75  pfElecToken_(!usePfCandidateMultiMap_ ? consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>( "pfElectronSource" )) : edm::EDGetTokenT<reco::PFCandidateCollection>()),
77  pfCandidateMultiMapToken_(usePfCandidateMultiMap_ ? consumes<edm::ValueMap<std::vector<reco::PFCandidateRef>>>(iConfig.getParameter<edm::InputTag>( "pfCandidateMultiMap" )) : edm::EDGetTokenT<edm::ValueMap<std::vector<reco::PFCandidateRef>>>()),
78  embedPFCandidate_(iConfig.getParameter<bool>( "embedPFCandidate" )),
79  // mva input variables
80  addMVAVariables_(iConfig.getParameter<bool>("addMVAVariables")),
81  reducedBarrelRecHitCollection_(iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection")),
83  reducedEndcapRecHitCollection_(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection")),
85  // PFCluster Isolation maps
86  addPFClusterIso_(iConfig.getParameter<bool>("addPFClusterIso")),
87  addPuppiIsolation_(iConfig.getParameter<bool>("addPuppiIsolation")),
90  // embed high level selection variables?
91  embedHighLevelSelection_(iConfig.getParameter<bool>("embedHighLevelSelection")),
92  beamLineToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"))),
93  pvToken_(mayConsume<std::vector<reco::Vertex> >(iConfig.getParameter<edm::InputTag>("pvSrc"))),
94  addElecID_(iConfig.getParameter<bool>( "addElectronID" )),
95  pTComparator_(),
96  isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter<edm::ParameterSet>("userIsolation") : edm::ParameterSet(), consumesCollector(), false) ,
97  addEfficiencies_(iConfig.getParameter<bool>("addEfficiencies")),
98  addResolutions_(iConfig.getParameter<bool>( "addResolutions" )),
99  useUserData_(iConfig.exists("userData"))
100 
101 {
102  // MC matching configurables (scheduled mode)
103 
104  if (addGenMatch_) {
105  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
107  }
108  else {
109  genMatchTokens_ = edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag> >( "genParticleMatch" ), [this](edm::InputTag const & tag){return consumes<edm::Association<reco::GenParticleCollection> >(tag);});
110  }
111  }
112  // resolution configurables
113  if (addResolutions_) {
115  }
116  if(addPuppiIsolation_){
117  //puppi
118  PUPPIIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
119  PUPPIIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
120  PUPPIIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
121  //puppiNoLeptons
122  PUPPINoLeptonsIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons"));
123  PUPPINoLeptonsIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons"));
124  PUPPINoLeptonsIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationPhotons"));
125  }
126  // electron ID configurables
127  if (addElecID_) {
128  // it might be a single electron ID
129  if (iConfig.existsAs<edm::InputTag>("electronIDSource")) {
130  elecIDSrcs_.push_back(NameTag("", iConfig.getParameter<edm::InputTag>("electronIDSource")));
131  }
132  // or there might be many of them
133  if (iConfig.existsAs<edm::ParameterSet>("electronIDSources")) {
134  // please don't configure me twice
135  if (!elecIDSrcs_.empty()){
136  throw cms::Exception("Configuration") << "PATElectronProducer: you can't specify both 'electronIDSource' and 'electronIDSources'\n";
137  }
138  // read the different electron ID names
139  edm::ParameterSet idps = iConfig.getParameter<edm::ParameterSet>("electronIDSources");
140  std::vector<std::string> names = idps.getParameterNamesForType<edm::InputTag>();
141  for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
142  elecIDSrcs_.push_back(NameTag(*it, idps.getParameter<edm::InputTag>(*it)));
143  }
144  }
145  // but in any case at least once
146  if (elecIDSrcs_.empty()){
147  throw cms::Exception("Configuration") <<
148  "PATElectronProducer: id addElectronID is true, you must specify either:\n" <<
149  "\tInputTag electronIDSource = <someTag>\n" << "or\n" <<
150  "\tPSet electronIDSources = { \n" <<
151  "\t\tInputTag <someName> = <someTag> // as many as you want \n " <<
152  "\t}\n";
153  }
154  }
155  elecIDTokens_ = edm::vector_transform(elecIDSrcs_, [this](NameTag const & tag){return mayConsume<edm::ValueMap<float> >(tag.second);});
156  // construct resolution calculator
157 
158  // // IsoDeposit configurables
159  // if (iConfig.exists("isoDeposits")) {
160  // edm::ParameterSet depconf = iConfig.getParameter<edm::ParameterSet>("isoDeposits");
161  // if (depconf.exists("tracker")) isoDepositLabels_.push_back(std::make_pair(TrackerIso, depconf.getParameter<edm::InputTag>("tracker")));
162  // if (depconf.exists("ecal")) isoDepositLabels_.push_back(std::make_pair(ECalIso, depconf.getParameter<edm::InputTag>("ecal")));
163  // if (depconf.exists("hcal")) isoDepositLabels_.push_back(std::make_pair(HCalIso, depconf.getParameter<edm::InputTag>("hcal")));
164 
165 
166  // if (depconf.exists("user")) {
167  // std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag> >("user");
168  // std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
169  // int key = UserBaseIso;
170  // for ( ; it != ed; ++it, ++key) {
171  // isoDepositLabels_.push_back(std::make_pair(IsolationKeys(key), *it));
172  // }
173  // }
174  // }
175  // isoDepositTokens_ = edm::vector_transform(isoDepositLabels_, [this](std::pair<IsolationKeys,edm::InputTag> const & label){return consumes<edm::ValueMap<IsoDeposit> >(label.second);});
176 
177  // for mini-iso
178  computeMiniIso_ = iConfig.getParameter<bool>("computeMiniIso");
179  miniIsoParamsE_ = iConfig.getParameter<std::vector<double> >("miniIsoParamsE");
180  miniIsoParamsB_ = iConfig.getParameter<std::vector<double> >("miniIsoParamsB");
181  if(computeMiniIso_ && (miniIsoParamsE_.size() != 9 || miniIsoParamsB_.size() != 9)){
182  throw cms::Exception("ParameterError") << "miniIsoParams must have exactly 9 elements.\n";
183  }
184  if(computeMiniIso_)
185  pcToken_ = consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfCandsForMiniIso"));
186 
187  // read isoDeposit labels, for direct embedding
188  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
189  // read isolation value labels, for direct embedding
191  // read isolation value labels for non PF identified electron, for direct embedding
193  // Efficiency configurables
194  if (addEfficiencies_) {
196  }
197  // Check to see if the user wants to add user data
198  if ( useUserData_ ) {
200  }
201 
202  // consistency check
203  if (useParticleFlow_ && usePfCandidateMultiMap_) throw cms::Exception("Configuration", "usePfCandidateMultiMap not supported when useParticleFlow is set to true");
204 
205  // produces vector of muons
206  produces<std::vector<Electron> >();
207  }
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
T getParameter(std::string const &) const
Assists in assimilating all pat::UserData into pat objects.
const edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
const GreaterByPt< Electron > pTComparator_
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
const bool useParticleFlow_
pflow specific
static const HistoName names[]
const edm::EDGetTokenT< reco::PFCandidateCollection > pfElecToken_
std::vector< double > miniIsoParamsE_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
const edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
bool exists(std::string const &parameterName) const
checks if a parameter exists
const edm::InputTag reducedBarrelRecHitCollection_
const edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
std::vector< edm::EDGetTokenT< edm::ValueMap< float > > > elecIDTokens_
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electronToken_
const bool addMVAVariables_
mva input variables
std::vector< double > miniIsoParamsB_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:194
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
const edm::EDGetTokenT< edm::ValueMap< reco::PFCandidatePtr > > pfCandidateMapToken_
pat::helper::MultiIsolator isolator_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
const bool embedHighLevelSelection_
embed high level selection variables?
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
const edm::InputTag reducedEndcapRecHitCollection_
std::pair< std::string, edm::InputTag > NameTag
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
const edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueNoPFIdTokens_
pat::helper::EfficiencyLoader efficiencyLoader_
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > pfCandidateMultiMapToken_
pat::PATUserDataHelper< pat::Electron > userDataHelper_
IsolationLabels isolationValueLabelsNoPFId_
IsolationLabels isolationValueLabels_
pat::helper::KinResolutionsLoader resolutionLoader_
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
std::vector< NameTag > elecIDSrcs_
PATElectronProducer::~PATElectronProducer ( )
override

Definition at line 210 of file PATElectronProducer.cc.

211 {
212 }

Member Function Documentation

void PATElectronProducer::embedHighLevel ( pat::Electron anElectron,
reco::GsfTrackRef  track,
reco::TransientTrack tt,
reco::Vertex primaryVertex,
bool  primaryVertexIsValid,
reco::BeamSpot beamspot,
bool  beamspotIsValid 
)
private

Definition at line 1144 of file PATElectronProducer.cc.

References pat::Electron::BS2D, pat::Electron::BS3D, reco::BeamSpot::covariance3D(), DEFINE_FWK_MODULE, reco::BeamSpot::position(), pat::Electron::PV2D, pat::Electron::PV3D, mps_fire::result, pat::Electron::setDB(), IPTools::signedImpactParameter3D(), and IPTools::signedTransverseImpactParameter().

Referenced by produce().

1152 {
1153  // Correct to PV
1154 
1155  // PV2D
1156  std::pair<bool,Measurement1D> result =
1158  GlobalVector(track->px(),
1159  track->py(),
1160  track->pz()),
1161  primaryVertex);
1162  double d0_corr = result.second.value();
1163  double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1164  anElectron.setDB( d0_corr, d0_err, pat::Electron::PV2D);
1165 
1166 
1167  // PV3D
1168  result =
1170  GlobalVector(track->px(),
1171  track->py(),
1172  track->pz()),
1173  primaryVertex);
1174  d0_corr = result.second.value();
1175  d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1176  anElectron.setDB( d0_corr, d0_err, pat::Electron::PV3D);
1177 
1178 
1179  // Correct to beam spot
1180  // make a fake vertex out of beam spot
1181  reco::Vertex vBeamspot(beamspot.position(), beamspot.covariance3D());
1182 
1183  // BS2D
1184  result =
1186  GlobalVector(track->px(),
1187  track->py(),
1188  track->pz()),
1189  vBeamspot);
1190  d0_corr = result.second.value();
1191  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1192  anElectron.setDB( d0_corr, d0_err, pat::Electron::BS2D);
1193 
1194  // BS3D
1195  result =
1197  GlobalVector(track->px(),
1198  track->py(),
1199  track->pz()),
1200  vBeamspot);
1201  d0_corr = result.second.value();
1202  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1203  anElectron.setDB( d0_corr, d0_err, pat::Electron::BS3D);
1204 }
Covariance3DMatrix covariance3D() const
return only 3D position covariance matrix
Definition: BeamSpot.h:118
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
void setDB(double dB, double edB, IPTYPE type)
Set impact parameter of a certain type and its uncertainty.
const Point & position() const
position
Definition: BeamSpot.h:62
Global3DVector GlobalVector
Definition: GlobalVector.h:10
void PATElectronProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 992 of file PATElectronProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addNode(), edm::ParameterSetDescription::addOptional(), pat::helper::KinResolutionsLoader::fillDescription(), pat::PATUserDataHelper< ObjectType >::fillDescription(), edm::ParameterSetDescription::ifValue(), or, edm::ParameterSetDescription::setAllowAnything(), edm::ParameterSetDescription::setComment(), edm::ParameterDescriptionNode::setComment(), and electronProducer_cfi::usePfCandidateMultiMap.

993 {
995  iDesc.setComment("PAT electron producer module");
996 
997  // input source
998  iDesc.add<edm::InputTag>("pfCandidateMap", edm::InputTag("no default"))->setComment("input collection");
999  iDesc.add<edm::InputTag>("electronSource", edm::InputTag("no default"))->setComment("input collection");
1000 
1001  iDesc.ifValue(edm::ParameterDescription<bool>("addPFClusterIso", false, true),
1002  true >> (edm::ParameterDescription<edm::InputTag>("ecalPFClusterIsoMap", edm::InputTag("electronEcalPFClusterIsolationProducer"), true) and
1003  edm::ParameterDescription<edm::InputTag>("hcalPFClusterIsoMap", edm::InputTag("electronHcalPFClusterIsolationProducer"),true)) or
1004  false >> (edm::ParameterDescription<edm::InputTag>("ecalPFClusterIsoMap", edm::InputTag(""), true) and
1005  edm::ParameterDescription<edm::InputTag>("hcalPFClusterIsoMap", edm::InputTag(""),true)));
1006 
1007  iDesc.ifValue(edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
1008  true >> (edm::ParameterDescription<edm::InputTag>("puppiIsolationChargedHadrons", edm::InputTag("egmElectronPUPPIIsolation","h+-DR030-BarVeto000-EndVeto001"), true) and
1009  edm::ParameterDescription<edm::InputTag>("puppiIsolationNeutralHadrons", edm::InputTag("egmElectronPUPPIIsolation","h0-DR030-BarVeto000-EndVeto000"), true) and
1010  edm::ParameterDescription<edm::InputTag>("puppiIsolationPhotons", edm::InputTag("egmElectronPUPPIIsolation","gamma-DR030-BarVeto000-EndVeto008"), true) and
1011  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons", edm::InputTag("egmElectronPUPPINoLeptonsIsolation","gamma-DR030-BarVeto000-EndVeto008"), true) and
1012  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons", edm::InputTag("egmElectronPUPPINoLeptonsIsolation","gamma-DR030-BarVeto000-EndVeto008"), true) and
1013  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationPhotons", edm::InputTag("egmElectronPUPPINoLeptonsIsolation","gamma-DR030-BarVeto000-EndVeto008"), true)) or
1014  false >> edm::EmptyGroupDescription());
1015 
1016 
1017  // embedding
1018  iDesc.add<bool>("embedGsfElectronCore", true)->setComment("embed external gsf electron core");
1019  iDesc.add<bool>("embedGsfTrack", true)->setComment("embed external gsf track");
1020  iDesc.add<bool>("embedSuperCluster", true)->setComment("embed external super cluster");
1021  iDesc.add<bool>("embedPflowSuperCluster", true)->setComment("embed external super cluster");
1022  iDesc.add<bool>("embedSeedCluster", true)->setComment("embed external seed cluster");
1023  iDesc.add<bool>("embedBasicClusters", true)->setComment("embed external basic clusters");
1024  iDesc.add<bool>("embedPreshowerClusters", true)->setComment("embed external preshower clusters");
1025  iDesc.add<bool>("embedPflowBasicClusters", true)->setComment("embed external pflow basic clusters");
1026  iDesc.add<bool>("embedPflowPreshowerClusters", true)->setComment("embed external pflow preshower clusters");
1027  iDesc.add<bool>("embedTrack", false)->setComment("embed external track");
1028  iDesc.add<bool>("embedRecHits", true)->setComment("embed external RecHits");
1029 
1030  // pf specific parameters
1031  iDesc.add<edm::InputTag>("pfElectronSource", edm::InputTag("pfElectrons"))->setComment("particle flow input collection");
1032  auto && usePfCandidateMultiMap = edm::ParameterDescription<bool>("usePfCandidateMultiMap", false, true);
1033  usePfCandidateMultiMap.setComment("take ParticleFlow candidates from pfCandidateMultiMap instead of matching to pfElectrons by Gsf track reference");
1035  true >> edm::ParameterDescription<edm::InputTag>("pfCandidateMultiMap", true) or
1036  false >> edm::EmptyGroupDescription());
1037  iDesc.add<bool>("useParticleFlow", false)->setComment("whether to use particle flow or not");
1038  iDesc.add<bool>("embedPFCandidate", false)->setComment("embed external particle flow object");
1039 
1040  // MC matching configurables
1041  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
1042  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
1043  std::vector<edm::InputTag> emptySourceVector;
1044  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
1045  edm::ParameterDescription<std::vector<edm::InputTag> >("genParticleMatch", emptySourceVector, true)
1046  )->setComment("input with MC match information");
1047 
1048  // electron ID configurables
1049  iDesc.add<bool>("addElectronID",true)->setComment("add electron ID variables");
1050  edm::ParameterSetDescription electronIDSourcesPSet;
1051  electronIDSourcesPSet.setAllowAnything();
1052  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("electronIDSource", edm::InputTag(), true) xor
1053  edm::ParameterDescription<edm::ParameterSetDescription>("electronIDSources", electronIDSourcesPSet, true)
1054  )->setComment("input with electron ID variables");
1055 
1056 
1057  // mini-iso
1058  iDesc.add<bool>("computeMiniIso", false)->setComment("whether or not to compute and store electron mini-isolation");
1059  iDesc.add<edm::InputTag>("pfCandsForMiniIso", edm::InputTag("packedPFCandidates"))->setComment("collection to use to compute mini-iso");
1060  iDesc.add<std::vector<double> >("miniIsoParamsE", std::vector<double>())->setComment("mini-iso parameters to use for endcap electrons");
1061  iDesc.add<std::vector<double> >("miniIsoParamsB", std::vector<double>())->setComment("mini-iso parameters to use for barrel electrons");
1062 
1063  // IsoDeposit configurables
1064  edm::ParameterSetDescription isoDepositsPSet;
1065  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
1066  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
1067  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
1068  isoDepositsPSet.addOptional<edm::InputTag>("pfAllParticles");
1069  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1070  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
1071  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1072  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1073  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
1074  isoDepositsPSet.addOptional<std::vector<edm::InputTag> >("user");
1075  iDesc.addOptional("isoDeposits", isoDepositsPSet);
1076 
1077  // isolation values configurables
1078  edm::ParameterSetDescription isolationValuesPSet;
1079  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
1080  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
1081  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
1082  isolationValuesPSet.addOptional<edm::InputTag>("pfAllParticles");
1083  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1084  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
1085  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1086  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1087  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
1088  isolationValuesPSet.addOptional<std::vector<edm::InputTag> >("user");
1089  iDesc.addOptional("isolationValues", isolationValuesPSet);
1090 
1091  // isolation values configurables
1092  edm::ParameterSetDescription isolationValuesNoPFIdPSet;
1093  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("tracker");
1094  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("ecal");
1095  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("hcal");
1096  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfAllParticles");
1097  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1098  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfChargedAll");
1099  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1100  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1101  isolationValuesNoPFIdPSet.addOptional<edm::InputTag>("pfPhotons");
1102  isolationValuesNoPFIdPSet.addOptional<std::vector<edm::InputTag> >("user");
1103  iDesc.addOptional("isolationValuesNoPFId", isolationValuesNoPFIdPSet);
1104 
1105  // Efficiency configurables
1106  edm::ParameterSetDescription efficienciesPSet;
1107  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1108  iDesc.add("efficiencies", efficienciesPSet);
1109  iDesc.add<bool>("addEfficiencies", false);
1110 
1111  // Check to see if the user wants to add user data
1112  edm::ParameterSetDescription userDataPSet;
1114  iDesc.addOptional("userData", userDataPSet);
1115 
1116 
1117  // electron shapes
1118  iDesc.add<bool>("addMVAVariables", true)->setComment("embed extra variables in pat::Electron : sip3d, sigmaIEtaIPhi");
1119  iDesc.add<edm::InputTag>("reducedBarrelRecHitCollection", edm::InputTag("reducedEcalRecHitsEB"));
1120  iDesc.add<edm::InputTag>("reducedEndcapRecHitCollection", edm::InputTag("reducedEcalRecHitsEE"));
1121 
1122  edm::ParameterSetDescription isolationPSet;
1123  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1124  iDesc.add("userIsolation", isolationPSet);
1125 
1126  // Resolution configurables
1128 
1129  iDesc.add<bool>("embedHighLevelSelection", true)->setComment("embed high level selection");
1130  edm::ParameterSetDescription highLevelPSet;
1131  highLevelPSet.setAllowAnything();
1132  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true)
1133  )->setComment("input with high level selection");
1135  )->setComment("input with high level selection");
1136 
1137  descriptions.add("PATElectronProducer", iDesc);
1138 
1139 }
void setComment(std::string const &value)
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
void setAllowAnything()
allow any parameter label/value pairs
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
static void fillDescription(edm::ParameterSetDescription &iDesc)
void setComment(std::string const &value)
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
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T > > cases)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void PATElectronProducer::fillElectron ( Electron aElectron,
const ElectronBaseRef electronRef,
const reco::CandidateBaseRef baseRef,
const GenAssociations genMatches,
const IsoDepositMaps deposits,
const bool  pfId,
const IsolationValueMaps isolationValues,
const IsolationValueMaps isolationValuesNoPFId 
) const
private

common electron filling, for both the standard and PF2PAT case

Definition at line 795 of file PATElectronProducer.cc.

References addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), efficiencyLoader_, pat::Electron::embedBasicClusters(), embedBasicClusters_, embedGenMatch_, pat::PATObject< ObjectType >::embedGenParticle(), pat::Electron::embedGsfElectronCore(), embedGsfElectronCore_, pat::Electron::embedGsfTrack(), embedGsfTrack_, pat::Electron::embedPflowBasicClusters(), embedPflowBasicClusters_, pat::Electron::embedPflowPreshowerClusters(), embedPflowPreshowerClusters_, pat::Electron::embedPflowSuperCluster(), embedPflowSuperCluster_, pat::Electron::embedPreshowerClusters(), embedPreshowerClusters_, pat::Electron::embedSeedCluster(), embedSeedCluster_, pat::Electron::embedSuperCluster(), embedSuperCluster_, pat::Electron::embedTrack(), embedTrack_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), plotBeamSpotDB::first, mps_fire::i, edm::Ref< C, T, F >::isNull(), isoDepositLabels_, isolationValueLabels_, isolationValueLabelsNoPFId_, gen::n, pat::Electron::pfCandidateRef(), resolutionLoader_, pat::helper::EfficiencyLoader::setEfficiencies(), pat::Lepton< LeptonType >::setIsoDeposit(), pat::Lepton< LeptonType >::setIsolation(), pat::helper::KinResolutionsLoader::setResolutions(), source, and useParticleFlow_.

Referenced by produce().

803  {
804 
805  //COLIN: might want to use the PFCandidate 4-mom. Which one is in use now?
806  // if (useParticleFlow_)
807  // aMuon.setP4( aMuon.pfCandidateRef()->p4() );
808 
809  //COLIN:
810  //In the embedding case, the reference cannot be used to look into a value map.
811  //therefore, one has to had the PFCandidateRef to this function, which becomes a bit
812  //too much specific.
813 
814  // in fact, this function needs a baseref or ptr for genmatch
815  // and a baseref or ptr for isodeposits and isolationvalues.
816  // baseref is not needed
817  // the ptrForIsolation and ptrForMatching should be defined upstream.
818 
819  // is the concrete elecRef needed for the efficiency loader? what is this loader?
820  // how can we make it compatible with the particle flow electrons?
821 
822  if (embedGsfElectronCore_) anElectron.embedGsfElectronCore();
823  if (embedGsfTrack_) anElectron.embedGsfTrack();
824  if (embedSuperCluster_) anElectron.embedSuperCluster();
825  if (embedPflowSuperCluster_) anElectron.embedPflowSuperCluster();
826  if (embedSeedCluster_) anElectron.embedSeedCluster();
827  if (embedBasicClusters_) anElectron.embedBasicClusters();
828  if (embedPreshowerClusters_) anElectron.embedPreshowerClusters();
829  if (embedPflowBasicClusters_ ) anElectron.embedPflowBasicClusters();
830  if (embedPflowPreshowerClusters_ ) anElectron.embedPflowPreshowerClusters();
831  if (embedTrack_) anElectron.embedTrack();
832 
833  // store the match to the generated final state muons
834  if (addGenMatch_) {
835  for(size_t i = 0, n = genMatches.size(); i < n; ++i) {
836  if(useParticleFlow_) {
837  reco::GenParticleRef genElectron = (*genMatches[i])[anElectron.pfCandidateRef()];
838  anElectron.addGenParticleRef(genElectron);
839  }
840  else {
841  reco::GenParticleRef genElectron = (*genMatches[i])[elecRef];
842  anElectron.addGenParticleRef(genElectron);
843  }
844  }
845  if (embedGenMatch_) anElectron.embedGenParticle();
846  }
847 
848  if (efficiencyLoader_.enabled()) {
849  efficiencyLoader_.setEfficiencies( anElectron, elecRef );
850  }
851 
852  if (resolutionLoader_.enabled()) {
853  resolutionLoader_.setResolutions(anElectron);
854  }
855 
856  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
857  if(useParticleFlow_) {
858 
859  reco::PFCandidateRef pfcandref = anElectron.pfCandidateRef();
860  assert(!pfcandref.isNull());
861  reco::CandidatePtr source = pfcandref->sourceCandidatePtr(0);
862  anElectron.setIsoDeposit(isoDepositLabels_[j].first,
863  (*deposits[j])[source]);
864  }
865  else
866  anElectron.setIsoDeposit(isoDepositLabels_[j].first,
867  (*deposits[j])[elecRef]);
868  }
869 
870  for (size_t j = 0; j<isolationValues.size(); ++j) {
871  if(useParticleFlow_) {
872  reco::CandidatePtr source = anElectron.pfCandidateRef()->sourceCandidatePtr(0);
873  anElectron.setIsolation(isolationValueLabels_[j].first,
874  (*isolationValues[j])[source]);
875  }
876  else
877  if(pfId){
878  anElectron.setIsolation(isolationValueLabels_[j].first,(*isolationValues[j])[elecRef]);
879  }
880  }
881 
882  //for electrons not identified as PF electrons
883  for (size_t j = 0; j<isolationValuesNoPFId.size(); ++j) {
884  if( !pfId) {
885  anElectron.setIsolation(isolationValueLabelsNoPFId_[j].first,(*isolationValuesNoPFId[j])[elecRef]);
886  }
887  }
888 
889 }
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
const bool useParticleFlow_
pflow specific
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
bool isNull() const
Checks for null.
Definition: Ref.h:250
pat::helper::EfficiencyLoader efficiencyLoader_
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
IsolationLabels isolationValueLabelsNoPFId_
IsolationLabels isolationValueLabels_
pat::helper::KinResolutionsLoader resolutionLoader_
static std::string const source
Definition: EdmProvDump.cc:43
void PATElectronProducer::fillElectron2 ( Electron anElectron,
const reco::CandidatePtr candPtrForIsolation,
const reco::CandidatePtr candPtrForGenMatch,
const reco::CandidatePtr candPtrForLoader,
const GenAssociations genMatches,
const IsoDepositMaps deposits,
const IsolationValueMaps isolationValues 
) const
private

Definition at line 891 of file PATElectronProducer.cc.

References addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), edm::contains(), pat::EcalIso, efficiencyLoader_, pat::Electron::embedBasicClusters(), embedBasicClusters_, embedGenMatch_, pat::PATObject< ObjectType >::embedGenParticle(), pat::Electron::embedGsfElectronCore(), embedGsfElectronCore_, pat::Electron::embedGsfTrack(), embedGsfTrack_, pat::Electron::embedPflowBasicClusters(), embedPflowBasicClusters_, pat::Electron::embedPflowPreshowerClusters(), embedPflowPreshowerClusters_, pat::Electron::embedPflowSuperCluster(), embedPflowSuperCluster_, pat::Electron::embedPreshowerClusters(), embedPreshowerClusters_, pat::Electron::embedSeedCluster(), embedSeedCluster_, pat::Electron::embedSuperCluster(), embedSuperCluster_, pat::Electron::embedTrack(), embedTrack_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), plotBeamSpotDB::first, pat::HcalIso, mps_fire::i, edm::Ptr< T >::id(), isoDepositLabels_, isolationValueLabels_, gen::n, reco::GsfElectron::p4(), pat::Electron::pfCandidateRef(), resolutionLoader_, pat::Electron::setEcalDrivenMomentum(), pat::helper::EfficiencyLoader::setEfficiencies(), pat::Lepton< LeptonType >::setIsoDeposit(), pat::Lepton< LeptonType >::setIsolation(), reco::GsfElectron::setP4(), pat::helper::KinResolutionsLoader::setResolutions(), and pat::TrackIso.

Referenced by produce().

897  {
898 
899  //COLIN/Florian: use the PFCandidate 4-mom.
900  anElectron.setEcalDrivenMomentum(anElectron.p4()) ;
901  anElectron.setP4( anElectron.pfCandidateRef()->p4() );
902 
903 
904  // is the concrete elecRef needed for the efficiency loader? what is this loader?
905  // how can we make it compatible with the particle flow electrons?
906 
908  if (embedGsfTrack_) anElectron.embedGsfTrack();
909  if (embedSuperCluster_) anElectron.embedSuperCluster();
911  if (embedSeedCluster_) anElectron.embedSeedCluster();
912  if (embedBasicClusters_) anElectron.embedBasicClusters();
916  if (embedTrack_) anElectron.embedTrack();
917 
918  // store the match to the generated final state muons
919 
920  if (addGenMatch_) {
921  for(size_t i = 0, n = genMatches.size(); i < n; ++i) {
922  reco::GenParticleRef genElectron = (*genMatches[i])[candPtrForGenMatch];
923  anElectron.addGenParticleRef(genElectron);
924  }
925  if (embedGenMatch_) anElectron.embedGenParticle();
926  }
927 
928  //COLIN what's this? does it have to be GsfElectron specific?
929  if (efficiencyLoader_.enabled()) {
930  efficiencyLoader_.setEfficiencies( anElectron, candPtrForLoader );
931  }
932 
933  if (resolutionLoader_.enabled()) {
934  resolutionLoader_.setResolutions(anElectron);
935  }
936 
937  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
941  deposits[j]->contains(candPtrForGenMatch.id())) {
942  anElectron.setIsoDeposit(isoDepositLabels_[j].first,
943  (*deposits[j])[candPtrForGenMatch]);
944  }
945  else if (deposits[j]->contains(candPtrForIsolation.id())) {
946  anElectron.setIsoDeposit(isoDepositLabels_[j].first,
947  (*deposits[j])[candPtrForIsolation]);
948  }
949  else {
950  anElectron.setIsoDeposit(isoDepositLabels_[j].first,
951  (*deposits[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
952  }
953  }
954 
955  for (size_t j = 0; j<isolationValues.size(); ++j) {
956  if( isolationValueLabels_[j].first==pat::TrackIso ||
959  isolationValues[j]->contains(candPtrForGenMatch.id())) {
960  anElectron.setIsolation(isolationValueLabels_[j].first,
961  (*isolationValues[j])[candPtrForGenMatch]);
962  }
963  else if (isolationValues[j]->contains(candPtrForIsolation.id())) {
964  anElectron.setIsolation(isolationValueLabels_[j].first,
965  (*isolationValues[j])[candPtrForIsolation]);
966  }
967  else {
968  anElectron.setIsolation(isolationValueLabels_[j].first,
969  (*isolationValues[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
970  }
971  }
972 }
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
Definition: GsfElectron.cc:199
void setIsolation(IsolationKeys key, float value)
Definition: Lepton.h:99
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:38
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:225
void embedSuperCluster()
method to store the electron&#39;s SuperCluster internally
void embedGsfElectronCore()
method to store the electron&#39;s core internally
void setEcalDrivenMomentum(const Candidate::LorentzVector &mom)
Definition: Electron.h:220
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
void embedPflowSuperCluster()
method to store the electron&#39;s PflowSuperCluster internally
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void setIsoDeposit(IsolationKeys key, const IsoDeposit &dep)
Sets the IsoDeposit associated with some key; if it is already existent, it is overwritten.
Definition: Lepton.h:176
void embedSeedCluster()
method to store the electron&#39;s seedcluster internally
reco::PFCandidateRef pfCandidateRef() const
reference to the source PFCandidates; null if this has been built from a standard electron ...
void embedGenParticle()
Definition: PATObject.h:694
void embedPflowBasicClusters()
method to store the electron&#39;s pflow basic clusters
void embedBasicClusters()
method to store the electron&#39;s basic clusters
void embedGsfTrack()
method to store the electron&#39;s GsfTrack internally
void addGenParticleRef(const reco::GenParticleRef &ref)
Definition: PATObject.h:678
pat::helper::EfficiencyLoader efficiencyLoader_
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
ProductID id() const
Accessor for product ID.
Definition: Ptr.h:180
void embedPreshowerClusters()
method to store the electron&#39;s preshower clusters
IsolationLabels isolationValueLabels_
pat::helper::KinResolutionsLoader resolutionLoader_
void embedPflowPreshowerClusters()
method to store the electron&#39;s pflow preshower clusters
void embedTrack()
method to store the electron&#39;s Track internally
void PATElectronProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 215 of file PATElectronProducer.cc.

References IPTools::absoluteImpactParameter3D(), addElecID_, addGenMatch_, addMVAVariables_, addPFClusterIso_, addPuppiIsolation_, Reference_intrackfit_cff::barrel, beamLineToken_, ecalDrivenElectronSeedsParameters_cff::beamSpot, pat::helper::MultiIsolator::beginEvent(), TransientTrackBuilder::build(), computeMiniIso_, CandIsolatorFromDeposits_cfi::deposits, reco::PFCandidate::e, DetId::Ecal, EcalBarrel, EcalEndcap, ecalPFClusterIsoT_, ecalTopology_, efficiencyLoader_, elecIDSrcs_, elecIDTokens_, genericTrackCleaner_cfi::electrons, electronToken_, embedBasicClusters_, embedGenMatch_, embedHighLevel(), embedHighLevelSelection_, pat::Electron::embedPFCandidate(), embedPFCandidate_, embedPflowBasicClusters_, pat::Electron::embedRecHits(), embedRecHits_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), pat::helper::MultiIsolator::enabled(), edm::SortedCollection< T, SORT >::end(), pat::helper::MultiIsolator::endEvent(), pat::helper::MultiIsolator::fill(), fillElectron(), fillElectron2(), edm::SortedCollection< T, SORT >::find(), plotBeamSpotDB::first, genMatchTokens_, edm::EventSetup::get(), edm::Event::getByToken(), CaloTopology::getSubdetectorTopology(), CaloSubdetectorTopology::getWindow(), ConversionTools::hasMatchedConversion(), hcalPFClusterIsoT_, hConversionsToken_, mps_fire::i, training_settings::idx, diffTreeTool::index, edm::Ref< C, T, F >::isAvailable(), edm::Ptr< T >::isNonnull(), edm::Ref< C, T, F >::isNonnull(), isoDepositLabels_, isoDepositTokens_, isolationValueNoPFIdTokens_, electronProducer_cff::isolationValues, electronProducer_cff::isolationValuesNoPFId, isolationValueTokens_, isolator_, isolatorTmpStorage_, edm::EventBase::isRealData(), edm::HandleBase::isValid(), reco::Matched, reco::HitPattern::MISSING_INNER_HITS, eostools::move(), pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), electronProducer_cfi::patElectrons, pcToken_, packedPFCandidateRefMixer_cfi::pf, pfCandidateMapToken_, pfCandidateMultiMapToken_, pfElecToken_, reco::BeamSpot::position(), impactParameterTagInfos_cfi::primaryVertex, edm::Handle< T >::product(), pTComparator_, PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_photons_, edm::SortedCollection< T, SORT >::push_back(), edm::Event::put(), pvToken_, reducedBarrelRecHitCollectionToken_, reducedEndcapRecHitCollectionToken_, resolutionLoader_, SurveyInfoScenario_cff::seed, pat::Electron::setEcalPFClusterIso(), pat::Electron::setElectronIDs(), setElectronMiniIso(), pat::Electron::setHcalPFClusterIso(), pat::Lepton< LeptonType >::setIsoDeposit(), pat::Lepton< LeptonType >::setIsolation(), pat::Electron::setIsolationPUPPI(), pat::Electron::setIsolationPUPPINoLeptons(), pat::Electron::setIsPF(), pat::Electron::setMvaVariables(), pat::Electron::setPassConversionVeto(), pat::Electron::setPFCandidateRef(), edm::SortedCollection< T, SORT >::size(), edm::SortedCollection< T, SORT >::sort(), HiIsolationCommonParameters_cff::track, groupFilesInBlocks::tt, tier0::unique(), useParticleFlow_, usePfCandidateMultiMap_, userDataHelper_, and useUserData_.

216 {
217  // switch off embedding (in unschedules mode)
218  if (iEvent.isRealData()){
219  addGenMatch_ = false;
220  embedGenMatch_ = false;
221  }
222 
223  edm::ESHandle<CaloTopology> theCaloTopology;
224  iSetup.get<CaloTopologyRecord>().get(theCaloTopology);
225  ecalTopology_ = & (*theCaloTopology);
226 
227  // Get the collection of electrons from the event
229  iEvent.getByToken(electronToken_, electrons);
230 
232  if(computeMiniIso_)
233  iEvent.getByToken(pcToken_, pc);
234 
235  // for additional mva variables
236  edm::InputTag reducedEBRecHitCollection(string("reducedEcalRecHitsEB"));
237  edm::InputTag reducedEERecHitCollection(string("reducedEcalRecHitsEE"));
238  //EcalClusterLazyTools lazyTools(iEvent, iSetup, reducedEBRecHitCollection, reducedEERecHitCollection);
240 
241  // for conversion veto selection
243  iEvent.getByToken(hConversionsToken_, hConversions);
244 
245  // Get the ESHandle for the transient track builder, if needed for
246  // high level selection embedding
248 
249  if (isolator_.enabled()) isolator_.beginEvent(iEvent,iSetup);
250 
252  if (resolutionLoader_.enabled()) resolutionLoader_.newEvent(iEvent, iSetup);
253 
255  for (size_t j = 0, nd = isoDepositTokens_.size(); j < nd; ++j) {
256  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
257  }
258 
260  for (size_t j = 0; j<isolationValueTokens_.size(); ++j) {
262  }
263 
265  for (size_t j = 0; j<isolationValueNoPFIdTokens_.size(); ++j) {
267  }
268 
269  // prepare the MC matching
270  GenAssociations genMatches(genMatchTokens_.size());
271  if (addGenMatch_) {
272  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
273  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
274  }
275  }
276 
277  // prepare ID extraction
278  std::vector<edm::Handle<edm::ValueMap<float> > > idhandles;
279  std::vector<pat::Electron::IdPair> ids;
280  if (addElecID_) {
281  idhandles.resize(elecIDSrcs_.size());
282  ids.resize(elecIDSrcs_.size());
283  for (size_t i = 0; i < elecIDSrcs_.size(); ++i) {
284  iEvent.getByToken(elecIDTokens_[i], idhandles[i]);
285  ids[i].first = elecIDSrcs_[i].first;
286  }
287  }
288 
289 
290  // prepare the high level selection:
291  // needs beamline
292  reco::TrackBase::Point beamPoint(0,0,0);
295  bool beamSpotIsValid = false;
296  bool primaryVertexIsValid = false;
297 
298  // Get the beamspot
299  edm::Handle<reco::BeamSpot> beamSpotHandle;
300  iEvent.getByToken(beamLineToken_, beamSpotHandle);
301 
302  if ( embedHighLevelSelection_ ) {
303  // Get the primary vertex
305  iEvent.getByToken( pvToken_, pvHandle );
306 
307  // This is needed by the IPTools methods from the tracking group
308  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", trackBuilder);
309 
310  if ( pvHandle.isValid() && !pvHandle->empty() ) {
311  primaryVertex = pvHandle->at(0);
312  primaryVertexIsValid = true;
313  } else {
314  edm::LogError("DataNotAvailable")
315  << "No primary vertex available from EventSetup, not adding high level selection \n";
316  }
317  }
318  //value maps for puppi isolation
319  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
320  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
321  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
322  //value maps for puppiNoLeptons isolation
323  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_charged_hadrons;
324  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_neutral_hadrons;
325  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_photons;
326  if(addPuppiIsolation_){
327  //puppi
328  iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
329  iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
330  iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
331  //puppiNoLeptons
332  iEvent.getByToken(PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_charged_hadrons);
333  iEvent.getByToken(PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons);
334  iEvent.getByToken(PUPPINoLeptonsIsolation_photons_, PUPPINoLeptonsIsolation_photons);
335  }
336 
337 
338  std::vector<Electron> * patElectrons = new std::vector<Electron>();
339 
340  if( useParticleFlow_ ) {
342  iEvent.getByToken(pfElecToken_, pfElectrons);
343  unsigned index=0;
344 
345  for( reco::PFCandidateConstIterator i = pfElectrons->begin();
346  i != pfElectrons->end(); ++i, ++index) {
347 
348  reco::PFCandidateRef pfRef(pfElectrons, index);
349  reco::PFCandidatePtr ptrToPFElectron(pfElectrons,index);
350 // reco::CandidateBaseRef pfBaseRef( pfRef );
351 
352  reco::GsfTrackRef PfTk= i->gsfTrackRef();
353 
354  bool Matched=false;
355  bool MatchedToAmbiguousGsfTrack=false;
356  for (edm::View<reco::GsfElectron>::const_iterator itElectron = electrons->begin(); itElectron != electrons->end(); ++itElectron) {
357  unsigned int idx = itElectron - electrons->begin();
358  auto elePtr = electrons -> ptrAt(idx);
359  if (Matched || MatchedToAmbiguousGsfTrack) continue;
360 
361  reco::GsfTrackRef EgTk= itElectron->gsfTrack();
362 
363  if (itElectron->gsfTrack()==i->gsfTrackRef()){
364  Matched=true;
365  }
366  else {
367  for( reco::GsfTrackRefVector::const_iterator it = itElectron->ambiguousGsfTracksBegin() ;
368  it!=itElectron->ambiguousGsfTracksEnd(); it++ ){
369  MatchedToAmbiguousGsfTrack |= (bool)(i->gsfTrackRef()==(*it));
370  }
371  }
372 
373  if (Matched || MatchedToAmbiguousGsfTrack){
374 
375  // ptr needed for finding the matched gen particle
376  reco::CandidatePtr ptrToGsfElectron(electrons,idx);
377 
378  // ref to base needed for the construction of the pat object
379  const edm::RefToBase<reco::GsfElectron>& elecsRef = electrons->refAt(idx);
380  Electron anElectron(elecsRef);
381  anElectron.setPFCandidateRef( pfRef );
382  if (addPuppiIsolation_) {
383  anElectron.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
384  anElectron.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
385  }
386  else {
387  anElectron.setIsolationPUPPI(-999., -999.,-999.);
388  anElectron.setIsolationPUPPINoLeptons(-999., -999.,-999.);
389  }
390 
391  //it should be always true when particleFlow electrons are used.
392  anElectron.setIsPF( true );
393 
394  if( embedPFCandidate_ ) anElectron.embedPFCandidate();
395 
396  if ( useUserData_ ) {
397  userDataHelper_.add( anElectron, iEvent, iSetup );
398  }
399 
400  double ip3d = -999; // for mva variable
401 
402  // embed high level selection
403  if ( embedHighLevelSelection_ ) {
404  // get the global track
405  const reco::GsfTrackRef& track = PfTk;
406 
407  // Make sure the collection it points to is there
408  if ( track.isNonnull() && track.isAvailable() ) {
409 
410  reco::TransientTrack tt = trackBuilder->build(track);
411  embedHighLevel( anElectron,
412  track,
413  tt,
414  primaryVertex,
415  primaryVertexIsValid,
416  beamSpot,
417  beamSpotIsValid );
418 
419  std::pair<bool,Measurement1D> ip3dpv = IPTools::absoluteImpactParameter3D(tt, primaryVertex);
420  ip3d = ip3dpv.second.value(); // for mva variable
421  }
422  }
423 
424  //Electron Id
425 
426  if (addElecID_) {
427  //STANDARD EL ID
428  for (size_t i = 0; i < elecIDSrcs_.size(); ++i) {
429  ids[i].second = (*idhandles[i])[elecsRef];
430  }
431  //SPECIFIC PF ID
432  ids.push_back(std::make_pair("pf_evspi",pfRef->mva_e_pi()));
433  ids.push_back(std::make_pair("pf_evsmu",pfRef->mva_e_mu()));
434  anElectron.setElectronIDs(ids);
435  }
436 
437  if (addMVAVariables_) {
438  // add missing mva variables
439  std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
440  anElectron.setMvaVariables(vCov[1], ip3d);
441  }
442  // PFClusterIso
443  if (addPFClusterIso_) {
444  // Get PFCluster Isolation
445  edm::Handle<edm::ValueMap<float> > ecalPFClusterIsoMapH;
446  iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH);
447  edm::Handle<edm::ValueMap<float> > hcalPFClusterIsoMapH;
448  iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH);
449 
450  anElectron.setEcalPFClusterIso((*ecalPFClusterIsoMapH)[elecsRef]);
451  anElectron.setHcalPFClusterIso((*hcalPFClusterIsoMapH)[elecsRef]);
452  } else {
453  anElectron.setEcalPFClusterIso(-999.);
454  anElectron.setHcalPFClusterIso(-999.);
455  }
456 
457  std::vector<DetId> selectedCells;
458  bool barrel = itElectron->isEB();
459  //loop over sub clusters
460  if (embedBasicClusters_) {
461  for (reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
462  //get seed (max energy xtal)
463  DetId seed = lazyTools.getMaximum(**clusIt).first;
464  //get all xtals in 5x5 window around the seed
465  std::vector<DetId> dets5x5 = (barrel) ? ecalTopology_->getSubdetectorTopology(DetId::Ecal,EcalBarrel)->getWindow(seed,5,5):
467  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
468 
469  //get all xtals belonging to cluster
470  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
471  selectedCells.push_back(hit.first);
472  }
473  }
474  }
475 
476  if (embedPflowBasicClusters_ && itElectron->parentSuperCluster().isNonnull()) {
477  for (reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
478  //get seed (max energy xtal)
479  DetId seed = lazyTools.getMaximum(**clusIt).first;
480  //get all xtals in 5x5 window around the seed
481  std::vector<DetId> dets5x5 = (barrel) ? ecalTopology_->getSubdetectorTopology(DetId::Ecal,EcalBarrel)->getWindow(seed,5,5):
483  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
484 
485  //get all xtals belonging to cluster
486  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
487  selectedCells.push_back(hit.first);
488  }
489  }
490  }
491 
492  //remove duplicates
493  std::sort(selectedCells.begin(),selectedCells.end());
494  std::unique(selectedCells.begin(),selectedCells.end());
495 
496 
497  // Retrieve the corresponding RecHits
498 
500  if(barrel)
502  else
504 
505  EcalRecHitCollection selectedRecHits;
506  const EcalRecHitCollection *recHits = rechitsH.product();
507 
508  unsigned nSelectedCells = selectedCells.size();
509  for (unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
510  EcalRecHitCollection::const_iterator it = recHits->find( selectedCells[icell] );
511  if ( it != recHits->end() ) {
512  selectedRecHits.push_back(*it);
513  }
514  }
515  selectedRecHits.sort();
516  if (embedRecHits_) anElectron.embedRecHits(& selectedRecHits);
517 
518  // set conversion veto selection
519  bool passconversionveto = false;
520  if( hConversions.isValid()){
521  // this is recommended method
522  passconversionveto = !ConversionTools::hasMatchedConversion( *itElectron, hConversions, beamSpotHandle->position());
523  }else{
524  // use missing hits without vertex fit method
525  passconversionveto = itElectron->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) < 1;
526  }
527 
528  anElectron.setPassConversionVeto( passconversionveto );
529 
530 
531 // fillElectron(anElectron,elecsRef,pfBaseRef,
532 // genMatches, deposits, isolationValues);
533 
534  //COLIN small warning !
535  // we are currently choosing to take the 4-momentum of the PFCandidate;
536  // the momentum of the GsfElectron is saved though
537  // we must therefore match the GsfElectron.
538  // because of this, we should not change the source of the electron matcher
539  // to the collection of PFElectrons in the python configuration
540  // I don't know what to do with the efficiencyLoader, since I don't know
541  // what this class is for.
542  fillElectron2( anElectron,
543  ptrToPFElectron,
544  ptrToGsfElectron,
545  ptrToGsfElectron,
546  genMatches, deposits, isolationValues );
547 
548  //COLIN need to use fillElectron2 in the non-pflow case as well, and to test it.
549 
550  if(computeMiniIso_)
551  setElectronMiniIso(anElectron, pc.product());
552 
553  patElectrons->push_back(anElectron);
554  }
555  }
556  //if( !Matched && !MatchedToAmbiguousGsfTrack) std::cout << "!!!!A pf electron could not be matched to a gsf!!!!" << std::endl;
557  }
558  }
559 
560  else{
564  bool pfCandsPresent = false, valMapPresent = false;
566  iEvent.getByToken(pfCandidateMultiMapToken_, ValMultiMapH);
567  } else {
568  pfCandsPresent = iEvent.getByToken(pfElecToken_, pfElectrons);
569  valMapPresent = iEvent.getByToken(pfCandidateMapToken_,ValMapH);
570  }
571 
572  for (edm::View<reco::GsfElectron>::const_iterator itElectron = electrons->begin(); itElectron != electrons->end(); ++itElectron) {
573  // construct the Electron from the ref -> save ref to original object
574  //FIXME: looks like a lot of instances could be turned into const refs
575  unsigned int idx = itElectron - electrons->begin();
576  edm::RefToBase<reco::GsfElectron> elecsRef = electrons->refAt(idx);
577  reco::CandidateBaseRef elecBaseRef(elecsRef);
578  Electron anElectron(elecsRef);
579  auto elePtr = electrons -> ptrAt(idx);
580 
581  // Is this GsfElectron also identified as an e- in the particle flow?
582  bool pfId = false;
583 
585  for (const reco::PFCandidateRef& pf : (*ValMultiMapH)[elePtr]) {
586  if (pf->particleId() == reco::PFCandidate::e) {
587  pfId = true;
588  anElectron.setPFCandidateRef( pf );
589  break;
590  }
591  }
592  } else if ( pfCandsPresent ) {
593  // PF electron collection not available.
594  const reco::GsfTrackRef& trkRef = itElectron->gsfTrack();
595  int index = 0;
596  for( reco::PFCandidateConstIterator ie = pfElectrons->begin();
597  ie != pfElectrons->end(); ++ie, ++index) {
598  if(ie->particleId()!=reco::PFCandidate::e) continue;
599  const reco::GsfTrackRef& pfTrkRef= ie->gsfTrackRef();
600  if( trkRef == pfTrkRef ) {
601  pfId = true;
602  reco::PFCandidateRef pfRef(pfElectrons, index);
603  anElectron.setPFCandidateRef( pfRef );
604  break;
605  }
606  }
607  }
608  else if( valMapPresent ) {
609  // use value map if PF collection not available
610  const edm::ValueMap<reco::PFCandidatePtr> & myValMap(*ValMapH);
611  // Get the PFCandidate
612  const reco::PFCandidatePtr& pfElePtr(myValMap[elecsRef]);
613  pfId= pfElePtr.isNonnull();
614  }
615  // set PFId function
616  anElectron.setIsPF( pfId );
617 
618  // add resolution info
619 
620  // Isolation
621  if (isolator_.enabled()) {
622  isolator_.fill(*electrons, idx, isolatorTmpStorage_);
623  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
624  // better to loop backwards, so the vector is resized less times
625  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(), ed = isolatorTmpStorage_.rend(); it != ed; ++it) {
626  anElectron.setIsolation(it->first, it->second);
627  }
628  }
629 
630  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
631  anElectron.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[elecsRef]);
632  }
633 
634  // add electron ID info
635  if (addElecID_) {
636  for (size_t i = 0; i < elecIDSrcs_.size(); ++i) {
637  ids[i].second = (*idhandles[i])[elecsRef];
638  }
639  anElectron.setElectronIDs(ids);
640  }
641 
642 
643  if ( useUserData_ ) {
644  userDataHelper_.add( anElectron, iEvent, iSetup );
645  }
646 
647 
648  double ip3d = -999; //for mva variable
649 
650  // embed high level selection
651  if ( embedHighLevelSelection_ ) {
652  // get the global track
653  reco::GsfTrackRef track = itElectron->gsfTrack();
654 
655  // Make sure the collection it points to is there
656  if ( track.isNonnull() && track.isAvailable() ) {
657 
658  reco::TransientTrack tt = trackBuilder->build(track);
659  embedHighLevel( anElectron,
660  track,
661  tt,
662  primaryVertex,
663  primaryVertexIsValid,
664  beamSpot,
665  beamSpotIsValid );
666 
667  std::pair<bool,Measurement1D> ip3dpv = IPTools::absoluteImpactParameter3D(tt, primaryVertex);
668  ip3d = ip3dpv.second.value(); // for mva variable
669 
670  }
671  }
672 
673  if (addMVAVariables_) {
674  // add mva variables
675  std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
676  anElectron.setMvaVariables(vCov[1], ip3d);
677  }
678  // PFCluster Isolation
679  if (addPFClusterIso_) {
680  // Get PFCluster Isolation
681  edm::Handle<edm::ValueMap<float> > ecalPFClusterIsoMapH;
682  iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH);
683  edm::Handle<edm::ValueMap<float> > hcalPFClusterIsoMapH;
684  iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH);
685 
686  anElectron.setEcalPFClusterIso((*ecalPFClusterIsoMapH)[elecsRef]);
687  anElectron.setHcalPFClusterIso((*hcalPFClusterIsoMapH)[elecsRef]);
688  } else {
689  anElectron.setEcalPFClusterIso(-999.);
690  anElectron.setHcalPFClusterIso(-999.);
691  }
692  if (addPuppiIsolation_) {
693  anElectron.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
694  anElectron.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
695  }
696  else {
697  anElectron.setIsolationPUPPI(-999., -999.,-999.);
698  anElectron.setIsolationPUPPINoLeptons(-999., -999.,-999.);
699  }
700 
701  std::vector<DetId> selectedCells;
702  bool barrel = itElectron->isEB();
703  //loop over sub clusters
704  if (embedBasicClusters_) {
705  for (reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
706  //get seed (max energy xtal)
707  DetId seed = lazyTools.getMaximum(**clusIt).first;
708  //get all xtals in 5x5 window around the seed
709  std::vector<DetId> dets5x5 = (barrel) ? ecalTopology_->getSubdetectorTopology(DetId::Ecal,EcalBarrel)->getWindow(seed,5,5):
711  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
712 
713  //get all xtals belonging to cluster
714  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
715  selectedCells.push_back(hit.first);
716  }
717  }
718  }
719 
720  if (embedPflowBasicClusters_ && itElectron->parentSuperCluster().isNonnull()) {
721  for (reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
722  //get seed (max energy xtal)
723  DetId seed = lazyTools.getMaximum(**clusIt).first;
724  //get all xtals in 5x5 window around the seed
725  std::vector<DetId> dets5x5 = (barrel) ? ecalTopology_->getSubdetectorTopology(DetId::Ecal,EcalBarrel)->getWindow(seed,5,5):
727  selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
728 
729  //get all xtals belonging to cluster
730  for (const std::pair<DetId, float> &hit : (*clusIt)->hitsAndFractions()) {
731  selectedCells.push_back(hit.first);
732  }
733  }
734  }
735 
736  //remove duplicates
737  std::sort(selectedCells.begin(),selectedCells.end());
738  std::unique(selectedCells.begin(),selectedCells.end());
739 
740  // Retrieve the corresponding RecHits
741 
743  if(barrel)
745  else
747 
748  EcalRecHitCollection selectedRecHits;
749  const EcalRecHitCollection *recHits = rechitsH.product();
750 
751  unsigned nSelectedCells = selectedCells.size();
752  for (unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
753  EcalRecHitCollection::const_iterator it = recHits->find( selectedCells[icell] );
754  if ( it != recHits->end() ) {
755  selectedRecHits.push_back(*it);
756  }
757  }
758  selectedRecHits.sort();
759  if (embedRecHits_) anElectron.embedRecHits(& selectedRecHits);
760 
761  // set conversion veto selection
762  bool passconversionveto = false;
763  if( hConversions.isValid()){
764  // this is recommended method
765  passconversionveto = !ConversionTools::hasMatchedConversion( *itElectron, hConversions, beamSpotHandle->position());
766  }else{
767  // use missing hits without vertex fit method
768  passconversionveto = itElectron->gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) < 1;
769  }
770  anElectron.setPassConversionVeto( passconversionveto );
771 
772  // add sel to selected
773  fillElectron( anElectron, elecsRef,elecBaseRef,
774  genMatches, deposits, pfId, isolationValues, isolationValuesNoPFId);
775 
776  if(computeMiniIso_)
777  setElectronMiniIso(anElectron, pc.product());
778 
779  patElectrons->push_back(anElectron);
780  }
781  }
782 
783  // sort electrons in pt
784  std::sort(patElectrons->begin(), patElectrons->end(), pTComparator_);
785 
786  // add the electrons to the event output
787  std::unique_ptr<std::vector<Electron> > ptr(patElectrons);
788  iEvent.put(std::move(ptr));
789 
790  // clean up
792 
793 }
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
bool isAvailable() const
Definition: Ref.h:577
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
const edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:253
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
const GreaterByPt< Electron > pTComparator_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
const bool useParticleFlow_
pflow specific
const edm::EDGetTokenT< reco::PFCandidateCollection > pfElecToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
const edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
void embedHighLevel(pat::Electron &anElectron, reco::GsfTrackRef track, reco::TransientTrack &tt, reco::Vertex &primaryVertex, bool primaryVertexIsValid, reco::BeamSpot &beamspot, bool beamspotIsValid)
std::vector< EcalRecHit >::const_iterator const_iterator
reco::TransientTrack build(const reco::Track *p) const
std::pair< bool, Measurement1D > absoluteImpactParameter3D(const reco::TransientTrack &transientTrack, const reco::Vertex &vertex)
Definition: IPTools.cc:37
void fillElectron(Electron &aElectron, const ElectronBaseRef &electronRef, const reco::CandidateBaseRef &baseRef, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const bool pfId, const IsolationValueMaps &isolationValues, const IsolationValueMaps &isolationValuesNoPFId) const
common electron filling, for both the standard and PF2PAT case
void push_back(T const &t)
const edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
PFCandidateCollection::const_iterator PFCandidateConstIterator
iterator
std::vector< edm::EDGetTokenT< edm::ValueMap< float > > > elecIDTokens_
bool isRealData() const
Definition: EventBase.h:64
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electronToken_
const bool addMVAVariables_
mva input variables
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
bool enabled() const
True if it has a non null configuration.
Definition: MultiIsolator.h:50
const edm::EDGetTokenT< edm::ValueMap< reco::PFCandidatePtr > > pfCandidateMapToken_
pat::helper::MultiIsolator isolator_
std::vector< edm::Handle< edm::Association< reco::GenParticleCollection > > > GenAssociations
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
const bool embedHighLevelSelection_
embed high level selection variables?
void newEvent(const edm::Event &event, const edm::EventSetup &setup)
To be called for each new event, reads in the EventSetup object.
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
def unique(seq, keepstr=True)
Definition: tier0.py:24
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
math::XYZPoint Point
point in the space
Definition: TrackBase.h:83
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
bool isValid() const
Definition: HandleBase.h:74
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
static bool hasMatchedConversion(const reco::GsfElectron &ele, const edm::Handle< reco::ConversionCollection > &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
const_iterator end() const
Definition: DetId.h:18
const edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
void fillElectron2(Electron &anElectron, const reco::CandidatePtr &candPtrForIsolation, const reco::CandidatePtr &candPtrForGenMatch, const reco::CandidatePtr &candPtrForLoader, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const IsolationValueMaps &isolationValues) const
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueNoPFIdTokens_
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
T const * product() const
Definition: Handle.h:81
pat::helper::EfficiencyLoader efficiencyLoader_
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
const T & get() const
Definition: EventSetup.h:55
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > pfCandidateMultiMapToken_
pat::PATUserDataHelper< pat::Electron > userDataHelper_
const CaloTopology * ecalTopology_
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
Definition: CaloTopology.cc:25
void setElectronMiniIso(pat::Electron &anElectron, const pat::PackedCandidateCollection *pc)
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
Definition: MultiIsolator.h:16
iterator find(key_type k)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
size_type size() const
pat::helper::KinResolutionsLoader resolutionLoader_
const Point & position() const
position
Definition: BeamSpot.h:62
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
def move(src, dest)
Definition: eostools.py:510
std::vector< NameTag > elecIDSrcs_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:82
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
template<typename T >
void pat::PATElectronProducer::readIsolationLabels ( const edm::ParameterSet iConfig,
const char *  psetName,
IsolationLabels labels,
std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &  tokens 
)
private

fill the labels vector from the contents of the parameter set, for the isodeposit or isolation values embedding

Definition at line 204 of file PATElectronProducer.h.

References pat::EcalIso, edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), pat::HcalIso, crabWrapper::key, diffTwoXMLs::label, pat::PfAllParticleIso, pat::PfChargedAllIso, pat::PfChargedHadronIso, pat::PfGammaIso, pat::PfNeutralHadronIso, pat::PfPUChargedHadronIso, pat::TrackIso, pat::UserBaseIso, and edm::vector_transform().

Referenced by PATElectronProducer().

207  {
208 
209  labels.clear();
210 
211  if (iConfig.exists( psetName )) {
212  edm::ParameterSet depconf
213  = iConfig.getParameter<edm::ParameterSet>(psetName);
214 
215  if (depconf.exists("tracker")) labels.push_back(std::make_pair(pat::TrackIso, depconf.getParameter<edm::InputTag>("tracker")));
216  if (depconf.exists("ecal")) labels.push_back(std::make_pair(pat::EcalIso, depconf.getParameter<edm::InputTag>("ecal")));
217  if (depconf.exists("hcal")) labels.push_back(std::make_pair(pat::HcalIso, depconf.getParameter<edm::InputTag>("hcal")));
218  if (depconf.exists("pfAllParticles")) {
219  labels.push_back(std::make_pair(pat::PfAllParticleIso, depconf.getParameter<edm::InputTag>("pfAllParticles")));
220  }
221  if (depconf.exists("pfChargedHadrons")) {
222  labels.push_back(std::make_pair(pat::PfChargedHadronIso, depconf.getParameter<edm::InputTag>("pfChargedHadrons")));
223  }
224  if (depconf.exists("pfChargedAll")) {
225  labels.push_back(std::make_pair(pat::PfChargedAllIso, depconf.getParameter<edm::InputTag>("pfChargedAll")));
226  }
227  if (depconf.exists("pfPUChargedHadrons")) {
228  labels.push_back(std::make_pair(pat::PfPUChargedHadronIso, depconf.getParameter<edm::InputTag>("pfPUChargedHadrons")));
229  }
230  if (depconf.exists("pfNeutralHadrons")) {
231  labels.push_back(std::make_pair(pat::PfNeutralHadronIso, depconf.getParameter<edm::InputTag>("pfNeutralHadrons")));
232  }
233  if (depconf.exists("pfPhotons")) {
234  labels.push_back(std::make_pair(pat::PfGammaIso, depconf.getParameter<edm::InputTag>("pfPhotons")));
235  }
236  if (depconf.exists("user")) {
237  std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag> >("user");
238  std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
240  for ( ; it != ed; ++it, ++key) {
241  labels.push_back(std::make_pair(pat::IsolationKeys(key), *it));
242  }
243  }
244  }
245  tokens = edm::vector_transform(labels, [this](IsolationLabel const & label){return consumes<edm::ValueMap<T> >(label.second);});
246 }
T getParameter(std::string const &) const
bool exists(std::string const &parameterName) const
checks if a parameter exists
IsolationKeys
Enum defining isolation keys.
Definition: Isolation.h:9
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
std::pair< pat::IsolationKeys, edm::InputTag > IsolationLabel
void PATElectronProducer::setElectronMiniIso ( pat::Electron anElectron,
const pat::PackedCandidateCollection pc 
)
private

Definition at line 974 of file PATElectronProducer.cc.

References pat::getMiniPFIsolation(), reco::GsfElectron::isEE(), miniIsoParamsB_, miniIsoParamsE_, reco::GsfElectron::p4(), and pat::Lepton< LeptonType >::setMiniPFIsolation().

Referenced by produce().

975 {
976  pat::PFIsolation miniiso;
977  if(anElectron.isEE())
978  miniiso = pat::getMiniPFIsolation(pc, anElectron.p4(),
979  miniIsoParamsE_[0], miniIsoParamsE_[1], miniIsoParamsE_[2],
980  miniIsoParamsE_[3], miniIsoParamsE_[4], miniIsoParamsE_[5],
981  miniIsoParamsE_[6], miniIsoParamsE_[7], miniIsoParamsE_[8]);
982  else
983  miniiso = pat::getMiniPFIsolation(pc, anElectron.p4(),
984  miniIsoParamsB_[0], miniIsoParamsB_[1], miniIsoParamsB_[2],
985  miniIsoParamsB_[3], miniIsoParamsB_[4], miniIsoParamsB_[5],
986  miniIsoParamsB_[6], miniIsoParamsB_[7], miniIsoParamsB_[8]);
987  anElectron.setMiniPFIsolation(miniiso);
988 
989 }
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:225
std::vector< double > miniIsoParamsE_
bool isEE() const
Definition: GsfElectron.h:353
std::vector< double > miniIsoParamsB_
void setMiniPFIsolation(PFIsolation const &iso)
Definition: Lepton.h:197
PFIsolation getMiniPFIsolation(const pat::PackedCandidateCollection *pfcands, const math::XYZTLorentzVector &p4, float mindr=0.05, float maxdr=0.2, float kt_scale=10.0, float ptthresh=0.5, float deadcone_ch=0.0001, float deadcone_pu=0.01, float deadcone_ph=0.01, float deadcone_nh=0.01, float dZ_cut=0.0)

Member Data Documentation

const bool pat::PATElectronProducer::addEfficiencies_
private

Definition at line 181 of file PATElectronProducer.h.

Referenced by PATElectronProducer().

const bool pat::PATElectronProducer::addElecID_
private

Definition at line 164 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

bool pat::PATElectronProducer::addGenMatch_
private

Definition at line 80 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), PATElectronProducer(), and produce().

const bool pat::PATElectronProducer::addMVAVariables_
private

mva input variables

Definition at line 102 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::addPFClusterIso_
private

Definition at line 108 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::addPuppiIsolation_
private

Definition at line 109 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const bool pat::PATElectronProducer::addResolutions_
private

Definition at line 184 of file PATElectronProducer.h.

Referenced by PATElectronProducer().

const edm::EDGetTokenT<reco::BeamSpot> pat::PATElectronProducer::beamLineToken_
private

Definition at line 115 of file PATElectronProducer.h.

Referenced by produce().

bool pat::PATElectronProducer::computeMiniIso_
private

Definition at line 85 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::ecalPFClusterIsoT_
private

Definition at line 110 of file PATElectronProducer.h.

Referenced by produce().

const CaloTopology* pat::PATElectronProducer::ecalTopology_
private

Definition at line 198 of file PATElectronProducer.h.

Referenced by produce().

pat::helper::EfficiencyLoader pat::PATElectronProducer::efficiencyLoader_
private

Definition at line 182 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), PATElectronProducer(), and produce().

std::vector<NameTag> pat::PATElectronProducer::elecIDSrcs_
private

Definition at line 166 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<float> > > pat::PATElectronProducer::elecIDTokens_
private

Definition at line 167 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const edm::EDGetTokenT<edm::View<reco::GsfElectron> > pat::PATElectronProducer::electronToken_
private

Definition at line 68 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::embedBasicClusters_
private

Definition at line 75 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), and produce().

bool pat::PATElectronProducer::embedGenMatch_
private

Definition at line 81 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), and produce().

const bool pat::PATElectronProducer::embedGsfElectronCore_
private

Definition at line 70 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedGsfTrack_
private

Definition at line 71 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedHighLevelSelection_
private

embed high level selection variables?

Definition at line 114 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::embedPFCandidate_
private

Definition at line 99 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::embedPflowBasicClusters_
private

Definition at line 77 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), and produce().

const bool pat::PATElectronProducer::embedPflowPreshowerClusters_
private

Definition at line 78 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedPflowSuperCluster_
private

Definition at line 73 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedPreshowerClusters_
private

Definition at line 76 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedRecHits_
private

Definition at line 82 of file PATElectronProducer.h.

Referenced by produce().

const bool pat::PATElectronProducer::embedSeedCluster_
private

Definition at line 74 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedSuperCluster_
private

Definition at line 72 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

const bool pat::PATElectronProducer::embedTrack_
private

Definition at line 79 of file PATElectronProducer.h.

Referenced by fillElectron(), and fillElectron2().

std::vector<edm::EDGetTokenT<edm::Association<reco::GenParticleCollection> > > pat::PATElectronProducer::genMatchTokens_
private

Definition at line 91 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::hcalPFClusterIsoT_
private

Definition at line 111 of file PATElectronProducer.h.

Referenced by produce().

const edm::EDGetTokenT<reco::ConversionCollection> pat::PATElectronProducer::hConversionsToken_
private

Definition at line 69 of file PATElectronProducer.h.

Referenced by produce().

IsolationLabels pat::PATElectronProducer::isoDepositLabels_
private

Definition at line 174 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), PATElectronProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<IsoDeposit> > > pat::PATElectronProducer::isoDepositTokens_
private

Definition at line 175 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

IsolationLabels pat::PATElectronProducer::isolationValueLabels_
private

Definition at line 176 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), and PATElectronProducer().

IsolationLabels pat::PATElectronProducer::isolationValueLabelsNoPFId_
private

Definition at line 178 of file PATElectronProducer.h.

Referenced by fillElectron(), and PATElectronProducer().

std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > pat::PATElectronProducer::isolationValueNoPFIdTokens_
private

Definition at line 179 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

std::vector<edm::EDGetTokenT<edm::ValueMap<double> > > pat::PATElectronProducer::isolationValueTokens_
private

Definition at line 177 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

pat::helper::MultiIsolator pat::PATElectronProducer::isolator_
private

Definition at line 172 of file PATElectronProducer.h.

Referenced by produce().

pat::helper::MultiIsolator::IsolationValuePairs pat::PATElectronProducer::isolatorTmpStorage_
private

Definition at line 173 of file PATElectronProducer.h.

Referenced by produce().

std::vector<double> pat::PATElectronProducer::miniIsoParamsB_
private

Definition at line 87 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and setElectronMiniIso().

std::vector<double> pat::PATElectronProducer::miniIsoParamsE_
private

Definition at line 86 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and setElectronMiniIso().

edm::EDGetTokenT<pat::PackedCandidateCollection> pat::PATElectronProducer::pcToken_
private

Definition at line 84 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const edm::EDGetTokenT<edm::ValueMap<reco::PFCandidatePtr> > pat::PATElectronProducer::pfCandidateMapToken_
private

Definition at line 97 of file PATElectronProducer.h.

Referenced by produce().

const edm::EDGetTokenT<edm::ValueMap<std::vector<reco::PFCandidateRef> > > pat::PATElectronProducer::pfCandidateMultiMapToken_
private

Definition at line 98 of file PATElectronProducer.h.

Referenced by produce().

const edm::EDGetTokenT<reco::PFCandidateCollection> pat::PATElectronProducer::pfElecToken_
private

Definition at line 96 of file PATElectronProducer.h.

Referenced by produce().

const GreaterByPt<Electron> pat::PATElectronProducer::pTComparator_
private

Definition at line 170 of file PATElectronProducer.h.

Referenced by produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPIIsolation_charged_hadrons_
private

Definition at line 189 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPIIsolation_neutral_hadrons_
private

Definition at line 190 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPIIsolation_photons_
private

Definition at line 191 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPINoLeptonsIsolation_charged_hadrons_
private

Definition at line 193 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPINoLeptonsIsolation_neutral_hadrons_
private

Definition at line 194 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

edm::EDGetTokenT<edm::ValueMap<float> > pat::PATElectronProducer::PUPPINoLeptonsIsolation_photons_
private

Definition at line 195 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const edm::EDGetTokenT<std::vector<reco::Vertex> > pat::PATElectronProducer::pvToken_
private

Definition at line 116 of file PATElectronProducer.h.

Referenced by produce().

const edm::InputTag pat::PATElectronProducer::reducedBarrelRecHitCollection_
private

Definition at line 103 of file PATElectronProducer.h.

const edm::EDGetTokenT<EcalRecHitCollection> pat::PATElectronProducer::reducedBarrelRecHitCollectionToken_
private

Definition at line 104 of file PATElectronProducer.h.

Referenced by produce().

const edm::InputTag pat::PATElectronProducer::reducedEndcapRecHitCollection_
private

Definition at line 105 of file PATElectronProducer.h.

const edm::EDGetTokenT<EcalRecHitCollection> pat::PATElectronProducer::reducedEndcapRecHitCollectionToken_
private

Definition at line 106 of file PATElectronProducer.h.

Referenced by produce().

pat::helper::KinResolutionsLoader pat::PATElectronProducer::resolutionLoader_
private

Definition at line 185 of file PATElectronProducer.h.

Referenced by fillElectron(), fillElectron2(), PATElectronProducer(), and produce().

const bool pat::PATElectronProducer::useParticleFlow_
private

pflow specific

Definition at line 94 of file PATElectronProducer.h.

Referenced by fillElectron(), PATElectronProducer(), and produce().

const bool pat::PATElectronProducer::usePfCandidateMultiMap_
private

Definition at line 95 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

pat::PATUserDataHelper<pat::Electron> pat::PATElectronProducer::userDataHelper_
private

Definition at line 196 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().

const bool pat::PATElectronProducer::useUserData_
private

Definition at line 187 of file PATElectronProducer.h.

Referenced by PATElectronProducer(), and produce().