|
| LeptonFSRProducer (const edm::ParameterSet &iConfig) |
|
| ~LeptonFSRProducer () override=default |
|
| EDProducer ()=default |
|
| EDProducer (const EDProducer &)=delete |
|
bool | hasAbilityToProduceInBeginLumis () const final |
|
bool | hasAbilityToProduceInBeginProcessBlocks () const final |
|
bool | hasAbilityToProduceInBeginRuns () const final |
|
bool | hasAbilityToProduceInEndLumis () const final |
|
bool | hasAbilityToProduceInEndProcessBlocks () const final |
|
bool | hasAbilityToProduceInEndRuns () const final |
|
EDProducer & | operator= (const EDProducer &)=delete |
|
bool | wantsGlobalLuminosityBlocks () const final |
|
bool | wantsGlobalRuns () const final |
|
bool | wantsInputProcessBlocks () const final |
|
bool | wantsProcessBlocks () const final |
|
bool | wantsStreamLuminosityBlocks () const final |
|
bool | wantsStreamRuns () const final |
|
| EDProducerBase () |
|
ModuleDescription const & | moduleDescription () const |
|
| ~EDProducerBase () override |
|
void | callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func) |
|
std::vector< edm::ProductResolverIndex > const & | indiciesForPutProducts (BranchType iBranchType) const |
|
| ProducerBase () |
|
std::vector< edm::ProductResolverIndex > const & | putTokenIndexToProductResolverIndex () const |
|
std::vector< bool > const & | recordProvenanceList () const |
|
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, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel) |
|
TypeLabelList const & | typeLabelList () const |
| used by the fwk to register the list of products of this module More...
|
|
| ~ProducerBase () noexcept(false) override |
|
std::vector< ConsumesInfo > | consumesInfo () 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 |
|
ESProxyIndex const * | esGetTokenIndices (edm::Transition iTrans) const |
|
std::vector< ESProxyIndex > const & | esGetTokenIndicesVector (edm::Transition iTrans) const |
|
std::vector< ESRecordIndex > const & | esGetTokenRecordIndicesVector (edm::Transition iTrans) const |
|
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::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const |
|
EDConsumerBase const & | operator= (EDConsumerBase const &)=delete |
|
EDConsumerBase & | operator= (EDConsumerBase &&)=default |
|
bool | registeredToConsume (ProductResolverIndex, bool, BranchType) const |
|
bool | registeredToConsumeMany (TypeID const &, BranchType) const |
|
void | selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase) |
|
ProductResolverIndexAndSkipBit | uncheckedIndexFrom (EDGetToken) const |
|
void | updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet) |
|
void | updateLookup (eventsetup::ESRecordsToProxyIndices const &) |
|
virtual | ~EDConsumerBase () noexcept(false) |
|
|
typedef EDProducerBase | ModuleType |
|
using | ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > > |
|
typedef ProductRegistryHelper::TypeLabelList | TypeLabelList |
|
typedef ProductLabels | Labels |
|
template<Transition Tr = Transition::Event> |
auto | produces (std::string instanceName) noexcept |
| declare what type of product will make and with which optional label More...
|
|
template<Transition B> |
BranchAliasSetter | produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true) |
|
template<BranchType B> |
BranchAliasSetter | produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true) |
|
BranchAliasSetter | produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true) |
|
template<typename ProductType , Transition B> |
BranchAliasSetterT< ProductType > | produces (std::string instanceName) |
|
template<class ProductType > |
BranchAliasSetterT< ProductType > | produces () |
|
template<typename ProductType , BranchType B> |
BranchAliasSetterT< ProductType > | produces (std::string instanceName) |
|
template<typename ProductType , BranchType B> |
BranchAliasSetterT< ProductType > | produces () |
|
template<class ProductType > |
BranchAliasSetterT< ProductType > | produces (std::string instanceName) |
|
template<typename ProductType , Transition B> |
BranchAliasSetterT< ProductType > | produces () |
|
template<Transition Tr = Transition::Event> |
auto | produces () noexcept |
|
ProducesCollector | producesCollector () |
|
template<typename ProductType , BranchType B = InEvent> |
EDGetTokenT< ProductType > | consumes (edm::InputTag const &tag) |
|
template<BranchType B = InEvent> |
EDConsumerBaseAdaptor< B > | consumes (edm::InputTag tag) noexcept |
|
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 ESProduct , typename ESRecord , Transition Tr = Transition::Event> |
auto | esConsumes () |
|
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event> |
auto | esConsumes (ESInputTag const &tag) |
|
template<Transition Tr = Transition::Event> |
constexpr auto | esConsumes () |
|
template<Transition Tr = Transition::Event> |
auto | esConsumes (ESInputTag tag) |
|
template<Transition Tr = Transition::Event> |
ESGetTokenGeneric | esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey) |
| Used with EventSetupRecord::doGet. More...
|
|
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) |
|
void | resetItemsToGetFrom (BranchType iType) |
|
Search for FSR photons for muons and electrons.
Photon candidates are searched among the "packedPFCandidates" collection with the specified cuts, and are required to be isolated (relIso, with a cone of 0.3) and not to be in the footprint of all electrons in the "electrons" collection. Each photon is matched by DeltaR to the closest among all muons and electrons and stored if passing dR/ET^2<deltaROverEt2Max. In addition ValueMaps are stored, with links to one photon per muon/electron. For this purpose, if more than a photon is matched to a lepton, the lowest-DR/ET^2 is chosen.
Definition at line 31 of file LeptonFSRProducer.cc.
Implements edm::global::EDProducerBase.
Definition at line 100 of file LeptonFSRProducer.cc.
References funct::abs(), computeRelativeIsolation(), PbPb_ZMuSkimMuonDPG_cff::deltaR, HGC3DClusterGenMatchSelector_cfi::dR, HLT_2022v12_cff::dRMin, drSafe, electronFootprintVeto(), pwdgSkimBPark_cfi::electrons, electrons_, electronsForVeto_, etaCutE, etaCutMu, edm::helper::Filler< Map >::fill(), iEvent, edm::helper::Filler< Map >::insert(), isoCut, eostools::move(), HLT_2022v12_cff::muon, fsrPhotons_cff::muonIdx, PDWG_BPHSkim_cff::muons, muons_, HLT_2022v12_cff::pfcands, pfcands_, photonPtCut, DiDispStaMuonMonitor_cfi::pt, ptCutE, and ptCutMu.
113 auto fsrPhotons = std::make_unique<std::vector<pat::GenericParticle>>();
115 std::vector<int> muPhotonIdxs(
muons->size(), -1);
116 std::vector<double> muPhotonDRET2(
muons->size(), 1e9);
118 std::vector<int> elePhotonIdxs(
electrons->size(), -1);
119 std::vector<double> elePhotonDRET2(
electrons->size(), 1e9);
136 double photon_relIso03 = 1e9;
137 bool skipPhoton =
false;
145 if (dR < dRMin && dR >
drSafe && dR < drEtCut * pc->
pt() * pc->pt()) {
148 if (photon_relIso03 >
isoCut) {
172 double dR =
deltaR(ele->eta(), ele->phi(), pc->eta(), pc->phi());
173 if (dR < dRMin && dR >
drSafe && dR < drEtCut * pc->
pt() * pc->pt()) {
175 if (photon_relIso03 > 1e8) {
178 if (photon_relIso03 >
isoCut) {
194 if (closestMu >= 0 || closestEle >= 0) {
196 double dRET2 =
dRMin / pc->pt() / pc->pt();
197 int iPhoton = fsrPhotons->size();
199 fsrPhotons->back().addUserFloat(
"relIso03", photon_relIso03);
200 fsrPhotons->back().addUserFloat(
"dROverEt2", dRET2);
202 if (closestMu >= 0) {
205 if (dRET2 < muPhotonDRET2[closestMu]) {
206 muPhotonDRET2[closestMu] = dRET2;
207 muPhotonIdxs[closestMu] = iPhoton;
209 }
else if (closestEle >= 0) {
212 if (dRET2 < elePhotonDRET2[closestEle]) {
213 elePhotonDRET2[closestEle] = dRET2;
214 elePhotonIdxs[closestEle] = iPhoton;
225 fillerBareIdx.insert(
muons, muPhotonIdxs.begin(), muPhotonIdxs.end());
226 fillerBareIdx.fill();
233 fillerBareIdx.insert(
electrons, elePhotonIdxs.begin(), elePhotonIdxs.end());
234 fillerBareIdx.fill();
double computeRelativeIsolation(const pat::PackedCandidate &photon, const pat::PackedCandidateCollection &pfcands, const double &isoConeMax2, const double &isoConeMin2) const
const edm::EDGetTokenT< pat::PackedCandidateCollection > pfcands_
bool electronFootprintVeto(pat::PackedCandidateRef &pfcandRef, edm::Handle< pat::ElectronCollection > electronsForVeto) const
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
edm::Ref< pat::PackedCandidateCollection > PackedCandidateRef
Abs< T >::type abs(const T &t)
const edm::EDGetTokenT< edm::View< reco::Muon > > muons_
const edm::EDGetTokenT< pat::ElectronCollection > electronsForVeto_
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electrons_