CMS 3D CMS Logo

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

class definition More...

Inheritance diagram for pat::PATMuonProducer:
edm::stream::EDProducer< edm::GlobalCache< PATMuonHeavyObjectCache > >

Public Member Functions

 PATMuonProducer (const edm::ParameterSet &iConfig, PATMuonHeavyObjectCache const *)
 default constructir More...
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 everything that needs to be done during the event loop More...
 
 ~PATMuonProducer () override
 default destructur More...
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< PATMuonHeavyObjectCache > >
 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
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 description of config file parameters More...
 
static void globalEndJob (PATMuonHeavyObjectCache *)
 
static std::unique_ptr< PATMuonHeavyObjectCacheinitializeGlobalCache (const edm::ParameterSet &iConfig)
 

Private Types

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 edm::RefToBase< reco::MuonMuonBaseRef
 typedefs for convenience More...
 

Private Member Functions

void embedHighLevel (pat::Muon &aMuon, reco::TrackRef track, reco::TransientTrack &tt, reco::Vertex &primaryVertex, bool primaryVertexIsValid, reco::BeamSpot &beamspot, bool beamspotIsValid)
 
void fillHltTriggerInfo (pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const std::vector< std::string > &collection_names)
 
void fillL1TriggerInfo (pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const edm::ESHandle< GlobalTrackingGeometry > &geometry)
 
void fillMuon (Muon &aMuon, const MuonBaseRef &muonRef, const reco::CandidateBaseRef &baseRef, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const IsolationValueMaps &isolationValues) const
 common muon filling, for both the standard and PF2PAT case More...
 
std::optional< GlobalPointgetMuonDirection (const reco::MuonChamberMatch &chamberMatch, const edm::ESHandle< GlobalTrackingGeometry > &geometry, const DetId &chamberId)
 
double getRelMiniIsoPUCorrected (const pat::Muon &muon, double rho, const std::vector< double > &area)
 
bool isChargedHadron (long pdgid)
 
bool isNeutralHadron (long pdgid)
 
bool isPhoton (long pdgid)
 
double puppiCombinedIsolation (const pat::Muon &muon, const pat::PackedCandidateCollection *pc)
 
template<typename T >
void readIsolationLabels (const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T >>> &tokens)
 
double relMiniIsoPUCorrected (const pat::Muon &aMuon, double rho)
 
void setMuonMiniIso (pat::Muon &aMuon, const pat::PackedCandidateCollection *pc)
 

Private Attributes

bool addEfficiencies_
 add efficiencies to the muon (this will be data members of th muon even w/o embedding) More...
 
bool addGenMatch_
 add generator match information More...
 
bool addInverseBeta_
 add combined inverse beta measurement into the muon More...
 
bool addPuppiIsolation_
 add puppi isolation More...
 
bool addResolutions_
 add resolutions to the muon (this will be data members of th muon even w/o embedding) More...
 
bool addTriggerMatching_
 Trigger. More...
 
edm::EDGetTokenT< reco::BeamSpotbeamLineToken_
 input source of the primary vertex/beamspot More...
 
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > caloMETMuonCorrsToken_
 source of caloMET muon corrections More...
 
bool computeMiniIso_
 
bool computeMuonIDMVA_
 
bool computeMuonMVA_
 standard muon selectors More...
 
bool computePuppiCombinedIso_
 
bool computeSoftMuonMVA_
 
std::vector< double > effectiveAreaVec_
 
pat::helper::EfficiencyLoader efficiencyLoader_
 helper class to add efficiencies to the muon More...
 
bool embedBestTrack_
 embed the track from best muon measurement (global pflow) More...
 
bool embedCaloMETMuonCorrs_
 embed muon MET correction info for caloMET into the muon More...
 
bool embedCombinedMuon_
 embed track of the combined fit into the muon More...
 
bool embedDytMuon_
 embed track from DYT muon fit into the muon More...
 
bool embedGenMatch_
 embed the gen match information into the muon More...
 
bool embedHighLevelSelection_
 embed high level selection variables More...
 
bool embedPFCandidate_
 embed pfCandidates into the muon More...
 
bool embedPfEcalEnergy_
 add ecal PF energy More...
 
bool embedPickyMuon_
 embed track from picky muon fit into the muon More...
 
bool embedStandAloneMuon_
 embed track from muon system into the muon More...
 
bool embedTcMETMuonCorrs_
 embed muon MET correction info for tcMET into the muon More...
 
bool embedTpfmsMuon_
 embed track from tpfms muon fit into the muon More...
 
bool embedTrack_
 embed the track from inner tracker into the muon More...
 
bool embedTunePBestTrack_
 embed the track from best muon measurement (muon only) More...
 
bool forceEmbedBestTrack_
 force separate embed of the best track even if already embedded More...
 
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
 input tags for generator match information More...
 
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecordgeometryToken_
 
std::vector< std::string > hltCollectionFilters_
 
IsolationLabels isoDepositLabels_
 input source for isoDeposits More...
 
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
 
IsolationLabels isolationValueLabels_
 input source isolation value maps More...
 
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
 
pat::helper::MultiIsolator isolator_
 
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
 isolation value pair for temporary storage before being folded into the muon More...
 
std::vector< double > miniIsoParams_
 
edm::EDGetTokenT< edm::ValueMap< reco::MuonTimeExtra > > muonTimeExtraToken_
 input tag for reading inverse beta More...
 
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken_
 input source More...
 
edm::EDGetTokenT< reco::JetTagCollectionmvaBTagCollectionTag_
 
edm::EDGetTokenT< reco::JetCorrectormvaL1Corrector_
 
edm::EDGetTokenT< reco::JetCorrectormvaL1L2L3ResCorrector_
 
bool mvaUseJec_
 
const edm::EDPutTokenT< std::vector< Muon > > patMuonPutToken_
 
edm::EDGetTokenT< pat::PackedCandidateCollectionpcToken_
 
edm::EDGetTokenT< reco::PFCandidateCollectionpfMuonToken_
 input source pfCandidates that will be to be transformed into pat::Muons, when using PF2PAT More...
 
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_
 
edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
 input source of the primary vertex More...
 
bool recomputeBasicSelectors_
 
double relMiniIsoPUCorrected_
 
pat::helper::KinResolutionsLoader resolutionLoader_
 helper class to add resolutions to the muon More...
 
edm::EDGetTokenT< double > rho_
 
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
 MC info. More...
 
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > tcMETMuonCorrsToken_
 source of tcMET muon corrections More...
 
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecordtransientTrackBuilderToken_
 
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > triggerObjects_
 
edm::EDGetTokenT< edm::TriggerResultstriggerResults_
 
bool useParticleFlow_
 switch to use particle flow (PF2PAT) or not More...
 
pat::PATUserDataHelper< pat::MuonuserDataHelper_
 helper class to add userData to the muon More...
 
bool useUserData_
 add user data to the muon (this will be data members of th muon even w/o embedding) More...
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< PATMuonHeavyObjectCache > >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

class definition

Produces pat::Muon's.

The PATMuonProducer produces analysis-level pat::Muon's starting from a collection of objects of reco::Muon.

Author
Steven Lowette, Roger Wolf
Version
Id
PATMuonProducer.h,v 1.29 2012/08/22 15:02:52 bellan Exp

Definition at line 78 of file PATMuonProducer.cc.

Member Typedef Documentation

◆ GenAssociations

Definition at line 99 of file PATMuonProducer.cc.

◆ IsoDepositMaps

Definition at line 100 of file PATMuonProducer.cc.

◆ IsolationLabel

Definition at line 102 of file PATMuonProducer.cc.

◆ IsolationLabels

Definition at line 103 of file PATMuonProducer.cc.

◆ IsolationValueMaps

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

Definition at line 101 of file PATMuonProducer.cc.

◆ MuonBaseRef

typedefs for convenience

Definition at line 98 of file PATMuonProducer.cc.

Constructor & Destructor Documentation

◆ PATMuonProducer()

PATMuonProducer::PATMuonProducer ( const edm::ParameterSet iConfig,
PATMuonHeavyObjectCache const *   
)
explicit

default constructir

Definition at line 347 of file PATMuonProducer.cc.

References deDxTools::esConsumes().

349  useUserData_(iConfig.exists("userData")),
350  computeMuonMVA_(false),
351  computeMuonIDMVA_(false),
352  computeSoftMuonMVA_(false),
354  mvaUseJec_(false),
355  isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter<edm::ParameterSet>("userIsolation")
356  : edm::ParameterSet(),
357  consumesCollector(),
358  false),
360  transientTrackBuilderToken_{esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))},
361  patMuonPutToken_{produces<std::vector<Muon>>()} {
362  // input source
363  muonToken_ = consumes<edm::View<reco::Muon>>(iConfig.getParameter<edm::InputTag>("muonSource"));
364  // embedding of tracks
365  embedBestTrack_ = iConfig.getParameter<bool>("embedMuonBestTrack");
366  embedTunePBestTrack_ = iConfig.getParameter<bool>("embedTunePMuonBestTrack");
367  forceEmbedBestTrack_ = iConfig.getParameter<bool>("forceBestTrackEmbedding");
368  embedTrack_ = iConfig.getParameter<bool>("embedTrack");
369  embedCombinedMuon_ = iConfig.getParameter<bool>("embedCombinedMuon");
370  embedStandAloneMuon_ = iConfig.getParameter<bool>("embedStandAloneMuon");
371  // embedding of muon MET correction information
372  embedCaloMETMuonCorrs_ = iConfig.getParameter<bool>("embedCaloMETMuonCorrs");
373  embedTcMETMuonCorrs_ = iConfig.getParameter<bool>("embedTcMETMuonCorrs");
375  mayConsume<edm::ValueMap<reco::MuonMETCorrectionData>>(iConfig.getParameter<edm::InputTag>("caloMETMuonCorrs"));
377  mayConsume<edm::ValueMap<reco::MuonMETCorrectionData>>(iConfig.getParameter<edm::InputTag>("tcMETMuonCorrs"));
378  // pflow specific configurables
379  useParticleFlow_ = iConfig.getParameter<bool>("useParticleFlow");
380  embedPFCandidate_ = iConfig.getParameter<bool>("embedPFCandidate");
381  pfMuonToken_ = mayConsume<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfMuonSource"));
382  embedPfEcalEnergy_ = iConfig.getParameter<bool>("embedPfEcalEnergy");
383  // embedding of tracks from TeV refit
384  embedPickyMuon_ = iConfig.getParameter<bool>("embedPickyMuon");
385  embedTpfmsMuon_ = iConfig.getParameter<bool>("embedTpfmsMuon");
386  embedDytMuon_ = iConfig.getParameter<bool>("embedDytMuon");
387  // embedding of inverse beta variable information
388  addInverseBeta_ = iConfig.getParameter<bool>("addInverseBeta");
389  if (addInverseBeta_) {
391  consumes<edm::ValueMap<reco::MuonTimeExtra>>(iConfig.getParameter<edm::InputTag>("sourceMuonTimeExtra"));
392  }
393  // Monte Carlo matching
394  addGenMatch_ = iConfig.getParameter<bool>("addGenMatch");
395  if (addGenMatch_) {
396  embedGenMatch_ = iConfig.getParameter<bool>("embedGenMatch");
397  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
399  iConfig.getParameter<edm::InputTag>("genParticleMatch")));
400  } else {
402  iConfig.getParameter<std::vector<edm::InputTag>>("genParticleMatch"),
403  [this](edm::InputTag const& tag) { return consumes<edm::Association<reco::GenParticleCollection>>(tag); });
404  }
405  }
406  // efficiencies
407  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
408  if (addEfficiencies_) {
410  pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
411  }
412  // resolutions
413  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
414  if (addResolutions_) {
416  pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions"), consumesCollector());
417  }
418  // puppi
419  addPuppiIsolation_ = iConfig.getParameter<bool>("addPuppiIsolation");
420  if (addPuppiIsolation_) {
422  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
424  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
426  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
427  //puppiNoLeptons
429  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons"));
431  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons"));
433  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationPhotons"));
434  }
435  // read isoDeposit labels, for direct embedding
436  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
437  // read isolation value labels, for direct embedding
439  // check to see if the user wants to add user data
440  if (useUserData_) {
441  userDataHelper_ = PATUserDataHelper<Muon>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
442  }
443  // embed high level selection variables
444  embedHighLevelSelection_ = iConfig.getParameter<bool>("embedHighLevelSelection");
446  beamLineToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"));
447  pvToken_ = consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("pvSrc"));
448  }
449 
450  //for mini-isolation calculation
451  computeMiniIso_ = iConfig.getParameter<bool>("computeMiniIso");
452 
453  computePuppiCombinedIso_ = iConfig.getParameter<bool>("computePuppiCombinedIso");
454 
455  effectiveAreaVec_ = iConfig.getParameter<std::vector<double>>("effectiveAreaVec");
456 
457  miniIsoParams_ = iConfig.getParameter<std::vector<double>>("miniIsoParams");
458  if (computeMiniIso_ && miniIsoParams_.size() != 9) {
459  throw cms::Exception("ParameterError") << "miniIsoParams must have exactly 9 elements.\n";
460  }
462  pcToken_ = consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfCandsForMiniIso"));
463 
464  // standard selectors
465  recomputeBasicSelectors_ = iConfig.getParameter<bool>("recomputeBasicSelectors");
466  computeMuonMVA_ = iConfig.getParameter<bool>("computeMuonMVA");
467  computeMuonIDMVA_ = iConfig.getParameter<bool>("computeMuonIDMVA");
468  if (computeMuonMVA_ and not computeMiniIso_)
469  throw cms::Exception("ConfigurationError") << "MiniIso is needed for Muon MVA calculation.\n";
470 
471  if (computeMuonMVA_) {
472  // pfCombinedInclusiveSecondaryVertexV2BJetTags
473  mvaBTagCollectionTag_ = consumes<reco::JetTagCollection>(iConfig.getParameter<edm::InputTag>("mvaJetTag"));
474  mvaL1Corrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1Corrector"));
475  mvaL1L2L3ResCorrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1L2L3ResCorrector"));
476  rho_ = consumes<double>(iConfig.getParameter<edm::InputTag>("rho"));
477  mvaUseJec_ = iConfig.getParameter<bool>("mvaUseJec");
478  }
479 
480  computeSoftMuonMVA_ = iConfig.getParameter<bool>("computeSoftMuonMVA");
481 
482  // MC info
483  simInfo_ = consumes<edm::ValueMap<reco::MuonSimInfo>>(iConfig.getParameter<edm::InputTag>("muonSimInfo"));
484 
485  addTriggerMatching_ = iConfig.getParameter<bool>("addTriggerMatching");
486  if (addTriggerMatching_) {
488  consumes<std::vector<pat::TriggerObjectStandAlone>>(iConfig.getParameter<edm::InputTag>("triggerObjects"));
489  triggerResults_ = consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("triggerResults"));
490  }
491  hltCollectionFilters_ = iConfig.getParameter<std::vector<std::string>>("hltCollectionFilters");
492 }
bool embedTpfmsMuon_
embed track from tpfms muon fit into the muon
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
bool useUserData_
add user data to the muon (this will be data members of th muon even w/o embedding) ...
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T >>> &tokens)
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
Assists in assimilating all pat::UserData into pat objects.
bool addPuppiIsolation_
add puppi isolation
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > tcMETMuonCorrsToken_
source of tcMET muon corrections
bool embedTcMETMuonCorrs_
embed muon MET correction info for tcMET into the muon
edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
input source of the primary vertex
edm::EDGetTokenT< edm::ValueMap< reco::MuonTimeExtra > > muonTimeExtraToken_
input tag for reading inverse beta
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
edm::EDGetTokenT< double > rho_
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken_
input source
bool addEfficiencies_
add efficiencies to the muon (this will be data members of th muon even w/o embedding) ...
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > caloMETMuonCorrsToken_
source of caloMET muon corrections
bool embedCaloMETMuonCorrs_
embed muon MET correction info for caloMET into the muon
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
MC info.
bool addTriggerMatching_
Trigger.
bool embedBestTrack_
embed the track from best muon measurement (global pflow)
edm::EDGetTokenT< reco::JetCorrector > mvaL1Corrector_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > transientTrackBuilderToken_
bool addResolutions_
add resolutions to the muon (this will be data members of th muon even w/o embedding) ...
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
std::vector< double > miniIsoParams_
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< double > effectiveAreaVec_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
edm::EDGetTokenT< reco::JetTagCollection > mvaBTagCollectionTag_
edm::EDGetTokenT< reco::PFCandidateCollection > pfMuonToken_
input source pfCandidates that will be to be transformed into pat::Muons, when using PF2PAT ...
pat::helper::MultiIsolator isolator_
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
input source of the primary vertex/beamspot
bool addInverseBeta_
add combined inverse beta measurement into the muon
bool useParticleFlow_
switch to use particle flow (PF2PAT) or not
pat::PATUserDataHelper< pat::Muon > userDataHelper_
helper class to add userData to the muon
bool embedStandAloneMuon_
embed track from muon system into the muon
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
bool embedTrack_
embed the track from inner tracker into the muon
bool addGenMatch_
add generator match information
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > geometryToken_
bool embedPfEcalEnergy_
add ecal PF energy
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
std::vector< std::string > hltCollectionFilters_
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
edm::EDGetTokenT< reco::JetCorrector > mvaL1L2L3ResCorrector_
pat::helper::EfficiencyLoader efficiencyLoader_
helper class to add efficiencies to the muon
bool embedPickyMuon_
embed track from picky muon fit into the muon
bool embedDytMuon_
embed track from DYT muon fit into the muon
const edm::EDPutTokenT< std::vector< Muon > > patMuonPutToken_
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > triggerObjects_
bool embedGenMatch_
embed the gen match information into the muon
IsolationLabels isoDepositLabels_
input source for isoDeposits
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
input tags for generator match information
IsolationLabels isolationValueLabels_
input source isolation value maps
bool forceEmbedBestTrack_
force separate embed of the best track even if already embedded
bool embedPFCandidate_
embed pfCandidates into the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
bool computeMuonMVA_
standard muon selectors
bool embedCombinedMuon_
embed track of the combined fit into the muon
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
bool embedHighLevelSelection_
embed high level selection variables

◆ ~PATMuonProducer()

PATMuonProducer::~PATMuonProducer ( )
override

default destructur

Definition at line 494 of file PATMuonProducer.cc.

494 {}

Member Function Documentation

◆ embedHighLevel()

void PATMuonProducer::embedHighLevel ( pat::Muon aMuon,
reco::TrackRef  track,
reco::TransientTrack tt,
reco::Vertex primaryVertex,
bool  primaryVertexIsValid,
reco::BeamSpot beamspot,
bool  beamspotIsValid 
)
private

Definition at line 1393 of file PATMuonProducer.cc.

References pat::Muon::BS2D, pat::Muon::BS3D, BeamMonitor_cff::primaryVertex, pat::Muon::PV2D, pat::Muon::PV3D, pat::Muon::PVDZ, mps_fire::result, pat::Muon::setDB(), IPTools::signedImpactParameter3D(), HLT_2022v12_cff::track, and groupFilesInBlocks::tt.

Referenced by produce().

1399  {
1400  // Correct to PV
1401 
1402  // PV2D
1403  aMuon.setDB(track->dxy(primaryVertex.position()),
1404  track->dxyError(primaryVertex.position(), primaryVertex.covariance()),
1405  pat::Muon::PV2D);
1406 
1407  // PV3D
1408  std::pair<bool, Measurement1D> result =
1410  double d0_corr = result.second.value();
1411  double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1412  aMuon.setDB(d0_corr, d0_err, pat::Muon::PV3D);
1413 
1414  // Correct to beam spot
1415 
1416  // BS2D
1417  aMuon.setDB(track->dxy(beamspot), track->dxyError(beamspot), pat::Muon::BS2D);
1418 
1419  // make a fake vertex out of beam spot
1420  reco::Vertex vBeamspot(beamspot.position(), beamspot.rotatedCovariance3D());
1421 
1422  // BS3D
1423  result = IPTools::signedImpactParameter3D(tt, GlobalVector(track->px(), track->py(), track->pz()), vBeamspot);
1424  d0_corr = result.second.value();
1425  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1426  aMuon.setDB(d0_corr, d0_err, pat::Muon::BS3D);
1427 
1428  // PVDZ
1429  aMuon.setDB(
1430  track->dz(primaryVertex.position()), std::hypot(track->dzError(), primaryVertex.zError()), pat::Muon::PVDZ);
1431 }
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:81
void setDB(double dB, double edB, IPTYPE type=PV2D)
Definition: Muon.h:247
primaryVertex
hltOfflineBeamSpot for HLTMON
Global3DVector GlobalVector
Definition: GlobalVector.h:10

◆ fillDescriptions()

void PATMuonProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

description of config file parameters

Definition at line 1248 of file PATMuonProducer.cc.

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

1248  {
1250  iDesc.setComment("PAT muon producer module");
1251 
1252  // input source
1253  iDesc.add<edm::InputTag>("muonSource", edm::InputTag("no default"))->setComment("input collection");
1254 
1255  // embedding
1256  iDesc.add<bool>("embedMuonBestTrack", true)->setComment("embed muon best track (global pflow)");
1257  iDesc.add<bool>("embedTunePMuonBestTrack", true)->setComment("embed muon best track (muon only)");
1258  iDesc.add<bool>("forceBestTrackEmbedding", true)
1259  ->setComment(
1260  "force embedding separately the best tracks even if they're already embedded e.g. as tracker or global "
1261  "tracks");
1262  iDesc.add<bool>("embedTrack", true)->setComment("embed external track");
1263  iDesc.add<bool>("embedStandAloneMuon", true)->setComment("embed external stand-alone muon");
1264  iDesc.add<bool>("embedCombinedMuon", false)->setComment("embed external combined muon");
1265  iDesc.add<bool>("embedPickyMuon", false)->setComment("embed external picky track");
1266  iDesc.add<bool>("embedTpfmsMuon", false)->setComment("embed external tpfms track");
1267  iDesc.add<bool>("embedDytMuon", false)->setComment("embed external dyt track ");
1268 
1269  // embedding of MET muon corrections
1270  iDesc.add<bool>("embedCaloMETMuonCorrs", true)->setComment("whether to add MET muon correction for caloMET or not");
1271  iDesc.add<edm::InputTag>("caloMETMuonCorrs", edm::InputTag("muonMETValueMapProducer", "muCorrData"))
1272  ->setComment("source of MET muon corrections for caloMET");
1273  iDesc.add<bool>("embedTcMETMuonCorrs", true)->setComment("whether to add MET muon correction for tcMET or not");
1274  iDesc.add<edm::InputTag>("tcMETMuonCorrs", edm::InputTag("muonTCMETValueMapProducer", "muCorrData"))
1275  ->setComment("source of MET muon corrections for tcMET");
1276 
1277  // pf specific parameters
1278  iDesc.add<edm::InputTag>("pfMuonSource", edm::InputTag("pfMuons"))->setComment("particle flow input collection");
1279  iDesc.add<bool>("useParticleFlow", false)->setComment("whether to use particle flow or not");
1280  iDesc.add<bool>("embedPFCandidate", false)->setComment("embed external particle flow object");
1281  iDesc.add<bool>("embedPfEcalEnergy", true)->setComment("add ecal energy as reconstructed by PF");
1282 
1283  // inverse beta computation
1284  iDesc.add<bool>("addInverseBeta", true)->setComment("add combined inverse beta");
1285  iDesc.add<edm::InputTag>("sourceInverseBeta", edm::InputTag("muons", "combined"))
1286  ->setComment("source of inverse beta values");
1287 
1288  // MC matching configurables
1289  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
1290  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
1291  std::vector<edm::InputTag> emptySourceVector;
1292  iDesc
1293  .addNode(edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
1294  edm::ParameterDescription<std::vector<edm::InputTag>>("genParticleMatch", emptySourceVector, true))
1295  ->setComment("input with MC match information");
1296 
1297  // mini-iso
1298  iDesc.add<bool>("computeMiniIso", false)->setComment("whether or not to compute and store electron mini-isolation");
1299  iDesc.add<bool>("computePuppiCombinedIso", false)
1300  ->setComment("whether or not to compute and store puppi combined isolation");
1301 
1302  iDesc.add<edm::InputTag>("pfCandsForMiniIso", edm::InputTag("packedPFCandidates"))
1303  ->setComment("collection to use to compute mini-iso");
1304  iDesc.add<std::vector<double>>("miniIsoParams", std::vector<double>())
1305  ->setComment("mini-iso parameters to use for muons");
1306 
1307  iDesc.add<bool>("addTriggerMatching", false)->setComment("add L1 and HLT matching to offline muon");
1308 
1310 
1311  // IsoDeposit configurables
1312  edm::ParameterSetDescription isoDepositsPSet;
1313  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
1314  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
1315  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
1316  isoDepositsPSet.addOptional<edm::InputTag>("particle");
1317  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1318  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
1319  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1320  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1321  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
1322  isoDepositsPSet.addOptional<std::vector<edm::InputTag>>("user");
1323  iDesc.addOptional("isoDeposits", isoDepositsPSet);
1324 
1325  // isolation values configurables
1326  edm::ParameterSetDescription isolationValuesPSet;
1327  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
1328  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
1329  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
1330  isolationValuesPSet.addOptional<edm::InputTag>("particle");
1331  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1332  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
1333  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1334  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1335  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
1336  iDesc.addOptional("isolationValues", isolationValuesPSet);
1337 
1338  iDesc.ifValue(edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
1340  "puppiIsolationChargedHadrons",
1341  edm::InputTag("muonPUPPIIsolation", "h+-DR030-ThresholdVeto000-ConeVeto000"),
1342  true) and
1344  "puppiIsolationNeutralHadrons",
1345  edm::InputTag("muonPUPPIIsolation", "h0-DR030-ThresholdVeto000-ConeVeto001"),
1346  true) and
1348  "puppiIsolationPhotons",
1349  edm::InputTag("muonPUPPIIsolation", "gamma-DR030-ThresholdVeto000-ConeVeto001"),
1350  true) and
1352  "puppiNoLeptonsIsolationChargedHadrons",
1353  edm::InputTag("muonPUPPINoLeptonsIsolation", "h+-DR030-ThresholdVeto000-ConeVeto000"),
1354  true) and
1356  "puppiNoLeptonsIsolationNeutralHadrons",
1357  edm::InputTag("muonPUPPINoLeptonsIsolation", "h0-DR030-ThresholdVeto000-ConeVeto001"),
1358  true) and
1360  "puppiNoLeptonsIsolationPhotons",
1361  edm::InputTag("muonPUPPINoLeptonsIsolation", "gamma-DR030-ThresholdVeto000-ConeVeto001"),
1362  true)) or
1363  false >> edm::EmptyGroupDescription());
1364 
1365  // Efficiency configurables
1366  edm::ParameterSetDescription efficienciesPSet;
1367  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1368  iDesc.add("efficiencies", efficienciesPSet);
1369  iDesc.add<bool>("addEfficiencies", false);
1370 
1371  // Check to see if the user wants to add user data
1372  edm::ParameterSetDescription userDataPSet;
1374  iDesc.addOptional("userData", userDataPSet);
1375 
1376  edm::ParameterSetDescription isolationPSet;
1377  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1378  iDesc.add("userIsolation", isolationPSet);
1379 
1380  iDesc.add<bool>("embedHighLevelSelection", true)->setComment("embed high level selection");
1381  edm::ParameterSetDescription highLevelPSet;
1382  highLevelPSet.setAllowAnything();
1383  iDesc.addNode(edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true))
1384  ->setComment("input with high level selection");
1386  ->setComment("input with high level selection");
1387 
1388  //descriptions.add("PATMuonProducer", iDesc);
1389 }
void setComment(std::string const &value)
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
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
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.

◆ fillHltTriggerInfo()

void PATMuonProducer::fillHltTriggerInfo ( pat::Muon muon,
edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &  triggerObjects,
const edm::TriggerNames names,
const std::vector< std::string > &  collection_names 
)
private

Definition at line 559 of file PATMuonProducer.cc.

References PbPb_ZMuSkimMuonDPG_cff::deltaR, HLT_2022v12_cff::muon, Skims_PA_cff::name, names, getGTfromDQMFile::obj, trigger::TriggerMuon, and triggerMatchMonitor_cfi::triggerObjects.

Referenced by produce().

562  {
563  // WARNING: in a case of close-by muons the dR matching may select both muons.
564  // It's better to select the best match for a given collection.
565  for (const auto& triggerObject : *triggerObjects) {
566  if (triggerObject.hasTriggerObjectType(trigger::TriggerMuon)) {
567  bool keepIt = false;
568  for (const auto& name : collection_filter_names) {
569  if (triggerObject.hasCollection(name)) {
570  keepIt = true;
571  break;
572  }
573  }
574  if (not keepIt)
575  continue;
576  if (deltaR(triggerObject.p4(), muon) > 0.1)
577  continue;
578  pat::TriggerObjectStandAlone obj(triggerObject);
579  obj.unpackPathNames(names);
580  muon.addTriggerObjectMatch(obj);
581  }
582  }
583 }
const std::string names[nVars_]
Analysis-level trigger object class (stand-alone)

◆ fillL1TriggerInfo()

void PATMuonProducer::fillL1TriggerInfo ( pat::Muon muon,
edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &  triggerObjects,
const edm::TriggerNames names,
const edm::ESHandle< GlobalTrackingGeometry > &  geometry 
)
private

Definition at line 507 of file PATMuonProducer.cc.

References funct::abs(), pat::PATObject< ObjectType >::addTriggerObjectMatch(), MuonSubdetId::CSC, SiPixelRawToDigiRegional_cfi::deltaPhi, PbPb_ZMuSkimMuonDPG_cff::deltaR, MuonSubdetId::DT, getMuonDirection(), reco::Muon::matches(), names, getGTfromDQMFile::obj, trigger::TriggerL1Mu, and triggerMatchMonitor_cfi::triggerObjects.

Referenced by produce().

510  {
511  // L1 trigger object parameters are defined at MB2/ME2. Use the muon
512  // chamber matching information to get the local direction of the
513  // muon trajectory and convert it to a global direction to match the
514  // trigger objects
515 
516  std::optional<GlobalPoint> muonPosition;
517  // Loop over chambers
518  // initialize muonPosition with any available match, just in case
519  // the second station is missing - it's better folling back to
520  // dR matching at IP
521  for (const auto& chamberMatch : aMuon.matches()) {
522  if (chamberMatch.id.subdetId() == MuonSubdetId::DT) {
523  DTChamberId detId(chamberMatch.id.rawId());
524  if (abs(detId.station()) > 3)
525  continue;
526  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
527  if (abs(detId.station()) == 2)
528  break;
529  }
530  if (chamberMatch.id.subdetId() == MuonSubdetId::CSC) {
531  CSCDetId detId(chamberMatch.id.rawId());
532  if (abs(detId.station()) > 3)
533  continue;
534  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
535  if (abs(detId.station()) == 2)
536  break;
537  }
538  }
539  if (not muonPosition)
540  return;
541  for (const auto& triggerObject : *triggerObjects) {
542  if (triggerObject.hasTriggerObjectType(trigger::TriggerL1Mu)) {
543  if (std::abs(triggerObject.eta()) < 0.001) {
544  // L1 is defined in X-Y plain
545  if (deltaPhi(triggerObject.phi(), muonPosition->phi()) > 0.1)
546  continue;
547  } else {
548  // 3D L1
549  if (deltaR(triggerObject.p4(), *muonPosition) > 0.15)
550  continue;
551  }
552  pat::TriggerObjectStandAlone obj(triggerObject);
553  obj.unpackPathNames(names);
554  aMuon.addTriggerObjectMatch(obj);
555  }
556  }
557 }
enum start value shifted to 81 so as to avoid clashes with PDG codes
const std::string names[nVars_]
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static constexpr int DT
Definition: MuonSubdetId.h:11
static constexpr int CSC
Definition: MuonSubdetId.h:12
std::optional< GlobalPoint > getMuonDirection(const reco::MuonChamberMatch &chamberMatch, const edm::ESHandle< GlobalTrackingGeometry > &geometry, const DetId &chamberId)
Analysis-level trigger object class (stand-alone)

◆ fillMuon()

void PATMuonProducer::fillMuon ( Muon aMuon,
const MuonBaseRef muonRef,
const reco::CandidateBaseRef baseRef,
const GenAssociations genMatches,
const IsoDepositMaps deposits,
const IsolationValueMaps isolationValues 
) const
private

common muon filling, for both the standard and PF2PAT case

Definition at line 1084 of file PATMuonProducer.cc.

References addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), edm::contains(), CandIsolatorFromDeposits_cfi::deposits, reco::Muon::DYT, efficiencyLoader_, embedBestTrack_, pat::Muon::embedCombinedMuon(), embedCombinedMuon_, pat::Muon::embedDytMuon(), embedDytMuon_, embedGenMatch_, pat::PATObject< ObjectType >::embedGenParticle(), pat::Muon::embedMuonBestTrack(), pat::Muon::embedPickyMuon(), embedPickyMuon_, pat::Muon::embedStandAloneMuon(), embedStandAloneMuon_, pat::Muon::embedTpfmsMuon(), embedTpfmsMuon_, pat::Muon::embedTrack(), embedTrack_, embedTunePBestTrack_, pat::Muon::embedTunePMuonBestTrack(), pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), first, forceEmbedBestTrack_, TtFullHadEvtBuilder_cfi::genMatch, edm::RefToBase< T >::id(), reco::Muon::isAValidMuonTrack(), reco::Muon::isGlobalMuon(), isoDepositLabels_, isolationValueLabels_, displacedMuonProducer_cff::isolationValues, dqmiolumiharvest::j, pat::Muon::pfCandidateRef(), reco::Muon::Picky, resolutionLoader_, pat::helper::EfficiencyLoader::setEfficiencies(), pat::Lepton< LeptonType >::setIsoDeposit(), pat::Lepton< LeptonType >::setIsolation(), reco::LeafCandidate::setP4(), pat::helper::KinResolutionsLoader::setResolutions(), source, reco::Muon::TPFMS, and useParticleFlow_.

Referenced by produce().

1089  {
1090  // in the particle flow algorithm,
1091  // the muon momentum is recomputed.
1092  // the new value is stored as the momentum of the
1093  // resulting PFCandidate of type Muon, and choosen
1094  // as the pat::Muon momentum
1095  if (useParticleFlow_)
1096  aMuon.setP4(aMuon.pfCandidateRef()->p4());
1097  if (embedTrack_)
1098  aMuon.embedTrack();
1100  aMuon.embedStandAloneMuon();
1101  if (embedCombinedMuon_)
1102  aMuon.embedCombinedMuon();
1103 
1104  // embed the TeV refit track refs (only available for globalMuons)
1105  if (aMuon.isGlobalMuon()) {
1107  aMuon.embedPickyMuon();
1109  aMuon.embedTpfmsMuon();
1111  aMuon.embedDytMuon();
1112  }
1113 
1114  // embed best tracks (at the end, so unless forceEmbedBestTrack_ is true we can save some space not embedding them twice)
1115  if (embedBestTrack_)
1119 
1120  // store the match to the generated final state muons
1121  if (addGenMatch_) {
1122  for (auto const& genMatch : genMatches) {
1123  reco::GenParticleRef genMuon = (*genMatch)[baseRef];
1124  aMuon.addGenParticleRef(genMuon);
1125  }
1126  if (embedGenMatch_)
1127  aMuon.embedGenParticle();
1128  }
1129  if (efficiencyLoader_.enabled()) {
1130  efficiencyLoader_.setEfficiencies(aMuon, muonRef);
1131  }
1132 
1133  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
1134  if (useParticleFlow_) {
1135  if (deposits[j]->contains(baseRef.id())) {
1136  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[baseRef]);
1137  } else if (deposits[j]->contains(muonRef.id())) {
1138  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
1139  } else {
1140  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
1142  }
1143  } else {
1144  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
1145  }
1146  }
1147 
1148  for (size_t j = 0; j < isolationValues.size(); ++j) {
1149  if (useParticleFlow_) {
1150  if (isolationValues[j]->contains(baseRef.id())) {
1152  } else if (isolationValues[j]->contains(muonRef.id())) {
1154  } else {
1155  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
1157  }
1158  } else {
1160  }
1161  }
1162 
1163  if (resolutionLoader_.enabled()) {
1165  }
1166 }
bool embedTpfmsMuon_
embed track from tpfms muon fit into the muon
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void embedDytMuon()
embed reference to the above dyt Track
void embedTpfmsMuon()
embed reference to the above tpfms Track
void setIsolation(IsolationKeys key, float value)
Definition: Lepton.h:115
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:37
void embedCombinedMuon()
set reference to Track reconstructed in both tracked and muon detector (reimplemented from reco::Muon...
void embedTunePMuonBestTrack(bool force=false)
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
bool isAValidMuonTrack(const MuonTrackType &type) const
void embedMuonBestTrack(bool force=false)
bool embedBestTrack_
embed the track from best muon measurement (global pflow)
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
void embedStandAloneMuon()
set reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
ProductID id() const
Definition: RefToBase.h:214
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:191
void embedTrack()
set reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
bool useParticleFlow_
switch to use particle flow (PF2PAT) or not
bool embedStandAloneMuon_
embed track from muon system into the muon
bool embedTrack_
embed the track from inner tracker into the muon
bool addGenMatch_
add generator match information
void embedGenParticle()
Definition: PATObject.h:768
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void addGenParticleRef(const reco::GenParticleRef &ref)
Definition: PATObject.h:751
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
pat::helper::EfficiencyLoader efficiencyLoader_
helper class to add efficiencies to the muon
bool embedPickyMuon_
embed track from picky muon fit into the muon
bool embedDytMuon_
embed track from DYT muon fit into the muon
reco::PFCandidateRef pfCandidateRef() const
bool embedGenMatch_
embed the gen match information into the muon
IsolationLabels isoDepositLabels_
input source for isoDeposits
IsolationLabels isolationValueLabels_
input source isolation value maps
void embedPickyMuon()
embed reference to the above picky Track
bool forceEmbedBestTrack_
force separate embed of the best track even if already embedded
bool embedCombinedMuon_
embed track of the combined fit into the muon
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
static std::string const source
Definition: EdmProvDump.cc:46
bool isGlobalMuon() const override
Definition: Muon.h:301
void setP4(const LorentzVector &p4) final
set 4-momentum
genMatch
add extra information on genMatch

◆ getMuonDirection()

std::optional< GlobalPoint > PATMuonProducer::getMuonDirection ( const reco::MuonChamberMatch chamberMatch,
const edm::ESHandle< GlobalTrackingGeometry > &  geometry,
const DetId chamberId 
)
private

Definition at line 496 of file PATMuonProducer.cc.

References GeomDet::toGlobal(), reco::MuonChamberMatch::x, and reco::MuonChamberMatch::y.

Referenced by fillL1TriggerInfo().

498  {
499  const GeomDet* chamberGeometry = geometry->idToDet(chamberId);
500  if (chamberGeometry) {
501  LocalPoint localPosition(chamberMatch.x, chamberMatch.y, 0);
502  return std::optional<GlobalPoint>(std::in_place, chamberGeometry->toGlobal(localPosition));
503  }
504  return std::optional<GlobalPoint>();
505 }
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49

◆ getRelMiniIsoPUCorrected()

double PATMuonProducer::getRelMiniIsoPUCorrected ( const pat::Muon muon,
double  rho,
const std::vector< double > &  area 
)
private

Definition at line 1183 of file PATMuonProducer.cc.

References custom_jme_cff::area, MTVHistoProducerAlgoForTrackerBlock_cfi::maxdr, MTVHistoProducerAlgoForTrackerBlock_cfi::mindr, pat::miniIsoDr(), miniIsoParams_, and pat::muonRelMiniIsoPUCorrected().

Referenced by produce().

1183  {
1184  double mindr(miniIsoParams_[0]);
1185  double maxdr(miniIsoParams_[1]);
1186  double kt_scale(miniIsoParams_[2]);
1187  double drcut = pat::miniIsoDr(muon.polarP4(), mindr, maxdr, kt_scale);
1188  return pat::muonRelMiniIsoPUCorrected(muon.miniPFIsolation(), muon.polarP4(), drcut, rho, area);
1189 }
std::vector< double > miniIsoParams_
double muonRelMiniIsoPUCorrected(const PFIsolation &iso, const reco::Candidate::PolarLorentzVector &p4, double dr, double rho, const std::vector< double > &area)
float miniIsoDr(const reco::Candidate::PolarLorentzVector &p4, float mindr, float maxdr, float kt_scale)

◆ globalEndJob()

static void pat::PATMuonProducer::globalEndJob ( PATMuonHeavyObjectCache )
inlinestatic

Definition at line 89 of file PATMuonProducer.cc.

89 {}

◆ initializeGlobalCache()

static std::unique_ptr<PATMuonHeavyObjectCache> pat::PATMuonProducer::initializeGlobalCache ( const edm::ParameterSet iConfig)
inlinestatic

Definition at line 85 of file PATMuonProducer.cc.

85  {
86  return std::make_unique<PATMuonHeavyObjectCache>(iConfig);
87  }

◆ isChargedHadron()

bool PATMuonProducer::isChargedHadron ( long  pdgid)
private

Definition at line 1243 of file PATMuonProducer.cc.

References funct::abs(), and EgammaValidation_cff::pdgid.

Referenced by puppiCombinedIsolation().

1243 { return std::abs(pdgid) == 211; }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ isNeutralHadron()

bool PATMuonProducer::isNeutralHadron ( long  pdgid)
private

Definition at line 1241 of file PATMuonProducer.cc.

References funct::abs(), and EgammaValidation_cff::pdgid.

Referenced by puppiCombinedIsolation().

1241 { return std::abs(pdgid) == 130; }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ isPhoton()

bool PATMuonProducer::isPhoton ( long  pdgid)
private

Definition at line 1245 of file PATMuonProducer.cc.

References EgammaValidation_cff::pdgid.

Referenced by puppiCombinedIsolation().

1245 { return pdgid == 22; }

◆ produce()

void PATMuonProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

everything that needs to be done during the event loop

Definition at line 585 of file PATMuonProducer.cc.

References funct::abs(), pat::PATUserDataHelper< ObjectType >::add(), addGenMatch_, addInverseBeta_, addPuppiIsolation_, addTriggerMatching_, cms::cuda::assert(), beamLineToken_, pwdgSkimBPark_cfi::beamSpot, pat::helper::MultiIsolator::beginEvent(), TransientTrackBuilder::build(), muonProducer_cfi::caloMETMuonCorrs, caloMETMuonCorrsToken_, computeMiniIso_, computeMuonIDMVA_, computeMuonMVA_, computePuppiCombinedIso_, computeSoftMuonMVA_, CandIsolatorFromDeposits_cfi::deposits, PVValHelper::dxy, PVValHelper::dz, reco::PFCandidate::ecalEnergy(), effectiveAreaVec_, efficiencyLoader_, pat::Muon::embedCaloMETMuonCorrs(), embedCaloMETMuonCorrs_, embedCombinedMuon_, embedGenMatch_, embedHighLevel(), embedHighLevelSelection_, pat::Muon::embedPFCandidate(), embedPFCandidate_, embedPfEcalEnergy_, pat::Muon::embedTcMETMuonCorrs(), embedTcMETMuonCorrs_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), pat::helper::MultiIsolator::enabled(), pat::helper::MultiIsolator::endEvent(), pat::helper::MultiIsolator::fill(), fillHltTriggerInfo(), fillL1TriggerInfo(), fillMuon(), genMatchTokens_, geometryToken_, edm::EventSetup::getData(), edm::EventSetup::getHandle(), getRelMiniIsoPUCorrected(), cutBasedMuonId_MuonPOG_V0_cff::globalTrack, hltCollectionFilters_, mps_fire::i, heavyIonCSV_trainingSettings::idx, iEvent, pat::Muon::initSimInfo(), susybsm::HSCParticleType::innerTrack, edm::Ref< C, T, F >::isAvailable(), edm::Ref< C, T, F >::isNonnull(), isoDepositTokens_, displacedMuonProducer_cff::isolationValues, isolationValueTokens_, isolator_, isolatorTmpStorage_, edm::HandleBase::isValid(), dqmiolumiharvest::j, reco::Muon::LowPtMvaLoose, reco::Muon::LowPtMvaMedium, muon::makeSelectorBitset(), reco::Muon::MiniIsoLoose, reco::Muon::MiniIsoMedium, reco::Muon::MiniIsoTight, reco::Muon::MiniIsoVeryTight, eostools::move(), reco::Muon::MultiIsoMedium, reco::PFCandidate::muonRef(), PDWG_BPHSkim_cff::muons, muonTimeExtraToken_, muonToken_, beam_dqm_sourceclient-live_cfg::mva, mvaBTagCollectionTag_, photons_cff::mvaID, reco::Muon::MvaIDwpMedium, reco::Muon::MvaIDwpTight, displacedMuonProducer_cff::mvaL1Corrector, mvaL1Corrector_, displacedMuonProducer_cff::mvaL1L2L3ResCorrector, mvaL1L2L3ResCorrector_, reco::Muon::MvaLoose, reco::Muon::MvaMedium, reco::Muon::MvaTight, mvaUseJec_, reco::Muon::MvaVTight, reco::Muon::MvaVVTight, pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), nhits, patMuonPutToken_, hemisphereProducer_cfi::patMuons, pcToken_, pfMuonToken_, BeamMonitor_cff::primaryVertex, edm::Handle< T >::product(), puppiCombinedIsolation(), PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, reco::Muon::PuppiIsoLoose, reco::Muon::PuppiIsoMedium, reco::Muon::PuppiIsoTight, PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_photons_, MetAnalyzer::pv(), pat::Muon::PV2D, pat::Muon::PV3D, pvToken_, pat::Muon::readTimeExtra(), recomputeBasicSelectors_, resolutionLoader_, rho_, pat::Muon::setExtSimType(), pat::Lepton< LeptonType >::setIsolation(), pat::Muon::setIsolationPUPPI(), pat::Muon::setIsolationPUPPINoLeptons(), setMuonMiniIso(), pat::Muon::setNormChi2(), pat::Muon::setNumberOfValidHits(), pat::Muon::setPFCandidateRef(), pat::Muon::setPfEcalEnergy(), pat::Muon::setSimBX(), pat::Muon::setSimEta(), pat::Muon::setSimFlavour(), pat::Muon::setSimHeaviestMotherFlavour(), pat::Muon::setSimMatchQuality(), pat::Muon::setSimMotherPdgId(), pat::Muon::setSimPdgId(), pat::Muon::setSimPhi(), pat::Muon::setSimProdRho(), pat::Muon::setSimProdZ(), pat::Muon::setSimPt(), pat::Muon::setSimTpEvent(), pat::Muon::setSimType(), simInfo_, reco::Muon::SoftMvaId, jetUpdater_cfi::sort, RandomServiceHelper::t1, RandomServiceHelper::t2, muonProducer_cfi::tcMETMuonCorrs, tcMETMuonCorrsToken_, transientTrackBuilderToken_, L1TEGammaOffline_cfi::triggerNames, triggerMatchMonitor_cfi::triggerObjects, triggerObjects_, triggerResults, triggerResults_, groupFilesInBlocks::tt, useParticleFlow_, userDataHelper_, and useUserData_.

585  {
586  // get the tracking Geometry
587  auto geometry = iSetup.getHandle(geometryToken_);
588  if (!geometry.isValid())
589  throw cms::Exception("FatalError") << "Unable to find GlobalTrackingGeometryRecord in event!\n";
590 
591  // switch off embedding (in unschedules mode)
592  if (iEvent.isRealData()) {
593  addGenMatch_ = false;
594  embedGenMatch_ = false;
595  }
596 
598  iEvent.getByToken(muonToken_, muons);
599 
602  iEvent.getByToken(pcToken_, pc);
603 
604  // get the ESHandle for the transient track builder,
605  // if needed for high level selection embedding
606  TransientTrackBuilder const* trackBuilder = nullptr;
607 
608  if (isolator_.enabled())
609  isolator_.beginEvent(iEvent, iSetup);
614 
616  for (size_t j = 0; j < isoDepositTokens_.size(); ++j) {
617  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
618  }
619 
621  for (size_t j = 0; j < isolationValueTokens_.size(); ++j) {
623  }
624 
625  //value maps for puppi isolation
626  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
627  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
628  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
629  //value maps for puppiNoLeptons isolation
630  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_charged_hadrons;
631  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_neutral_hadrons;
632  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_photons;
633  if (addPuppiIsolation_) {
634  //puppi
635  iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
636  iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
637  iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
638  //puppiNoLeptons
639  iEvent.getByToken(PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_charged_hadrons);
640  iEvent.getByToken(PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons);
641  iEvent.getByToken(PUPPINoLeptonsIsolation_photons_, PUPPINoLeptonsIsolation_photons);
642  }
643 
644  // inputs for muon mva
645  edm::Handle<reco::JetTagCollection> mvaBTagCollectionTag;
648  if (computeMuonMVA_) {
649  iEvent.getByToken(mvaBTagCollectionTag_, mvaBTagCollectionTag);
652  }
653 
654  // prepare the MC genMatchTokens_
655  GenAssociations genMatches(genMatchTokens_.size());
656  if (addGenMatch_) {
657  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
658  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
659  }
660  }
661 
662  // prepare the high level selection: needs beamline
663  // OR primary vertex, depending on user selection
666  bool beamSpotIsValid = false;
667  bool primaryVertexIsValid = false;
669  // get the beamspot
670  edm::Handle<reco::BeamSpot> beamSpotHandle;
671  iEvent.getByToken(beamLineToken_, beamSpotHandle);
672 
673  // get the primary vertex
675  iEvent.getByToken(pvToken_, pvHandle);
676 
677  if (beamSpotHandle.isValid()) {
678  beamSpot = *beamSpotHandle;
679  beamSpotIsValid = true;
680  } else {
681  edm::LogError("DataNotAvailable") << "No beam spot available from EventSetup, not adding high level selection \n";
682  }
683  if (pvHandle.isValid() && !pvHandle->empty()) {
684  primaryVertex = pvHandle->at(0);
685  primaryVertexIsValid = true;
686  } else {
687  edm::LogError("DataNotAvailable")
688  << "No primary vertex available from EventSetup, not adding high level selection \n";
689  }
690  // this is needed by the IPTools methods from the tracking group
691  trackBuilder = &iSetup.getData(transientTrackBuilderToken_);
692  }
693 
694  // MC info
696  bool simInfoIsAvailalbe = iEvent.getByToken(simInfo_, simInfo);
697 
698  // this will be the new object collection
699  std::vector<Muon> patMuons;
700 
702  if (useParticleFlow_) {
703  // get the PFCandidates of type muons
704  iEvent.getByToken(pfMuonToken_, pfMuons);
705 
706  unsigned index = 0;
707  for (reco::PFCandidateConstIterator i = pfMuons->begin(); i != pfMuons->end(); ++i, ++index) {
708  const reco::PFCandidate& pfmu = *i;
709  //const reco::IsolaPFCandidate& pfmu = *i;
710  const reco::MuonRef& muonRef = pfmu.muonRef();
711  assert(muonRef.isNonnull());
712 
713  MuonBaseRef muonBaseRef(muonRef);
714  Muon aMuon(muonBaseRef);
715 
716  if (useUserData_) {
717  userDataHelper_.add(aMuon, iEvent, iSetup);
718  }
719 
720  // embed high level selection
722  // get the tracks
723  reco::TrackRef innerTrack = muonBaseRef->innerTrack();
724  reco::TrackRef globalTrack = muonBaseRef->globalTrack();
725  reco::TrackRef bestTrack = muonBaseRef->muonBestTrack();
726  reco::TrackRef chosenTrack = innerTrack;
727  // Make sure the collection it points to is there
728  if (bestTrack.isNonnull() && bestTrack.isAvailable())
729  chosenTrack = bestTrack;
730 
731  if (chosenTrack.isNonnull() && chosenTrack.isAvailable()) {
732  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
733  aMuon.setNumberOfValidHits(nhits);
734 
735  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
736  embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
737  }
738 
739  if (globalTrack.isNonnull() && globalTrack.isAvailable() && !embedCombinedMuon_) {
740  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
741  aMuon.setNormChi2(norm_chi2);
742  }
743  }
744  reco::PFCandidateRef pfRef(pfMuons, index);
745  //reco::PFCandidatePtr ptrToMother(pfMuons,index);
746  reco::CandidateBaseRef pfBaseRef(pfRef);
747 
748  aMuon.setPFCandidateRef(pfRef);
749  if (embedPFCandidate_)
750  aMuon.embedPFCandidate();
751  fillMuon(aMuon, muonBaseRef, pfBaseRef, genMatches, deposits, isolationValues);
752 
753  if (computeMiniIso_)
754  setMuonMiniIso(aMuon, pc.product());
755 
756  if (addPuppiIsolation_) {
757  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonBaseRef],
758  (*PUPPIIsolation_neutral_hadrons)[muonBaseRef],
759  (*PUPPIIsolation_photons)[muonBaseRef]);
760 
761  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonBaseRef],
762  (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonBaseRef],
763  (*PUPPINoLeptonsIsolation_photons)[muonBaseRef]);
764  } else {
765  aMuon.setIsolationPUPPI(-999., -999., -999.);
766  aMuon.setIsolationPUPPINoLeptons(-999., -999., -999.);
767  }
768 
769  if (embedPfEcalEnergy_) {
770  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
771  }
772 
773  patMuons.push_back(aMuon);
774  }
775  } else {
777  iEvent.getByToken(muonToken_, muons);
778 
779  // embedding of muon MET corrections
781  //edm::ValueMap<reco::MuonMETCorrectionData> caloMETmuCorValueMap;
784  //caloMETmuCorValueMap = *caloMETmuCorValueMap_h;
785  }
787  //edm::ValueMap<reco::MuonMETCorrectionData> tcMETmuCorValueMap;
788  if (embedTcMETMuonCorrs_) {
790  //tcMETmuCorValueMap = *tcMETmuCorValueMap_h;
791  }
792 
794  // get the PFCandidates of type muons
795  iEvent.getByToken(pfMuonToken_, pfMuons);
796  }
797 
799  if (addInverseBeta_) {
800  // get MuonTimerExtra value map
801  iEvent.getByToken(muonTimeExtraToken_, muonsTimeExtra);
802  }
803 
804  for (edm::View<reco::Muon>::const_iterator itMuon = muons->begin(); itMuon != muons->end(); ++itMuon) {
805  // construct the Muon from the ref -> save ref to original object
806  unsigned int idx = itMuon - muons->begin();
807  MuonBaseRef muonRef = muons->refAt(idx);
808  reco::CandidateBaseRef muonBaseRef(muonRef);
809 
810  Muon aMuon(muonRef);
811  fillMuon(aMuon, muonRef, muonBaseRef, genMatches, deposits, isolationValues);
812  if (computeMiniIso_)
813  setMuonMiniIso(aMuon, pc.product());
814  if (addPuppiIsolation_) {
815  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonRef],
816  (*PUPPIIsolation_neutral_hadrons)[muonRef],
817  (*PUPPIIsolation_photons)[muonRef]);
818  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonRef],
819  (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonRef],
820  (*PUPPINoLeptonsIsolation_photons)[muonRef]);
821  } else {
822  aMuon.setIsolationPUPPI(-999., -999., -999.);
823  aMuon.setIsolationPUPPINoLeptons(-999., -999., -999.);
824  }
825 
826  // Isolation
827  if (isolator_.enabled()) {
828  //reco::CandidatePtr mother = ptrToMother->sourceCandidatePtr(0);
830  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
831  // better to loop backwards, so the vector is resized less times
832  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(),
833  ed = isolatorTmpStorage_.rend();
834  it != ed;
835  ++it) {
836  aMuon.setIsolation(it->first, it->second);
837  }
838  }
839 
840  // for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
841  // aMuon.setIsoDeposit(isoDepositLabels_[j].first,
842  // (*deposits[j])[muonRef]);
843  // }
844 
845  // add sel to selected
846  edm::Ptr<reco::Muon> muonsPtr = muons->ptrAt(idx);
847  if (useUserData_) {
848  userDataHelper_.add(aMuon, iEvent, iSetup);
849  }
850 
851  // embed high level selection
853  // get the tracks
854  reco::TrackRef innerTrack = itMuon->innerTrack();
855  reco::TrackRef globalTrack = itMuon->globalTrack();
856  reco::TrackRef bestTrack = itMuon->muonBestTrack();
857  reco::TrackRef chosenTrack = innerTrack;
858  // Make sure the collection it points to is there
859  if (bestTrack.isNonnull() && bestTrack.isAvailable())
860  chosenTrack = bestTrack;
861  if (chosenTrack.isNonnull() && chosenTrack.isAvailable()) {
862  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
863  aMuon.setNumberOfValidHits(nhits);
864 
865  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
866  embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
867  }
868 
869  if (globalTrack.isNonnull() && globalTrack.isAvailable()) {
870  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
871  aMuon.setNormChi2(norm_chi2);
872  }
873  }
874 
875  // embed MET muon corrections
877  aMuon.embedCaloMETMuonCorrs((*caloMETMuonCorrs)[muonRef]);
879  aMuon.embedTcMETMuonCorrs((*tcMETMuonCorrs)[muonRef]);
880 
882  if (embedPfEcalEnergy_)
883  aMuon.setPfEcalEnergy(-99.0);
884  unsigned index = 0;
885  for (const reco::PFCandidate& pfmu : *pfMuons) {
886  if (pfmu.muonRef().isNonnull()) {
887  if (pfmu.muonRef().id() != muonRef.id())
888  throw cms::Exception("Configuration")
889  << "Muon reference within PF candidates does not point to the muon collection." << std::endl;
890  if (pfmu.muonRef().key() == muonRef.key()) {
891  reco::PFCandidateRef pfRef(pfMuons, index);
892  aMuon.setPFCandidateRef(pfRef);
893  if (embedPfEcalEnergy_)
894  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
895  if (embedPFCandidate_)
896  aMuon.embedPFCandidate();
897  break;
898  }
899  }
900  index++;
901  }
902  }
903 
904  if (addInverseBeta_) {
905  aMuon.readTimeExtra((*muonsTimeExtra)[muonRef]);
906  }
907  // MC info
908  aMuon.initSimInfo();
909  if (simInfoIsAvailalbe) {
910  const auto& msi = (*simInfo)[muonBaseRef];
911  aMuon.setSimType(msi.primaryClass);
912  aMuon.setExtSimType(msi.extendedClass);
913  aMuon.setSimFlavour(msi.flavour);
914  aMuon.setSimHeaviestMotherFlavour(msi.heaviestMotherFlavour);
915  aMuon.setSimPdgId(msi.pdgId);
916  aMuon.setSimMotherPdgId(msi.motherPdgId);
917  aMuon.setSimBX(msi.tpBX);
918  aMuon.setSimTpEvent(msi.tpEvent);
919  aMuon.setSimProdRho(msi.vertex.Rho());
920  aMuon.setSimProdZ(msi.vertex.Z());
921  aMuon.setSimPt(msi.p4.pt());
922  aMuon.setSimEta(msi.p4.eta());
923  aMuon.setSimPhi(msi.p4.phi());
924  aMuon.setSimMatchQuality(msi.tpAssoQuality);
925  }
926  patMuons.push_back(aMuon);
927  }
928  }
929 
930  // sort muons in pt
931  std::sort(patMuons.begin(), patMuons.end(), [](auto const& t1, auto const& t2) { return t1.pt() > t2.pt(); });
932 
933  // Store standard muon selection decisions and jet related
934  // quantaties.
935  // Need a separate loop over muons to have all inputs properly
936  // computed and stored in the object.
938  if (computeMuonMVA_)
939  iEvent.getByToken(rho_, rho);
940  const reco::Vertex* pv(nullptr);
941  if (primaryVertexIsValid)
942  pv = &primaryVertex;
943 
946  bool triggerObjectsAvailable = false;
947  bool triggerResultsAvailable = false;
948  if (addTriggerMatching_) {
949  triggerObjectsAvailable = iEvent.getByToken(triggerObjects_, triggerObjects);
950  triggerResultsAvailable = iEvent.getByToken(triggerResults_, triggerResults);
951  }
952 
953  for (auto& muon : patMuons) {
954  // trigger info
955  if (addTriggerMatching_ and triggerObjectsAvailable and triggerResultsAvailable) {
956  const edm::TriggerNames& triggerNames(iEvent.triggerNames(*triggerResults));
959  }
960 
962  muon.setSelectors(0);
963  bool isRun2016BCDEF = (272728 <= iEvent.run() && iEvent.run() <= 278808);
964  muon.setSelectors(muon::makeSelectorBitset(muon, pv, isRun2016BCDEF));
965  }
966  float miniIsoValue = -1;
967  if (computeMiniIso_) {
968  // MiniIsolation working points
969 
971 
972  muon.setSelector(reco::Muon::MiniIsoLoose, miniIsoValue < 0.40);
973  muon.setSelector(reco::Muon::MiniIsoMedium, miniIsoValue < 0.20);
974  muon.setSelector(reco::Muon::MiniIsoTight, miniIsoValue < 0.10);
975  muon.setSelector(reco::Muon::MiniIsoVeryTight, miniIsoValue < 0.05);
976  }
977 
978  double puppiCombinedIsolationPAT = -1;
980  puppiCombinedIsolationPAT = puppiCombinedIsolation(muon, pc.product());
981  muon.setSelector(reco::Muon::PuppiIsoLoose, puppiCombinedIsolationPAT < 0.27);
982  muon.setSelector(reco::Muon::PuppiIsoMedium, puppiCombinedIsolationPAT < 0.22);
983  muon.setSelector(reco::Muon::PuppiIsoTight, puppiCombinedIsolationPAT < 0.12);
984  }
985 
986  float jetPtRatio = 0.0;
987  float jetPtRel = 0.0;
988  float mva = 0.0;
989  float mva_lowpt = 0.0;
990  if (computeMuonMVA_ && primaryVertexIsValid && computeMiniIso_) {
991  if (mvaUseJec_) {
992  mva = globalCache()->muonMvaEstimator().computeMva(muon,
994  *(mvaBTagCollectionTag.product()),
995  jetPtRatio,
996  jetPtRel,
997  miniIsoValue,
998  mvaL1Corrector.product(),
999  mvaL1L2L3ResCorrector.product());
1000  mva_lowpt = globalCache()->muonLowPtMvaEstimator().computeMva(muon,
1001  primaryVertex,
1002  *(mvaBTagCollectionTag.product()),
1003  jetPtRatio,
1004  jetPtRel,
1005  miniIsoValue,
1006  mvaL1Corrector.product(),
1007  mvaL1L2L3ResCorrector.product());
1008 
1009  } else {
1010  mva = globalCache()->muonMvaEstimator().computeMva(
1011  muon, primaryVertex, *mvaBTagCollectionTag, jetPtRatio, jetPtRel, miniIsoValue);
1012  mva_lowpt = globalCache()->muonLowPtMvaEstimator().computeMva(
1013  muon, primaryVertex, *mvaBTagCollectionTag, jetPtRatio, jetPtRel, miniIsoValue);
1014  }
1015 
1016  muon.setMvaValue(mva);
1017  muon.setLowPtMvaValue(mva_lowpt);
1018  muon.setJetPtRatio(jetPtRatio);
1019  muon.setJetPtRel(jetPtRel);
1020 
1021  // multi-isolation
1022  if (computeMiniIso_) {
1023  muon.setSelector(reco::Muon::MultiIsoMedium,
1024  miniIsoValue < 0.11 && (muon.jetPtRatio() > 0.74 || muon.jetPtRel() > 6.8));
1025  }
1026 
1027  // MVA working points
1028  // https://twiki.cern.ch/twiki/bin/viewauth/CMS/LeptonMVA
1029  const double dB2D = std::abs(muon.dB(pat::Muon::PV2D));
1030  const double dB3D = std::abs(muon.dB(pat::Muon::PV3D));
1031  const double edB3D = std::abs(muon.edB(pat::Muon::PV3D));
1032  const double sip3D = edB3D > 0 ? dB3D / edB3D : 0.0;
1033  const double dz = std::abs(muon.muonBestTrack()->dz(primaryVertex.position()));
1034 
1035  // muon preselection
1036  if (muon.pt() > 5 and muon.isLooseMuon() and muon.passed(reco::Muon::MiniIsoLoose) and sip3D < 8.0 and
1037  dB2D < 0.05 and dz < 0.1) {
1038  muon.setSelector(reco::Muon::MvaLoose, muon.mvaValue() > -0.60);
1039  muon.setSelector(reco::Muon::MvaMedium, muon.mvaValue() > -0.20);
1040  muon.setSelector(reco::Muon::MvaTight, muon.mvaValue() > 0.15);
1041  muon.setSelector(reco::Muon::MvaVTight, muon.mvaValue() > 0.45);
1042  muon.setSelector(reco::Muon::MvaVVTight, muon.mvaValue() > 0.9);
1043  }
1044  if (muon.pt() > 5 and muon.isLooseMuon() and sip3D < 4 and dB2D < 0.5 and dz < 1) {
1045  muon.setSelector(reco::Muon::LowPtMvaLoose, muon.lowptMvaValue() > -0.60);
1046  muon.setSelector(reco::Muon::LowPtMvaMedium, muon.lowptMvaValue() > -0.20);
1047  }
1048  }
1049 
1050  // MVA ID
1051  float mvaID = 0.0;
1052  constexpr int MVAsentinelValue = -99;
1053  constexpr float mvaIDmediumCut = 0.08;
1054  constexpr float mvaIDtightCut = 0.12;
1055  if (computeMuonIDMVA_) {
1056  const double dz = std::abs(muon.muonBestTrack()->dz(primaryVertex.position()));
1057  const double dxy = std::abs(muon.muonBestTrack()->dxy(primaryVertex.position()));
1058  if (muon.isLooseMuon()) {
1059  mvaID = globalCache()->muonMvaIDEstimator().computeMVAID(muon)[1];
1060  } else {
1061  mvaID = MVAsentinelValue;
1062  }
1063  muon.setMvaIDValue(mvaID);
1064  muon.setSelector(reco::Muon::MvaIDwpMedium, muon.mvaIDValue() > mvaIDmediumCut);
1065  muon.setSelector(reco::Muon::MvaIDwpTight, muon.mvaIDValue() > mvaIDtightCut and dz < 0.5 and dxy < 0.2);
1066  }
1067 
1068  //SOFT MVA
1069  if (computeSoftMuonMVA_) {
1070  float mva = globalCache()->softMuonMvaEstimator().computeMva(muon);
1071  muon.setSoftMvaValue(mva);
1072  //preselection in SoftMuonMvaEstimator.cc
1073  muon.setSelector(reco::Muon::SoftMvaId, muon.softMvaValue() > 0.58); //WP choose for bmm4
1074  }
1075  }
1076 
1077  // put products in Event
1079 
1080  if (isolator_.enabled())
1081  isolator_.endEvent();
1082 }
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
bool useUserData_
add user data to the muon (this will be data members of th muon even w/o embedding) ...
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
bool addPuppiIsolation_
add puppi isolation
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > tcMETMuonCorrsToken_
source of tcMET muon corrections
bool embedTcMETMuonCorrs_
embed muon MET correction info for tcMET into the muon
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
input source of the primary vertex
bool enabled() const
True if it has a non null configuration.
Definition: MultiIsolator.h:55
edm::EDGetTokenT< edm::ValueMap< reco::MuonTimeExtra > > muonTimeExtraToken_
input tag for reading inverse beta
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
edm::EDGetTokenT< double > rho_
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken_
input source
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > caloMETMuonCorrsToken_
source of caloMET muon corrections
bool embedCaloMETMuonCorrs_
embed muon MET correction info for caloMET into the muon
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
MC info.
T const * product() const
Definition: Handle.h:70
void setMuonMiniIso(pat::Muon &aMuon, const pat::PackedCandidateCollection *pc)
bool addTriggerMatching_
Trigger.
edm::EDGetTokenT< reco::JetCorrector > mvaL1Corrector_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > transientTrackBuilderToken_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
Log< level::Error, false > LogError
PFCandidateCollection::const_iterator PFCandidateConstIterator
iterator
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=nullptr, bool run2016_hip_mitigation=false)
assert(be >=bs)
void embedHighLevel(pat::Muon &aMuon, reco::TrackRef track, reco::TransientTrack &tt, reco::Vertex &primaryVertex, bool primaryVertexIsValid, reco::BeamSpot &beamspot, bool beamspotIsValid)
std::vector< double > effectiveAreaVec_
key_type key() const
Accessor for product key.
Definition: Ref.h:250
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
edm::EDGetTokenT< reco::JetTagCollection > mvaBTagCollectionTag_
edm::EDGetTokenT< reco::PFCandidateCollection > pfMuonToken_
input source pfCandidates that will be to be transformed into pat::Muons, when using PF2PAT ...
pat::helper::MultiIsolator isolator_
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:84
reco::TransientTrack build(const reco::Track *p) const
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
input source of the primary vertex/beamspot
bool addInverseBeta_
add combined inverse beta measurement into the muon
bool useParticleFlow_
switch to use particle flow (PF2PAT) or not
pat::PATUserDataHelper< pat::Muon > userDataHelper_
helper class to add userData to the muon
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
int iEvent
Definition: GenABIO.cc:224
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
bool addGenMatch_
add generator match information
Definition: Muon.py:1
void fillL1TriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const edm::ESHandle< GlobalTrackingGeometry > &geometry)
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > geometryToken_
bool embedPfEcalEnergy_
add ecal PF energy
void newEvent(const edm::Event &event, const edm::EventSetup &setup)
To be called for each new event, reads in the EventSetup object.
bool isAvailable() const
Definition: Ref.h:537
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
def pv(vc)
Definition: MetAnalyzer.py:7
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
bool getData(T &iHolder) const
Definition: EventSetup.h:122
static std::string const triggerResults
Definition: EdmProvDump.cc:44
void fillMuon(Muon &aMuon, const MuonBaseRef &muonRef, const reco::CandidateBaseRef &baseRef, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const IsolationValueMaps &isolationValues) const
common muon filling, for both the standard and PF2PAT case
double puppiCombinedIsolation(const pat::Muon &muon, const pat::PackedCandidateCollection *pc)
double ecalEnergy() const
return corrected Ecal energy
Definition: PFCandidate.h:221
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:443
std::vector< std::string > hltCollectionFilters_
void add(ObjectType &patObject, edm::Event const &iEvent, edm::EventSetup const &iSetup)
void fillHltTriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const std::vector< std::string > &collection_names)
ProductIndex id() const
Definition: ProductID.h:35
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
Definition: MultiIsolator.h:17
double getRelMiniIsoPUCorrected(const pat::Muon &muon, double rho, const std::vector< double > &area)
bool isValid() const
Definition: HandleBase.h:70
std::vector< edm::Handle< edm::Association< reco::GenParticleCollection > > > GenAssociations
edm::EDGetTokenT< reco::JetCorrector > mvaL1L2L3ResCorrector_
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
pat::helper::EfficiencyLoader efficiencyLoader_
helper class to add efficiencies to the muon
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
const edm::EDPutTokenT< std::vector< Muon > > patMuonPutToken_
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
isolation value pair for temporary storage before being folded into the muon
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > triggerObjects_
bool embedGenMatch_
embed the gen match information into the muon
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
input tags for generator match information
primaryVertex
hltOfflineBeamSpot for HLTMON
edm::RefToBase< reco::Muon > MuonBaseRef
typedefs for convenience
bool embedPFCandidate_
embed pfCandidates into the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
bool computeMuonMVA_
standard muon selectors
bool embedCombinedMuon_
embed track of the combined fit into the muon
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
def move(src, dest)
Definition: eostools.py:511
bool embedHighLevelSelection_
embed high level selection variables

◆ puppiCombinedIsolation()

double PATMuonProducer::puppiCombinedIsolation ( const pat::Muon muon,
const pat::PackedCandidateCollection pc 
)
private

Definition at line 1191 of file PATMuonProducer.cc.

References funct::abs(), L1DTConfigBti_cff::CH, reco::deltaPhi(), reco::deltaR2(), isChargedHadron(), isNeutralHadron(), isPhoton(), LogTrace, makePlotsFromDump::NH, dqm::qstatus::OTHER, and PbPb_ZMuSkimMuonDPG_cff::particleType.

Referenced by produce().

1191  {
1192  constexpr double dR_threshold = 0.4;
1193  constexpr double dR2_threshold = dR_threshold * dR_threshold;
1194  constexpr double mix_fraction = 0.5;
1195  enum particleType { CH = 0, NH = 1, PH = 2, OTHER = 100000 };
1196  double val_PuppiWithLep = 0.0;
1197  double val_PuppiWithoutLep = 0.0;
1198 
1199  for (const auto& cand : *pc) { //pat::pat::PackedCandidate loop start
1200 
1201  const particleType pType = isChargedHadron(cand.pdgId()) ? CH
1202  : isNeutralHadron(cand.pdgId()) ? NH
1203  : isPhoton(cand.pdgId()) ? PH
1204  : OTHER;
1205  if (pType == OTHER) {
1206  if (cand.pdgId() != 1 && cand.pdgId() != 2 && abs(cand.pdgId()) != 11 && abs(cand.pdgId()) != 13) {
1207  LogTrace("PATMuonProducer") << "candidate with PDGID = " << cand.pdgId()
1208  << " is not CH/NH/PH/e/mu or 1/2 (and this is removed from isolation calculation)"
1209  << std::endl;
1210  }
1211  continue;
1212  }
1213  double d_eta = std::abs(cand.eta() - muon.eta());
1214  if (d_eta > dR_threshold)
1215  continue;
1216 
1217  double d_phi = std::abs(reco::deltaPhi(cand.phi(), muon.phi()));
1218  if (d_phi > dR_threshold)
1219  continue;
1220 
1221  double dR2 = reco::deltaR2(cand, muon);
1222  if (dR2 > dR2_threshold)
1223  continue;
1224  if (pType == CH && dR2 < 0.0001 * 0.0001)
1225  continue;
1226  if (pType == NH && dR2 < 0.01 * 0.01)
1227  continue;
1228  if (pType == PH && dR2 < 0.01 * 0.01)
1229  continue;
1230  val_PuppiWithLep += cand.pt() * cand.puppiWeight();
1231  val_PuppiWithoutLep += cand.pt() * cand.puppiWeightNoLep();
1232 
1233  } //pat::pat::PackedCandidate loop end
1234 
1235  double reliso_Puppi_withLep = val_PuppiWithLep / muon.pt();
1236  double reliso_Puppi_withoutlep = val_PuppiWithoutLep / muon.pt();
1237  double reliso_Puppi_combined = mix_fraction * reliso_Puppi_withLep + (1.0 - mix_fraction) * reliso_Puppi_withoutlep;
1238  return reliso_Puppi_combined;
1239 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:26
static const int OTHER
bool isChargedHadron(long pdgid)
CH
LTS and SET for low trigger suppression.
#define LogTrace(id)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
bool isPhoton(long pdgid)
bool isNeutralHadron(long pdgid)

◆ readIsolationLabels()

template<typename T >
void pat::PATMuonProducer::readIsolationLabels ( const edm::ParameterSet iConfig,
const char *  psetName,
IsolationLabels labels,
std::vector< edm::EDGetTokenT< edm::ValueMap< T >>> &  tokens 
)
private

fill label vector from the contents of the parameter set, for the embedding of isoDeposits or userIsolation values

Definition at line 275 of file PATMuonProducer.cc.

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

278  {
279  labels.clear();
280 
281  if (iConfig.exists(psetName)) {
283 
284  if (depconf.exists("tracker"))
285  labels.emplace_back(pat::TrackIso, depconf.getParameter<edm::InputTag>("tracker"));
286  if (depconf.exists("ecal"))
287  labels.emplace_back(pat::EcalIso, depconf.getParameter<edm::InputTag>("ecal"));
288  if (depconf.exists("hcal"))
289  labels.emplace_back(pat::HcalIso, depconf.getParameter<edm::InputTag>("hcal"));
290  if (depconf.exists("pfAllParticles")) {
291  labels.emplace_back(pat::PfAllParticleIso, depconf.getParameter<edm::InputTag>("pfAllParticles"));
292  }
293  if (depconf.exists("pfChargedHadrons")) {
294  labels.emplace_back(pat::PfChargedHadronIso, depconf.getParameter<edm::InputTag>("pfChargedHadrons"));
295  }
296  if (depconf.exists("pfChargedAll")) {
297  labels.emplace_back(pat::PfChargedAllIso, depconf.getParameter<edm::InputTag>("pfChargedAll"));
298  }
299  if (depconf.exists("pfPUChargedHadrons")) {
300  labels.emplace_back(pat::PfPUChargedHadronIso, depconf.getParameter<edm::InputTag>("pfPUChargedHadrons"));
301  }
302  if (depconf.exists("pfNeutralHadrons")) {
303  labels.emplace_back(pat::PfNeutralHadronIso, depconf.getParameter<edm::InputTag>("pfNeutralHadrons"));
304  }
305  if (depconf.exists("pfPhotons")) {
306  labels.emplace_back(pat::PfGammaIso, depconf.getParameter<edm::InputTag>("pfPhotons"));
307  }
308  if (depconf.exists("user")) {
309  std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag>>("user");
310  std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
312  for (; it != ed; ++it, ++key) {
313  labels.push_back(std::make_pair(pat::IsolationKeys(key), *it));
314  }
315  tokens = edm::vector_transform(
316  labels, [this](IsolationLabel const& label) { return consumes<edm::ValueMap<T>>(label.second); });
317  }
318  }
320  return consumes<edm::ValueMap<T>>(label.second);
321  });
322 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
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
char const * label
std::pair< pat::IsolationKeys, edm::InputTag > IsolationLabel

◆ relMiniIsoPUCorrected()

double pat::PATMuonProducer::relMiniIsoPUCorrected ( const pat::Muon aMuon,
double  rho 
)
private

◆ setMuonMiniIso()

void PATMuonProducer::setMuonMiniIso ( pat::Muon aMuon,
const pat::PackedCandidateCollection pc 
)
private

Definition at line 1168 of file PATMuonProducer.cc.

References pat::getMiniPFIsolation(), miniIsoParams_, reco::LeafCandidate::polarP4(), and pat::Lepton< LeptonType >::setMiniPFIsolation().

Referenced by produce().

1168  {
1170  aMuon.polarP4(),
1171  miniIsoParams_[0],
1172  miniIsoParams_[1],
1173  miniIsoParams_[2],
1174  miniIsoParams_[3],
1175  miniIsoParams_[4],
1176  miniIsoParams_[5],
1177  miniIsoParams_[6],
1178  miniIsoParams_[7],
1179  miniIsoParams_[8]);
1180  aMuon.setMiniPFIsolation(miniiso);
1181 }
std::vector< double > miniIsoParams_
const PolarLorentzVector & polarP4() const final
four-momentum Lorentz vector
void setMiniPFIsolation(PFIsolation const &iso)
Definition: Lepton.h:217
PFIsolation getMiniPFIsolation(const pat::PackedCandidateCollection *pfcands, const reco::Candidate::PolarLorentzVector &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

◆ addEfficiencies_

bool pat::PATMuonProducer::addEfficiencies_
private

add efficiencies to the muon (this will be data members of th muon even w/o embedding)

Definition at line 221 of file PATMuonProducer.cc.

◆ addGenMatch_

bool pat::PATMuonProducer::addGenMatch_
private

add generator match information

Definition at line 193 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ addInverseBeta_

bool pat::PATMuonProducer::addInverseBeta_
private

add combined inverse beta measurement into the muon

Definition at line 189 of file PATMuonProducer.cc.

Referenced by produce().

◆ addPuppiIsolation_

bool pat::PATMuonProducer::addPuppiIsolation_
private

add puppi isolation

Definition at line 227 of file PATMuonProducer.cc.

Referenced by produce().

◆ addResolutions_

bool pat::PATMuonProducer::addResolutions_
private

add resolutions to the muon (this will be data members of th muon even w/o embedding)

Definition at line 199 of file PATMuonProducer.cc.

◆ addTriggerMatching_

bool pat::PATMuonProducer::addTriggerMatching_
private

Trigger.

Definition at line 261 of file PATMuonProducer.cc.

Referenced by produce().

◆ beamLineToken_

edm::EDGetTokenT<reco::BeamSpot> pat::PATMuonProducer::beamLineToken_
private

input source of the primary vertex/beamspot

Definition at line 211 of file PATMuonProducer.cc.

Referenced by produce().

◆ caloMETMuonCorrsToken_

edm::EDGetTokenT<edm::ValueMap<reco::MuonMETCorrectionData> > pat::PATMuonProducer::caloMETMuonCorrsToken_
private

source of caloMET muon corrections

Definition at line 177 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeMiniIso_

bool pat::PATMuonProducer::computeMiniIso_
private

Definition at line 156 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeMuonIDMVA_

bool pat::PATMuonProducer::computeMuonIDMVA_
private

Definition at line 238 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeMuonMVA_

bool pat::PATMuonProducer::computeMuonMVA_
private

standard muon selectors

Definition at line 237 of file PATMuonProducer.cc.

Referenced by produce().

◆ computePuppiCombinedIso_

bool pat::PATMuonProducer::computePuppiCombinedIso_
private

Definition at line 157 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeSoftMuonMVA_

bool pat::PATMuonProducer::computeSoftMuonMVA_
private

Definition at line 239 of file PATMuonProducer.cc.

Referenced by produce().

◆ effectiveAreaVec_

std::vector<double> pat::PATMuonProducer::effectiveAreaVec_
private

Definition at line 158 of file PATMuonProducer.cc.

Referenced by produce().

◆ efficiencyLoader_

pat::helper::EfficiencyLoader pat::PATMuonProducer::efficiencyLoader_
private

helper class to add efficiencies to the muon

Definition at line 253 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ embedBestTrack_

bool pat::PATMuonProducer::embedBestTrack_
private

embed the track from best muon measurement (global pflow)

Definition at line 163 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedCaloMETMuonCorrs_

bool pat::PATMuonProducer::embedCaloMETMuonCorrs_
private

embed muon MET correction info for caloMET into the muon

Definition at line 175 of file PATMuonProducer.cc.

Referenced by produce().

◆ embedCombinedMuon_

bool pat::PATMuonProducer::embedCombinedMuon_
private

embed track of the combined fit into the muon

Definition at line 173 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ embedDytMuon_

bool pat::PATMuonProducer::embedDytMuon_
private

embed track from DYT muon fit into the muon

Definition at line 187 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedGenMatch_

bool pat::PATMuonProducer::embedGenMatch_
private

embed the gen match information into the muon

Definition at line 197 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ embedHighLevelSelection_

bool pat::PATMuonProducer::embedHighLevelSelection_
private

embed high level selection variables

Definition at line 209 of file PATMuonProducer.cc.

Referenced by produce().

◆ embedPFCandidate_

bool pat::PATMuonProducer::embedPFCandidate_
private

embed pfCandidates into the muon

Definition at line 207 of file PATMuonProducer.cc.

Referenced by produce().

◆ embedPfEcalEnergy_

bool pat::PATMuonProducer::embedPfEcalEnergy_
private

add ecal PF energy

Definition at line 225 of file PATMuonProducer.cc.

Referenced by produce().

◆ embedPickyMuon_

bool pat::PATMuonProducer::embedPickyMuon_
private

embed track from picky muon fit into the muon

Definition at line 183 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedStandAloneMuon_

bool pat::PATMuonProducer::embedStandAloneMuon_
private

embed track from muon system into the muon

Definition at line 171 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedTcMETMuonCorrs_

bool pat::PATMuonProducer::embedTcMETMuonCorrs_
private

embed muon MET correction info for tcMET into the muon

Definition at line 179 of file PATMuonProducer.cc.

Referenced by produce().

◆ embedTpfmsMuon_

bool pat::PATMuonProducer::embedTpfmsMuon_
private

embed track from tpfms muon fit into the muon

Definition at line 185 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedTrack_

bool pat::PATMuonProducer::embedTrack_
private

embed the track from inner tracker into the muon

Definition at line 169 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ embedTunePBestTrack_

bool pat::PATMuonProducer::embedTunePBestTrack_
private

embed the track from best muon measurement (muon only)

Definition at line 165 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ forceEmbedBestTrack_

bool pat::PATMuonProducer::forceEmbedBestTrack_
private

force separate embed of the best track even if already embedded

Definition at line 167 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ genMatchTokens_

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

input tags for generator match information

Definition at line 195 of file PATMuonProducer.cc.

Referenced by produce().

◆ geometryToken_

const edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> pat::PATMuonProducer::geometryToken_
private

Definition at line 266 of file PATMuonProducer.cc.

Referenced by produce().

◆ hltCollectionFilters_

std::vector<std::string> pat::PATMuonProducer::hltCollectionFilters_
private

Definition at line 264 of file PATMuonProducer.cc.

Referenced by produce().

◆ isoDepositLabels_

IsolationLabels pat::PATMuonProducer::isoDepositLabels_
private

input source for isoDeposits

Definition at line 215 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ isoDepositTokens_

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

Definition at line 216 of file PATMuonProducer.cc.

Referenced by produce().

◆ isolationValueLabels_

IsolationLabels pat::PATMuonProducer::isolationValueLabels_
private

input source isolation value maps

Definition at line 218 of file PATMuonProducer.cc.

Referenced by fillMuon().

◆ isolationValueTokens_

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

Definition at line 219 of file PATMuonProducer.cc.

Referenced by produce().

◆ isolator_

pat::helper::MultiIsolator pat::PATMuonProducer::isolator_
private

— tools — helper class to add userdefined isolation values to the muon

Definition at line 249 of file PATMuonProducer.cc.

Referenced by produce().

◆ isolatorTmpStorage_

pat::helper::MultiIsolator::IsolationValuePairs pat::PATMuonProducer::isolatorTmpStorage_
private

isolation value pair for temporary storage before being folded into the muon

Definition at line 251 of file PATMuonProducer.cc.

Referenced by produce().

◆ miniIsoParams_

std::vector<double> pat::PATMuonProducer::miniIsoParams_
private

Definition at line 159 of file PATMuonProducer.cc.

Referenced by getRelMiniIsoPUCorrected(), and setMuonMiniIso().

◆ muonTimeExtraToken_

edm::EDGetTokenT<edm::ValueMap<reco::MuonTimeExtra> > pat::PATMuonProducer::muonTimeExtraToken_
private

input tag for reading inverse beta

Definition at line 191 of file PATMuonProducer.cc.

Referenced by produce().

◆ muonToken_

edm::EDGetTokenT<edm::View<reco::Muon> > pat::PATMuonProducer::muonToken_
private

input source

Definition at line 152 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaBTagCollectionTag_

edm::EDGetTokenT<reco::JetTagCollection> pat::PATMuonProducer::mvaBTagCollectionTag_
private

Definition at line 242 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaL1Corrector_

edm::EDGetTokenT<reco::JetCorrector> pat::PATMuonProducer::mvaL1Corrector_
private

Definition at line 243 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaL1L2L3ResCorrector_

edm::EDGetTokenT<reco::JetCorrector> pat::PATMuonProducer::mvaL1L2L3ResCorrector_
private

Definition at line 244 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaUseJec_

bool pat::PATMuonProducer::mvaUseJec_
private

Definition at line 241 of file PATMuonProducer.cc.

Referenced by produce().

◆ patMuonPutToken_

const edm::EDPutTokenT<std::vector<Muon> > pat::PATMuonProducer::patMuonPutToken_
private

Definition at line 269 of file PATMuonProducer.cc.

Referenced by produce().

◆ pcToken_

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

Definition at line 155 of file PATMuonProducer.cc.

Referenced by produce().

◆ pfMuonToken_

edm::EDGetTokenT<reco::PFCandidateCollection> pat::PATMuonProducer::pfMuonToken_
private

input source pfCandidates that will be to be transformed into pat::Muons, when using PF2PAT

Definition at line 205 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPIIsolation_charged_hadrons_

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

Definition at line 229 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPIIsolation_neutral_hadrons_

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

Definition at line 230 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPIIsolation_photons_

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

Definition at line 231 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPINoLeptonsIsolation_charged_hadrons_

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

Definition at line 233 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPINoLeptonsIsolation_neutral_hadrons_

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

Definition at line 234 of file PATMuonProducer.cc.

Referenced by produce().

◆ PUPPINoLeptonsIsolation_photons_

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

Definition at line 235 of file PATMuonProducer.cc.

Referenced by produce().

◆ pvToken_

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

input source of the primary vertex

Definition at line 213 of file PATMuonProducer.cc.

Referenced by produce().

◆ recomputeBasicSelectors_

bool pat::PATMuonProducer::recomputeBasicSelectors_
private

Definition at line 240 of file PATMuonProducer.cc.

Referenced by produce().

◆ relMiniIsoPUCorrected_

double pat::PATMuonProducer::relMiniIsoPUCorrected_
private

Definition at line 160 of file PATMuonProducer.cc.

◆ resolutionLoader_

pat::helper::KinResolutionsLoader pat::PATMuonProducer::resolutionLoader_
private

helper class to add resolutions to the muon

Definition at line 201 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ rho_

edm::EDGetTokenT<double> pat::PATMuonProducer::rho_
private

Definition at line 245 of file PATMuonProducer.cc.

Referenced by produce().

◆ simInfo_

edm::EDGetTokenT<edm::ValueMap<reco::MuonSimInfo> > pat::PATMuonProducer::simInfo_
private

MC info.

Definition at line 258 of file PATMuonProducer.cc.

Referenced by produce().

◆ tcMETMuonCorrsToken_

edm::EDGetTokenT<edm::ValueMap<reco::MuonMETCorrectionData> > pat::PATMuonProducer::tcMETMuonCorrsToken_
private

source of tcMET muon corrections

Definition at line 181 of file PATMuonProducer.cc.

Referenced by produce().

◆ transientTrackBuilderToken_

const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> pat::PATMuonProducer::transientTrackBuilderToken_
private

Definition at line 267 of file PATMuonProducer.cc.

Referenced by produce().

◆ triggerObjects_

edm::EDGetTokenT<std::vector<pat::TriggerObjectStandAlone> > pat::PATMuonProducer::triggerObjects_
private

Definition at line 262 of file PATMuonProducer.cc.

Referenced by produce().

◆ triggerResults_

edm::EDGetTokenT<edm::TriggerResults> pat::PATMuonProducer::triggerResults_
private

Definition at line 263 of file PATMuonProducer.cc.

Referenced by produce().

◆ useParticleFlow_

bool pat::PATMuonProducer::useParticleFlow_
private

switch to use particle flow (PF2PAT) or not

Definition at line 203 of file PATMuonProducer.cc.

Referenced by fillMuon(), and produce().

◆ userDataHelper_

pat::PATUserDataHelper<pat::Muon> pat::PATMuonProducer::userDataHelper_
private

helper class to add userData to the muon

Definition at line 255 of file PATMuonProducer.cc.

Referenced by produce().

◆ useUserData_

bool pat::PATMuonProducer::useUserData_
private

add user data to the muon (this will be data members of th muon even w/o embedding)

Definition at line 223 of file PATMuonProducer.cc.

Referenced by produce().