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_
 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_
 
double mvaIDmediumCut_
 
double mvaIDtightCut_
 working points of the muon MVA ID More...
 
edm::EDGetTokenT< reco::JetCorrectormvaL1Corrector_
 
edm::EDGetTokenT< reco::JetCorrectormvaL1L2L3ResCorrector_
 
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 useJec_
 
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 76 of file PATMuonProducer.cc.

Member Typedef Documentation

◆ GenAssociations

Definition at line 97 of file PATMuonProducer.cc.

◆ IsoDepositMaps

Definition at line 98 of file PATMuonProducer.cc.

◆ IsolationLabel

Definition at line 100 of file PATMuonProducer.cc.

◆ IsolationLabels

Definition at line 101 of file PATMuonProducer.cc.

◆ IsolationValueMaps

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

Definition at line 99 of file PATMuonProducer.cc.

◆ MuonBaseRef

typedefs for convenience

Definition at line 96 of file PATMuonProducer.cc.

Constructor & Destructor Documentation

◆ PATMuonProducer()

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

default constructir

Definition at line 341 of file PATMuonProducer.cc.

References deDxTools::esConsumes().

343  useUserData_(iConfig.exists("userData")),
344  computeMuonIDMVA_(false),
345  computeSoftMuonMVA_(false),
347  useJec_(false),
348  isolator_(iConfig.getParameter<edm::ParameterSet>("userIsolation"), consumesCollector(), false),
350  transientTrackBuilderToken_{esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))},
351  patMuonPutToken_{produces<std::vector<Muon>>()} {
352  // Muon MVA ID wps
353  mvaIDmediumCut_ = iConfig.getParameter<double>("mvaIDwpMedium");
354  mvaIDtightCut_ = iConfig.getParameter<double>("mvaIDwpTight");
355 
356  // input source
357  muonToken_ = consumes<edm::View<reco::Muon>>(iConfig.getParameter<edm::InputTag>("muonSource"));
358  // embedding of tracks
359  embedBestTrack_ = iConfig.getParameter<bool>("embedMuonBestTrack");
360  embedTunePBestTrack_ = iConfig.getParameter<bool>("embedTunePMuonBestTrack");
361  forceEmbedBestTrack_ = iConfig.getParameter<bool>("forceBestTrackEmbedding");
362  embedTrack_ = iConfig.getParameter<bool>("embedTrack");
363  embedCombinedMuon_ = iConfig.getParameter<bool>("embedCombinedMuon");
364  embedStandAloneMuon_ = iConfig.getParameter<bool>("embedStandAloneMuon");
365  // embedding of muon MET correction information
366  embedCaloMETMuonCorrs_ = iConfig.getParameter<bool>("embedCaloMETMuonCorrs");
367  embedTcMETMuonCorrs_ = iConfig.getParameter<bool>("embedTcMETMuonCorrs");
369  mayConsume<edm::ValueMap<reco::MuonMETCorrectionData>>(iConfig.getParameter<edm::InputTag>("caloMETMuonCorrs"));
371  mayConsume<edm::ValueMap<reco::MuonMETCorrectionData>>(iConfig.getParameter<edm::InputTag>("tcMETMuonCorrs"));
372  // pflow specific configurables
373  useParticleFlow_ = iConfig.getParameter<bool>("useParticleFlow");
374  embedPFCandidate_ = iConfig.getParameter<bool>("embedPFCandidate");
375  pfMuonToken_ = mayConsume<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfMuonSource"));
376  embedPfEcalEnergy_ = iConfig.getParameter<bool>("embedPfEcalEnergy");
377  // embedding of tracks from TeV refit
378  embedPickyMuon_ = iConfig.getParameter<bool>("embedPickyMuon");
379  embedTpfmsMuon_ = iConfig.getParameter<bool>("embedTpfmsMuon");
380  embedDytMuon_ = iConfig.getParameter<bool>("embedDytMuon");
381  // embedding of inverse beta variable information
382  addInverseBeta_ = iConfig.getParameter<bool>("addInverseBeta");
383  if (addInverseBeta_) {
385  consumes<edm::ValueMap<reco::MuonTimeExtra>>(iConfig.getParameter<edm::InputTag>("sourceMuonTimeExtra"));
386  }
387  // Monte Carlo matching
388  addGenMatch_ = iConfig.getParameter<bool>("addGenMatch");
389  if (addGenMatch_) {
390  embedGenMatch_ = iConfig.getParameter<bool>("embedGenMatch");
391  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
393  iConfig.getParameter<edm::InputTag>("genParticleMatch")));
394  } else {
396  iConfig.getParameter<std::vector<edm::InputTag>>("genParticleMatch"),
397  [this](edm::InputTag const& tag) { return consumes<edm::Association<reco::GenParticleCollection>>(tag); });
398  }
399  }
400  // efficiencies
401  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
402  if (addEfficiencies_) {
404  pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
405  }
406  // resolutions
407  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
408  if (addResolutions_) {
410  pat::helper::KinResolutionsLoader(iConfig.getParameter<edm::ParameterSet>("resolutions"), consumesCollector());
411  }
412  // puppi
413  addPuppiIsolation_ = iConfig.getParameter<bool>("addPuppiIsolation");
414  if (addPuppiIsolation_) {
416  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
418  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
420  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
421  //puppiNoLeptons
423  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons"));
425  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons"));
427  consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationPhotons"));
428  }
429  // read isoDeposit labels, for direct embedding
430  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
431  // read isolation value labels, for direct embedding
433  // check to see if the user wants to add user data
434  if (useUserData_) {
435  userDataHelper_ = PATUserDataHelper<Muon>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
436  }
437  // embed high level selection variables
438  embedHighLevelSelection_ = iConfig.getParameter<bool>("embedHighLevelSelection");
440  beamLineToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"));
441  pvToken_ = consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("pvSrc"));
442  }
443 
444  //for mini-isolation calculation
445  computeMiniIso_ = iConfig.getParameter<bool>("computeMiniIso");
446 
447  computePuppiCombinedIso_ = iConfig.getParameter<bool>("computePuppiCombinedIso");
448 
449  effectiveAreaVec_ = iConfig.getParameter<std::vector<double>>("effectiveAreaVec");
450 
451  miniIsoParams_ = iConfig.getParameter<std::vector<double>>("miniIsoParams");
452  if (computeMiniIso_ && miniIsoParams_.size() != 9) {
453  throw cms::Exception("ParameterError") << "miniIsoParams must have exactly 9 elements.\n";
454  }
456  pcToken_ = consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("pfCandsForMiniIso"));
457 
458  // standard selectors
459  recomputeBasicSelectors_ = iConfig.getParameter<bool>("recomputeBasicSelectors");
460  computeMuonIDMVA_ = iConfig.getParameter<bool>("computeMuonIDMVA");
461 
462  if (computeMiniIso_) {
463  // pfCombinedInclusiveSecondaryVertexV2BJetTags
464  mvaBTagCollectionTag_ = consumes<reco::JetTagCollection>(iConfig.getParameter<edm::InputTag>("mvaJetTag"));
465  mvaL1Corrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1Corrector"));
466  mvaL1L2L3ResCorrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1L2L3ResCorrector"));
467  rho_ = consumes<double>(iConfig.getParameter<edm::InputTag>("rho"));
468  useJec_ = iConfig.getParameter<bool>("useJec");
469  }
470 
471  computeSoftMuonMVA_ = iConfig.getParameter<bool>("computeSoftMuonMVA");
472 
473  // MC info
474  simInfo_ = consumes<edm::ValueMap<reco::MuonSimInfo>>(iConfig.getParameter<edm::InputTag>("muonSimInfo"));
475 
476  addTriggerMatching_ = iConfig.getParameter<bool>("addTriggerMatching");
477  if (addTriggerMatching_) {
479  consumes<std::vector<pat::TriggerObjectStandAlone>>(iConfig.getParameter<edm::InputTag>("triggerObjects"));
480  triggerResults_ = consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("triggerResults"));
481  }
482  hltCollectionFilters_ = iConfig.getParameter<std::vector<std::string>>("hltCollectionFilters");
483 }
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:307
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:172
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
bool computeMuonIDMVA_
standard muon selectors
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
std::vector< std::string > hltCollectionFilters_
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
double mvaIDtightCut_
working points of the muon MVA ID
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 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 485 of file PATMuonProducer.cc.

485 {}

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 1335 of file PATMuonProducer.cc.

References pat::Muon::BS2D, pat::Muon::BS3D, Matriplex::hypot(), BeamMonitor_cff::primaryVertex, pat::Muon::PV2D, pat::Muon::PV3D, pat::Muon::PVDZ, mps_fire::result, pat::Muon::setDB(), IPTools::signedImpactParameter3D(), and HLT_2023v12_cff::track.

Referenced by produce().

1341  {
1342  // Correct to PV
1343 
1344  // PV2D
1345  aMuon.setDB(track->dxy(primaryVertex.position()),
1346  track->dxyError(primaryVertex.position(), primaryVertex.covariance()),
1347  pat::Muon::PV2D);
1348 
1349  // PV3D
1350  std::pair<bool, Measurement1D> result =
1352  double d0_corr = result.second.value();
1353  double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1354  aMuon.setDB(d0_corr, d0_err, pat::Muon::PV3D);
1355 
1356  // Correct to beam spot
1357 
1358  // BS2D
1359  aMuon.setDB(track->dxy(beamspot), track->dxyError(beamspot), pat::Muon::BS2D);
1360 
1361  // make a fake vertex out of beam spot
1362  reco::Vertex vBeamspot(beamspot.position(), beamspot.rotatedCovariance3D());
1363 
1364  // BS3D
1365  result = IPTools::signedImpactParameter3D(tt, GlobalVector(track->px(), track->py(), track->pz()), vBeamspot);
1366  d0_corr = result.second.value();
1367  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1368  aMuon.setDB(d0_corr, d0_err, pat::Muon::BS3D);
1369 
1370  // PVDZ
1371  aMuon.setDB(
1372  track->dz(primaryVertex.position()), std::hypot(track->dzError(), primaryVertex.zError()), pat::Muon::PVDZ);
1373 }
MPlex< T, D1, D2, N > hypot(const MPlex< T, D1, D2, N > &a, const MPlex< T, D1, D2, N > &b)
Definition: Matriplex.h:417
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:81
Definition: TTTypes.h:54
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 1190 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(), ProducerED_cfi::InputTag, or, edm::ParameterSetDescription::setAllowAnything(), edm::ParameterSetDescription::setComment(), and edm::ParameterDescriptionNode::setComment().

1190  {
1192  iDesc.setComment("PAT muon producer module");
1193 
1194  // input source
1195  iDesc.add<edm::InputTag>("muonSource", edm::InputTag("no default"))->setComment("input collection");
1196 
1197  // embedding
1198  iDesc.add<bool>("embedMuonBestTrack", true)->setComment("embed muon best track (global pflow)");
1199  iDesc.add<bool>("embedTunePMuonBestTrack", true)->setComment("embed muon best track (muon only)");
1200  iDesc.add<bool>("forceBestTrackEmbedding", true)
1201  ->setComment(
1202  "force embedding separately the best tracks even if they're already embedded e.g. as tracker or global "
1203  "tracks");
1204  iDesc.add<bool>("embedTrack", true)->setComment("embed external track");
1205  iDesc.add<bool>("embedStandAloneMuon", true)->setComment("embed external stand-alone muon");
1206  iDesc.add<bool>("embedCombinedMuon", false)->setComment("embed external combined muon");
1207  iDesc.add<bool>("embedPickyMuon", false)->setComment("embed external picky track");
1208  iDesc.add<bool>("embedTpfmsMuon", false)->setComment("embed external tpfms track");
1209  iDesc.add<bool>("embedDytMuon", false)->setComment("embed external dyt track ");
1210 
1211  // embedding of MET muon corrections
1212  iDesc.add<bool>("embedCaloMETMuonCorrs", true)->setComment("whether to add MET muon correction for caloMET or not");
1213  iDesc.add<edm::InputTag>("caloMETMuonCorrs", edm::InputTag("muonMETValueMapProducer", "muCorrData"))
1214  ->setComment("source of MET muon corrections for caloMET");
1215  iDesc.add<bool>("embedTcMETMuonCorrs", true)->setComment("whether to add MET muon correction for tcMET or not");
1216  iDesc.add<edm::InputTag>("tcMETMuonCorrs", edm::InputTag("muonTCMETValueMapProducer", "muCorrData"))
1217  ->setComment("source of MET muon corrections for tcMET");
1218 
1219  // pf specific parameters
1220  iDesc.add<edm::InputTag>("pfMuonSource", edm::InputTag("pfMuons"))->setComment("particle flow input collection");
1221  iDesc.add<bool>("useParticleFlow", false)->setComment("whether to use particle flow or not");
1222  iDesc.add<bool>("embedPFCandidate", false)->setComment("embed external particle flow object");
1223  iDesc.add<bool>("embedPfEcalEnergy", true)->setComment("add ecal energy as reconstructed by PF");
1224 
1225  // inverse beta computation
1226  iDesc.add<bool>("addInverseBeta", true)->setComment("add combined inverse beta");
1227  iDesc.add<edm::InputTag>("sourceInverseBeta", edm::InputTag("muons", "combined"))
1228  ->setComment("source of inverse beta values");
1229 
1230  // MC matching configurables
1231  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
1232  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
1233  std::vector<edm::InputTag> emptySourceVector;
1234  iDesc
1235  .addNode(edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
1236  edm::ParameterDescription<std::vector<edm::InputTag>>("genParticleMatch", emptySourceVector, true))
1237  ->setComment("input with MC match information");
1238 
1239  // mini-iso
1240  iDesc.add<bool>("computeMiniIso", false)->setComment("whether or not to compute and store electron mini-isolation");
1241  iDesc.add<bool>("computePuppiCombinedIso", false)
1242  ->setComment("whether or not to compute and store puppi combined isolation");
1243 
1244  iDesc.add<edm::InputTag>("pfCandsForMiniIso", edm::InputTag("packedPFCandidates"))
1245  ->setComment("collection to use to compute mini-iso");
1246  iDesc.add<std::vector<double>>("miniIsoParams", std::vector<double>())
1247  ->setComment("mini-iso parameters to use for muons");
1248 
1249  iDesc.add<bool>("addTriggerMatching", false)->setComment("add L1 and HLT matching to offline muon");
1250 
1252 
1253  // IsoDeposit configurables
1254  edm::ParameterSetDescription isoDepositsPSet;
1255  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
1256  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
1257  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
1258  isoDepositsPSet.addOptional<edm::InputTag>("particle");
1259  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1260  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
1261  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1262  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1263  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
1264  isoDepositsPSet.addOptional<std::vector<edm::InputTag>>("user");
1265  iDesc.addOptional("isoDeposits", isoDepositsPSet);
1266 
1267  // isolation values configurables
1268  edm::ParameterSetDescription isolationValuesPSet;
1269  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
1270  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
1271  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
1272  isolationValuesPSet.addOptional<edm::InputTag>("particle");
1273  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1274  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
1275  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1276  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1277  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
1278  iDesc.addOptional("isolationValues", isolationValuesPSet);
1279 
1280  iDesc.ifValue(edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
1282  "puppiIsolationChargedHadrons",
1283  edm::InputTag("muonPUPPIIsolation", "h+-DR030-ThresholdVeto000-ConeVeto000"),
1284  true) and
1286  "puppiIsolationNeutralHadrons",
1287  edm::InputTag("muonPUPPIIsolation", "h0-DR030-ThresholdVeto000-ConeVeto001"),
1288  true) and
1290  "puppiIsolationPhotons",
1291  edm::InputTag("muonPUPPIIsolation", "gamma-DR030-ThresholdVeto000-ConeVeto001"),
1292  true) and
1294  "puppiNoLeptonsIsolationChargedHadrons",
1295  edm::InputTag("muonPUPPINoLeptonsIsolation", "h+-DR030-ThresholdVeto000-ConeVeto000"),
1296  true) and
1298  "puppiNoLeptonsIsolationNeutralHadrons",
1299  edm::InputTag("muonPUPPINoLeptonsIsolation", "h0-DR030-ThresholdVeto000-ConeVeto001"),
1300  true) and
1302  "puppiNoLeptonsIsolationPhotons",
1303  edm::InputTag("muonPUPPINoLeptonsIsolation", "gamma-DR030-ThresholdVeto000-ConeVeto001"),
1304  true)) or
1305  false >> edm::EmptyGroupDescription());
1306 
1307  // Efficiency configurables
1308  edm::ParameterSetDescription efficienciesPSet;
1309  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1310  iDesc.add("efficiencies", efficienciesPSet);
1311  iDesc.add<bool>("addEfficiencies", false);
1312 
1313  // Check to see if the user wants to add user data
1314  edm::ParameterSetDescription userDataPSet;
1316  iDesc.addOptional("userData", userDataPSet);
1317 
1318  edm::ParameterSetDescription isolationPSet;
1319  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1320  iDesc.add("userIsolation", isolationPSet);
1321 
1322  iDesc.add<bool>("embedHighLevelSelection", true)->setComment("embed high level selection");
1323  edm::ParameterSetDescription highLevelPSet;
1324  highLevelPSet.setAllowAnything();
1325  iDesc.addNode(edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true))
1326  ->setComment("input with high level selection");
1328  ->setComment("input with high level selection");
1329 
1330  //descriptions.add("PATMuonProducer", iDesc);
1331 }
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 550 of file PATMuonProducer.cc.

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

Referenced by produce().

553  {
554  // WARNING: in a case of close-by muons the dR matching may select both muons.
555  // It's better to select the best match for a given collection.
556  for (const auto& triggerObject : *triggerObjects) {
557  if (triggerObject.hasTriggerObjectType(trigger::TriggerMuon)) {
558  bool keepIt = false;
559  for (const auto& name : collection_filter_names) {
560  if (triggerObject.hasCollection(name)) {
561  keepIt = true;
562  break;
563  }
564  }
565  if (not keepIt)
566  continue;
567  if (deltaR(triggerObject.p4(), muon) > 0.1)
568  continue;
569  pat::TriggerObjectStandAlone obj(triggerObject);
570  obj.unpackPathNames(names);
571  muon.addTriggerObjectMatch(obj);
572  }
573  }
574 }
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 498 of file PATMuonProducer.cc.

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

Referenced by produce().

501  {
502  // L1 trigger object parameters are defined at MB2/ME2. Use the muon
503  // chamber matching information to get the local direction of the
504  // muon trajectory and convert it to a global direction to match the
505  // trigger objects
506 
507  std::optional<GlobalPoint> muonPosition;
508  // Loop over chambers
509  // initialize muonPosition with any available match, just in case
510  // the second station is missing - it's better folling back to
511  // dR matching at IP
512  for (const auto& chamberMatch : aMuon.matches()) {
513  if (chamberMatch.id.subdetId() == MuonSubdetId::DT) {
514  DTChamberId detId(chamberMatch.id.rawId());
515  if (abs(detId.station()) > 3)
516  continue;
517  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
518  if (abs(detId.station()) == 2)
519  break;
520  }
521  if (chamberMatch.id.subdetId() == MuonSubdetId::CSC) {
522  CSCDetId detId(chamberMatch.id.rawId());
523  if (abs(detId.station()) > 3)
524  continue;
525  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
526  if (abs(detId.station()) == 2)
527  break;
528  }
529  }
530  if (not muonPosition)
531  return;
532  for (const auto& triggerObject : *triggerObjects) {
533  if (triggerObject.hasTriggerObjectType(trigger::TriggerL1Mu)) {
534  if (std::abs(triggerObject.eta()) < 0.001) {
535  // L1 is defined in X-Y plain
536  if (deltaPhi(triggerObject.phi(), muonPosition->phi()) > 0.1)
537  continue;
538  } else {
539  // 3D L1
540  if (deltaR(triggerObject.p4(), *muonPosition) > 0.15)
541  continue;
542  }
543  pat::TriggerObjectStandAlone obj(triggerObject);
544  obj.unpackPathNames(names);
545  aMuon.addTriggerObjectMatch(obj);
546  }
547  }
548 }
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 1026 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(), dqmdumpme::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().

1031  {
1032  // in the particle flow algorithm,
1033  // the muon momentum is recomputed.
1034  // the new value is stored as the momentum of the
1035  // resulting PFCandidate of type Muon, and choosen
1036  // as the pat::Muon momentum
1037  if (useParticleFlow_)
1038  aMuon.setP4(aMuon.pfCandidateRef()->p4());
1039  if (embedTrack_)
1040  aMuon.embedTrack();
1042  aMuon.embedStandAloneMuon();
1043  if (embedCombinedMuon_)
1044  aMuon.embedCombinedMuon();
1045 
1046  // embed the TeV refit track refs (only available for globalMuons)
1047  if (aMuon.isGlobalMuon()) {
1049  aMuon.embedPickyMuon();
1051  aMuon.embedTpfmsMuon();
1053  aMuon.embedDytMuon();
1054  }
1055 
1056  // embed best tracks (at the end, so unless forceEmbedBestTrack_ is true we can save some space not embedding them twice)
1057  if (embedBestTrack_)
1061 
1062  // store the match to the generated final state muons
1063  if (addGenMatch_) {
1064  for (auto const& genMatch : genMatches) {
1065  reco::GenParticleRef genMuon = (*genMatch)[baseRef];
1066  aMuon.addGenParticleRef(genMuon);
1067  }
1068  if (embedGenMatch_)
1069  aMuon.embedGenParticle();
1070  }
1071  if (efficiencyLoader_.enabled()) {
1072  efficiencyLoader_.setEfficiencies(aMuon, muonRef);
1073  }
1074 
1075  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
1076  if (useParticleFlow_) {
1077  if (deposits[j]->contains(baseRef.id())) {
1078  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[baseRef]);
1079  } else if (deposits[j]->contains(muonRef.id())) {
1080  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
1081  } else {
1082  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
1084  }
1085  } else {
1086  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
1087  }
1088  }
1089 
1090  for (size_t j = 0; j < isolationValues.size(); ++j) {
1091  if (useParticleFlow_) {
1092  if (isolationValues[j]->contains(baseRef.id())) {
1094  } else if (isolationValues[j]->contains(muonRef.id())) {
1096  } else {
1097  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
1099  }
1100  } else {
1102  }
1103  }
1104 
1105  if (resolutionLoader_.enabled()) {
1107  }
1108 }
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:216
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:49
bool isGlobalMuon() const override
Definition: Muon.h:303
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 487 of file PATMuonProducer.cc.

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

Referenced by fillL1TriggerInfo().

489  {
490  const GeomDet* chamberGeometry = geometry->idToDet(chamberId);
491  if (chamberGeometry) {
492  LocalPoint localPosition(chamberMatch.x, chamberMatch.y, 0);
493  return std::optional<GlobalPoint>(std::in_place, chamberGeometry->toGlobal(localPosition));
494  }
495  return std::optional<GlobalPoint>();
496 }
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 1125 of file PATMuonProducer.cc.

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

Referenced by produce().

1125  {
1126  double mindr(miniIsoParams_[0]);
1127  double maxdr(miniIsoParams_[1]);
1128  double kt_scale(miniIsoParams_[2]);
1129  double drcut = pat::miniIsoDr(muon.polarP4(), mindr, maxdr, kt_scale);
1130  return pat::muonRelMiniIsoPUCorrected(muon.miniPFIsolation(), muon.polarP4(), drcut, rho, area);
1131 }
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 87 of file PATMuonProducer.cc.

87 {}

◆ initializeGlobalCache()

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

Definition at line 83 of file PATMuonProducer.cc.

83  {
84  return std::make_unique<PATMuonHeavyObjectCache>(iConfig);
85  }

◆ isChargedHadron()

bool PATMuonProducer::isChargedHadron ( long  pdgid)
private

Definition at line 1185 of file PATMuonProducer.cc.

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

Referenced by puppiCombinedIsolation().

1185 { 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 1183 of file PATMuonProducer.cc.

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

Referenced by puppiCombinedIsolation().

1183 { 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 1187 of file PATMuonProducer.cc.

References EgammaValidation_cff::pdgid.

Referenced by puppiCombinedIsolation().

1187 { 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 576 of file PATMuonProducer.cc.

References 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_, computePuppiCombinedIso_, computeSoftMuonMVA_, CandIsolatorFromDeposits_cfi::deposits, 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, 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, mvaIDmediumCut_, mvaIDtightCut_, reco::Muon::MvaIDwpMedium, reco::Muon::MvaIDwpTight, displacedMuonProducer_cff::mvaL1Corrector, mvaL1Corrector_, displacedMuonProducer_cff::mvaL1L2L3ResCorrector, mvaL1L2L3ResCorrector_, 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(), 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_, useJec_, useParticleFlow_, userDataHelper_, and useUserData_.

576  {
577  // get the tracking Geometry
578  auto geometry = iSetup.getHandle(geometryToken_);
579  if (!geometry.isValid())
580  throw cms::Exception("FatalError") << "Unable to find GlobalTrackingGeometryRecord in event!\n";
581 
582  // switch off embedding (in unschedules mode)
583  if (iEvent.isRealData()) {
584  addGenMatch_ = false;
585  embedGenMatch_ = false;
586  }
587 
589  iEvent.getByToken(muonToken_, muons);
590 
593  iEvent.getByToken(pcToken_, pc);
594 
595  // get the ESHandle for the transient track builder,
596  // if needed for high level selection embedding
597  TransientTrackBuilder const* trackBuilder = nullptr;
598 
599  if (isolator_.enabled())
600  isolator_.beginEvent(iEvent, iSetup);
605 
607  for (size_t j = 0; j < isoDepositTokens_.size(); ++j) {
608  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
609  }
610 
612  for (size_t j = 0; j < isolationValueTokens_.size(); ++j) {
614  }
615 
616  //value maps for puppi isolation
617  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
618  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
619  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
620  //value maps for puppiNoLeptons isolation
621  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_charged_hadrons;
622  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_neutral_hadrons;
623  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_photons;
624  if (addPuppiIsolation_) {
625  //puppi
626  iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
627  iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
628  iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
629  //puppiNoLeptons
630  iEvent.getByToken(PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_charged_hadrons);
631  iEvent.getByToken(PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons);
632  iEvent.getByToken(PUPPINoLeptonsIsolation_photons_, PUPPINoLeptonsIsolation_photons);
633  }
634 
635  // inputs for muon mva
636  edm::Handle<reco::JetTagCollection> mvaBTagCollectionTag;
639  if (computeMiniIso_) {
640  iEvent.getByToken(mvaBTagCollectionTag_, mvaBTagCollectionTag);
643  }
644 
645  // prepare the MC genMatchTokens_
646  GenAssociations genMatches(genMatchTokens_.size());
647  if (addGenMatch_) {
648  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
649  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
650  }
651  }
652 
653  // prepare the high level selection: needs beamline
654  // OR primary vertex, depending on user selection
657  bool beamSpotIsValid = false;
658  bool primaryVertexIsValid = false;
660  // get the beamspot
661  edm::Handle<reco::BeamSpot> beamSpotHandle;
662  iEvent.getByToken(beamLineToken_, beamSpotHandle);
663 
664  // get the primary vertex
666  iEvent.getByToken(pvToken_, pvHandle);
667 
668  if (beamSpotHandle.isValid()) {
669  beamSpot = *beamSpotHandle;
670  beamSpotIsValid = true;
671  } else {
672  edm::LogError("DataNotAvailable") << "No beam spot available from EventSetup, not adding high level selection \n";
673  }
674  if (pvHandle.isValid() && !pvHandle->empty()) {
675  primaryVertex = pvHandle->at(0);
676  primaryVertexIsValid = true;
677  } else {
678  edm::LogError("DataNotAvailable")
679  << "No primary vertex available from EventSetup, not adding high level selection \n";
680  }
681  // this is needed by the IPTools methods from the tracking group
682  trackBuilder = &iSetup.getData(transientTrackBuilderToken_);
683  }
684 
685  // MC info
687  bool simInfoIsAvailalbe = iEvent.getByToken(simInfo_, simInfo);
688 
689  // this will be the new object collection
690  std::vector<Muon> patMuons;
691 
693  if (useParticleFlow_) {
694  // get the PFCandidates of type muons
695  iEvent.getByToken(pfMuonToken_, pfMuons);
696 
697  unsigned index = 0;
698  for (reco::PFCandidateConstIterator i = pfMuons->begin(); i != pfMuons->end(); ++i, ++index) {
699  const reco::PFCandidate& pfmu = *i;
700  //const reco::IsolaPFCandidate& pfmu = *i;
701  const reco::MuonRef& muonRef = pfmu.muonRef();
702  assert(muonRef.isNonnull());
703 
704  MuonBaseRef muonBaseRef(muonRef);
705  Muon aMuon(muonBaseRef);
706 
707  if (useUserData_) {
708  userDataHelper_.add(aMuon, iEvent, iSetup);
709  }
710 
711  // embed high level selection
713  // get the tracks
714  reco::TrackRef innerTrack = muonBaseRef->innerTrack();
715  reco::TrackRef globalTrack = muonBaseRef->globalTrack();
716  reco::TrackRef bestTrack = muonBaseRef->muonBestTrack();
717  reco::TrackRef chosenTrack = innerTrack;
718  // Make sure the collection it points to is there
719  if (bestTrack.isNonnull() && bestTrack.isAvailable())
720  chosenTrack = bestTrack;
721 
722  if (chosenTrack.isNonnull() && chosenTrack.isAvailable()) {
723  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
724  aMuon.setNumberOfValidHits(nhits);
725 
726  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
727  embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
728  }
729 
730  if (globalTrack.isNonnull() && globalTrack.isAvailable() && !embedCombinedMuon_) {
731  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
732  aMuon.setNormChi2(norm_chi2);
733  }
734  }
735  reco::PFCandidateRef pfRef(pfMuons, index);
736  //reco::PFCandidatePtr ptrToMother(pfMuons,index);
737  reco::CandidateBaseRef pfBaseRef(pfRef);
738 
739  aMuon.setPFCandidateRef(pfRef);
740  if (embedPFCandidate_)
741  aMuon.embedPFCandidate();
742  fillMuon(aMuon, muonBaseRef, pfBaseRef, genMatches, deposits, isolationValues);
743 
744  if (computeMiniIso_)
745  setMuonMiniIso(aMuon, pc.product());
746 
747  if (addPuppiIsolation_) {
748  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonBaseRef],
749  (*PUPPIIsolation_neutral_hadrons)[muonBaseRef],
750  (*PUPPIIsolation_photons)[muonBaseRef]);
751 
752  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonBaseRef],
753  (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonBaseRef],
754  (*PUPPINoLeptonsIsolation_photons)[muonBaseRef]);
755  } else {
756  aMuon.setIsolationPUPPI(-999., -999., -999.);
757  aMuon.setIsolationPUPPINoLeptons(-999., -999., -999.);
758  }
759 
760  if (embedPfEcalEnergy_) {
761  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
762  }
763 
764  patMuons.push_back(aMuon);
765  }
766  } else {
768  iEvent.getByToken(muonToken_, muons);
769 
770  // embedding of muon MET corrections
772  //edm::ValueMap<reco::MuonMETCorrectionData> caloMETmuCorValueMap;
775  //caloMETmuCorValueMap = *caloMETmuCorValueMap_h;
776  }
778  //edm::ValueMap<reco::MuonMETCorrectionData> tcMETmuCorValueMap;
779  if (embedTcMETMuonCorrs_) {
781  //tcMETmuCorValueMap = *tcMETmuCorValueMap_h;
782  }
783 
785  // get the PFCandidates of type muons
786  iEvent.getByToken(pfMuonToken_, pfMuons);
787  }
788 
790  if (addInverseBeta_) {
791  // get MuonTimerExtra value map
792  iEvent.getByToken(muonTimeExtraToken_, muonsTimeExtra);
793  }
794 
795  for (edm::View<reco::Muon>::const_iterator itMuon = muons->begin(); itMuon != muons->end(); ++itMuon) {
796  // construct the Muon from the ref -> save ref to original object
797  unsigned int idx = itMuon - muons->begin();
798  MuonBaseRef muonRef = muons->refAt(idx);
799  reco::CandidateBaseRef muonBaseRef(muonRef);
800 
801  Muon aMuon(muonRef);
802  fillMuon(aMuon, muonRef, muonBaseRef, genMatches, deposits, isolationValues);
803  if (computeMiniIso_)
804  setMuonMiniIso(aMuon, pc.product());
805  if (addPuppiIsolation_) {
806  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonRef],
807  (*PUPPIIsolation_neutral_hadrons)[muonRef],
808  (*PUPPIIsolation_photons)[muonRef]);
809  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonRef],
810  (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonRef],
811  (*PUPPINoLeptonsIsolation_photons)[muonRef]);
812  } else {
813  aMuon.setIsolationPUPPI(-999., -999., -999.);
814  aMuon.setIsolationPUPPINoLeptons(-999., -999., -999.);
815  }
816 
817  // Isolation
818  if (isolator_.enabled()) {
819  //reco::CandidatePtr mother = ptrToMother->sourceCandidatePtr(0);
821  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
822  // better to loop backwards, so the vector is resized less times
823  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(),
824  ed = isolatorTmpStorage_.rend();
825  it != ed;
826  ++it) {
827  aMuon.setIsolation(it->first, it->second);
828  }
829  }
830 
831  // for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
832  // aMuon.setIsoDeposit(isoDepositLabels_[j].first,
833  // (*deposits[j])[muonRef]);
834  // }
835 
836  // add sel to selected
837  edm::Ptr<reco::Muon> muonsPtr = muons->ptrAt(idx);
838  if (useUserData_) {
839  userDataHelper_.add(aMuon, iEvent, iSetup);
840  }
841 
842  // embed high level selection
844  // get the tracks
845  reco::TrackRef innerTrack = itMuon->innerTrack();
846  reco::TrackRef globalTrack = itMuon->globalTrack();
847  reco::TrackRef bestTrack = itMuon->muonBestTrack();
848  reco::TrackRef chosenTrack = innerTrack;
849  // Make sure the collection it points to is there
850  if (bestTrack.isNonnull() && bestTrack.isAvailable())
851  chosenTrack = bestTrack;
852  if (chosenTrack.isNonnull() && chosenTrack.isAvailable()) {
853  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
854  aMuon.setNumberOfValidHits(nhits);
855 
856  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
857  embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
858  }
859 
860  if (globalTrack.isNonnull() && globalTrack.isAvailable()) {
861  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
862  aMuon.setNormChi2(norm_chi2);
863  }
864  }
865 
866  // embed MET muon corrections
868  aMuon.embedCaloMETMuonCorrs((*caloMETMuonCorrs)[muonRef]);
870  aMuon.embedTcMETMuonCorrs((*tcMETMuonCorrs)[muonRef]);
871 
873  if (embedPfEcalEnergy_)
874  aMuon.setPfEcalEnergy(-99.0);
875  unsigned index = 0;
876  for (const reco::PFCandidate& pfmu : *pfMuons) {
877  if (pfmu.muonRef().isNonnull()) {
878  if (pfmu.muonRef().id() != muonRef.id())
879  throw cms::Exception("Configuration")
880  << "Muon reference within PF candidates does not point to the muon collection." << std::endl;
881  if (pfmu.muonRef().key() == muonRef.key()) {
882  reco::PFCandidateRef pfRef(pfMuons, index);
883  aMuon.setPFCandidateRef(pfRef);
884  if (embedPfEcalEnergy_)
885  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
886  if (embedPFCandidate_)
887  aMuon.embedPFCandidate();
888  break;
889  }
890  }
891  index++;
892  }
893  }
894 
895  if (addInverseBeta_) {
896  aMuon.readTimeExtra((*muonsTimeExtra)[muonRef]);
897  }
898  // MC info
899  aMuon.initSimInfo();
900  if (simInfoIsAvailalbe) {
901  const auto& msi = (*simInfo)[muonBaseRef];
902  aMuon.setSimType(msi.primaryClass);
903  aMuon.setExtSimType(msi.extendedClass);
904  aMuon.setSimFlavour(msi.flavour);
905  aMuon.setSimHeaviestMotherFlavour(msi.heaviestMotherFlavour);
906  aMuon.setSimPdgId(msi.pdgId);
907  aMuon.setSimMotherPdgId(msi.motherPdgId);
908  aMuon.setSimBX(msi.tpBX);
909  aMuon.setSimTpEvent(msi.tpEvent);
910  aMuon.setSimProdRho(msi.vertex.Rho());
911  aMuon.setSimProdZ(msi.vertex.Z());
912  aMuon.setSimPt(msi.p4.pt());
913  aMuon.setSimEta(msi.p4.eta());
914  aMuon.setSimPhi(msi.p4.phi());
915  aMuon.setSimMatchQuality(msi.tpAssoQuality);
916  }
917  patMuons.push_back(aMuon);
918  }
919  }
920 
921  // sort muons in pt
922  std::sort(patMuons.begin(), patMuons.end(), [](auto const& t1, auto const& t2) { return t1.pt() > t2.pt(); });
923 
924  // Store standard muon selection decisions and jet related
925  // quantaties.
926  // Need a separate loop over muons to have all inputs properly
927  // computed and stored in the object.
929  if (computeMiniIso_)
930  iEvent.getByToken(rho_, rho);
931  const reco::Vertex* pv(nullptr);
932  if (primaryVertexIsValid)
933  pv = &primaryVertex;
934 
937  bool triggerObjectsAvailable = false;
938  bool triggerResultsAvailable = false;
939  if (addTriggerMatching_) {
940  triggerObjectsAvailable = iEvent.getByToken(triggerObjects_, triggerObjects);
941  triggerResultsAvailable = iEvent.getByToken(triggerResults_, triggerResults);
942  }
943 
944  for (auto& muon : patMuons) {
945  // trigger info
946  if (addTriggerMatching_ and triggerObjectsAvailable and triggerResultsAvailable) {
947  const edm::TriggerNames& triggerNames(iEvent.triggerNames(*triggerResults));
950  }
951 
953  muon.setSelectors(0);
954  bool isRun2016BCDEF = (272728 <= iEvent.run() && iEvent.run() <= 278808);
955  muon.setSelectors(muon::makeSelectorBitset(muon, pv, isRun2016BCDEF));
956  }
957  float miniIsoValue = -1;
958  if (computeMiniIso_) {
959  // MiniIsolation working points
960 
961  miniIsoValue = getRelMiniIsoPUCorrected(muon, *rho, effectiveAreaVec_);
962 
963  muon.setSelector(reco::Muon::MiniIsoLoose, miniIsoValue < 0.40);
964  muon.setSelector(reco::Muon::MiniIsoMedium, miniIsoValue < 0.20);
965  muon.setSelector(reco::Muon::MiniIsoTight, miniIsoValue < 0.10);
966  muon.setSelector(reco::Muon::MiniIsoVeryTight, miniIsoValue < 0.05);
967  }
968 
969  double puppiCombinedIsolationPAT = -1;
971  puppiCombinedIsolationPAT = puppiCombinedIsolation(muon, pc.product());
972  muon.setSelector(reco::Muon::PuppiIsoLoose, puppiCombinedIsolationPAT < 0.27);
973  muon.setSelector(reco::Muon::PuppiIsoMedium, puppiCombinedIsolationPAT < 0.22);
974  muon.setSelector(reco::Muon::PuppiIsoTight, puppiCombinedIsolationPAT < 0.12);
975  }
976 
977  std::array<float, 2> jetPtRatioRel = {{0.0, 0.0}};
978  if (primaryVertexIsValid && computeMiniIso_) {
979  if (useJec_) {
980  jetPtRatioRel = globalCache()->calculatePtRatioRel().computePtRatioRel(
981  muon, *(mvaBTagCollectionTag.product()), mvaL1Corrector.product(), mvaL1L2L3ResCorrector.product());
982  } else {
983  jetPtRatioRel = globalCache()->calculatePtRatioRel().computePtRatioRel(muon, *mvaBTagCollectionTag);
984  }
985 
986  muon.setJetPtRatio(jetPtRatioRel[0]);
987  muon.setJetPtRel(jetPtRatioRel[1]);
988 
989  // multi-isolation
990  if (computeMiniIso_) {
991  muon.setSelector(reco::Muon::MultiIsoMedium,
992  miniIsoValue < 0.11 && (muon.jetPtRatio() > 0.74 || muon.jetPtRel() > 6.8));
993  }
994  }
995 
996  // MVA ID
997  float mvaID = 0.0;
998  constexpr int MVAsentinelValue = -99;
999  if (computeMuonIDMVA_) {
1000  if (muon.isLooseMuon()) {
1001  mvaID = globalCache()->muonMvaIDEstimator().computeMVAID(muon)[1];
1002  } else {
1003  mvaID = MVAsentinelValue;
1004  }
1005  muon.setMvaIDValue(mvaID);
1006  muon.setSelector(reco::Muon::MvaIDwpMedium, muon.mvaIDValue() > mvaIDmediumCut_);
1007  muon.setSelector(reco::Muon::MvaIDwpTight, muon.mvaIDValue() > mvaIDtightCut_);
1008  }
1009 
1010  //SOFT MVA
1011  if (computeSoftMuonMVA_) {
1012  float mva = globalCache()->softMuonMvaEstimator().computeMva(muon);
1013  muon.setSoftMvaValue(mva);
1014  //preselection in SoftMuonMvaEstimator.cc
1015  muon.setSelector(reco::Muon::SoftMvaId, muon.softMvaValue() > 0.58); //WP choose for bmm4
1016  }
1017  }
1018 
1019  // put products in Event
1021 
1022  if (isolator_.enabled())
1023  isolator_.endEvent();
1024 }
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
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
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
Definition: TTTypes.h:54
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:541
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
bool computeMuonIDMVA_
standard muon selectors
def pv(vc)
Definition: MetAnalyzer.py:7
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
static std::string const triggerResults
Definition: EdmProvDump.cc:47
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:130
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:450
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
double mvaIDtightCut_
working points of the muon MVA ID
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 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 1133 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().

1133  {
1134  constexpr double dR_threshold = 0.4;
1135  constexpr double dR2_threshold = dR_threshold * dR_threshold;
1136  constexpr double mix_fraction = 0.5;
1137  enum particleType { CH = 0, NH = 1, PH = 2, OTHER = 100000 };
1138  double val_PuppiWithLep = 0.0;
1139  double val_PuppiWithoutLep = 0.0;
1140 
1141  for (const auto& cand : *pc) { //pat::pat::PackedCandidate loop start
1142 
1143  const particleType pType = isChargedHadron(cand.pdgId()) ? CH
1144  : isNeutralHadron(cand.pdgId()) ? NH
1145  : isPhoton(cand.pdgId()) ? PH
1146  : OTHER;
1147  if (pType == OTHER) {
1148  if (cand.pdgId() != 1 && cand.pdgId() != 2 && abs(cand.pdgId()) != 11 && abs(cand.pdgId()) != 13) {
1149  LogTrace("PATMuonProducer") << "candidate with PDGID = " << cand.pdgId()
1150  << " is not CH/NH/PH/e/mu or 1/2 (and this is removed from isolation calculation)"
1151  << std::endl;
1152  }
1153  continue;
1154  }
1155  double d_eta = std::abs(cand.eta() - muon.eta());
1156  if (d_eta > dR_threshold)
1157  continue;
1158 
1159  double d_phi = std::abs(reco::deltaPhi(cand.phi(), muon.phi()));
1160  if (d_phi > dR_threshold)
1161  continue;
1162 
1163  double dR2 = reco::deltaR2(cand, muon);
1164  if (dR2 > dR2_threshold)
1165  continue;
1166  if (pType == CH && dR2 < 0.0001 * 0.0001)
1167  continue;
1168  if (pType == NH && dR2 < 0.01 * 0.01)
1169  continue;
1170  if (pType == PH && dR2 < 0.01 * 0.01)
1171  continue;
1172  val_PuppiWithLep += cand.pt() * cand.puppiWeight();
1173  val_PuppiWithoutLep += cand.pt() * cand.puppiWeightNoLep();
1174 
1175  } //pat::pat::PackedCandidate loop end
1176 
1177  double reliso_Puppi_withLep = val_PuppiWithLep / muon.pt();
1178  double reliso_Puppi_withoutlep = val_PuppiWithoutLep / muon.pt();
1179  double reliso_Puppi_combined = mix_fraction * reliso_Puppi_withLep + (1.0 - mix_fraction) * reliso_Puppi_withoutlep;
1180  return reliso_Puppi_combined;
1181 }
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 274 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, crabTemplate::psetName, pat::TrackIso, pat::UserBaseIso, and edm::vector_transform().

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

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

Referenced by produce().

1110  {
1112  aMuon.polarP4(),
1113  miniIsoParams_[0],
1114  miniIsoParams_[1],
1115  miniIsoParams_[2],
1116  miniIsoParams_[3],
1117  miniIsoParams_[4],
1118  miniIsoParams_[5],
1119  miniIsoParams_[6],
1120  miniIsoParams_[7],
1121  miniIsoParams_[8]);
1122  aMuon.setMiniPFIsolation(miniiso);
1123 }
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 260 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 154 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeMuonIDMVA_

bool pat::PATMuonProducer::computeMuonIDMVA_
private

standard muon selectors

Definition at line 237 of file PATMuonProducer.cc.

Referenced by produce().

◆ computePuppiCombinedIso_

bool pat::PATMuonProducer::computePuppiCombinedIso_
private

Definition at line 155 of file PATMuonProducer.cc.

Referenced by produce().

◆ computeSoftMuonMVA_

bool pat::PATMuonProducer::computeSoftMuonMVA_
private

Definition at line 238 of file PATMuonProducer.cc.

Referenced by produce().

◆ effectiveAreaVec_

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

Definition at line 156 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 252 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 265 of file PATMuonProducer.cc.

Referenced by produce().

◆ hltCollectionFilters_

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

Definition at line 263 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 248 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 250 of file PATMuonProducer.cc.

Referenced by produce().

◆ miniIsoParams_

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

Definition at line 157 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 150 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaBTagCollectionTag_

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

Definition at line 241 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaIDmediumCut_

double pat::PATMuonProducer::mvaIDmediumCut_
private

Definition at line 161 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaIDtightCut_

double pat::PATMuonProducer::mvaIDtightCut_
private

working points of the muon MVA ID

Definition at line 160 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaL1Corrector_

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

Definition at line 242 of file PATMuonProducer.cc.

Referenced by produce().

◆ mvaL1L2L3ResCorrector_

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

Definition at line 243 of file PATMuonProducer.cc.

Referenced by produce().

◆ patMuonPutToken_

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

Definition at line 268 of file PATMuonProducer.cc.

Referenced by produce().

◆ pcToken_

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

Definition at line 153 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 239 of file PATMuonProducer.cc.

Referenced by produce().

◆ relMiniIsoPUCorrected_

double pat::PATMuonProducer::relMiniIsoPUCorrected_
private

Definition at line 158 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 244 of file PATMuonProducer.cc.

Referenced by produce().

◆ simInfo_

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

MC info.

Definition at line 257 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 266 of file PATMuonProducer.cc.

Referenced by produce().

◆ triggerObjects_

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

Definition at line 261 of file PATMuonProducer.cc.

Referenced by produce().

◆ triggerResults_

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

Definition at line 262 of file PATMuonProducer.cc.

Referenced by produce().

◆ useJec_

bool pat::PATMuonProducer::useJec_
private

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