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...

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

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
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

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 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 computeMuonMVA_
 standard muon selectors More...
 
bool computePuppiCombinedIso_
 
bool computeSoftMuonMVA_
 
std::vector< double > effectiveAreaVec_
 
pat::helper::EfficiencyLoader efficiencyLoader_
 helper class to add efficiencies to the muon More...
 
bool embedBestTrack_
 embed the track from best muon measurement (global pflow) More...
 
bool embedCaloMETMuonCorrs_
 embed muon MET correction info for caloMET into the muon More...
 
bool embedCombinedMuon_
 embed track of the combined fit into the muon More...
 
bool embedDytMuon_
 embed track from DYT muon fit into the muon More...
 
bool embedGenMatch_
 embed the gen match information into the muon More...
 
bool embedHighLevelSelection_
 embed high level selection variables More...
 
bool embedPFCandidate_
 embed pfCandidates into the muon More...
 
bool embedPfEcalEnergy_
 add ecal PF energy More...
 
bool embedPickyMuon_
 embed track from picky muon fit into the muon More...
 
bool embedStandAloneMuon_
 embed track from muon system into the muon More...
 
bool embedTcMETMuonCorrs_
 embed muon MET correction info for tcMET into the muon More...
 
bool embedTpfmsMuon_
 embed track from tpfms muon fit into the muon More...
 
bool embedTrack_
 embed the track from inner tracker into the muon More...
 
bool embedTunePBestTrack_
 embed the track from best muon measurement (muon only) More...
 
bool forceEmbedBestTrack_
 force separate embed of the best track even if already embedded More...
 
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
 input tags for generator match information More...
 
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_
 helper class to add userdefined isolation values to the muon More...
 
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::View< reco::Muon > > muonToken_
 input source More...
 
edm::EDGetTokenT< reco::JetTagCollectionmvaBTagCollectionTag_
 
edm::EDGetTokenT< reco::JetCorrectormvaL1Corrector_
 
edm::EDGetTokenT< reco::JetCorrectormvaL1L2L3ResCorrector_
 
bool mvaUseJec_
 
edm::EDGetTokenT< pat::PackedCandidateCollectionpcToken_
 
edm::EDGetTokenT< reco::PFCandidateCollectionpfMuonToken_
 input source pfCandidates that will be to be transformed into pat::Muons, when using PF2PAT More...
 
GreaterByPt< MuonpTComparator_
 
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...
 
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > triggerObjects_
 
edm::EDGetTokenT< edm::TriggerResultstriggerResults_
 
bool useParticleFlow_
 switch to use particle flow (PF2PAT) or not More...
 
pat::PATUserDataHelper< pat::MuonuserDataHelper_
 helper class to add userData to the muon More...
 
bool useUserData_
 add user data to the muon (this will be data members of th muon even w/o embedding) More...
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< PATMuonHeavyObjectCache > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

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 70 of file PATMuonProducer.h.

Member Typedef Documentation

Definition at line 92 of file PATMuonProducer.h.

Definition at line 93 of file PATMuonProducer.h.

Definition at line 95 of file PATMuonProducer.h.

Definition at line 96 of file PATMuonProducer.h.

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

Definition at line 94 of file PATMuonProducer.h.

typedefs for convenience

Definition at line 91 of file PATMuonProducer.h.

Constructor & Destructor Documentation

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

default constructir

Definition at line 77 of file PATMuonProducer.cc.

References addEfficiencies_, addGenMatch_, addPuppiIsolation_, addResolutions_, addTriggerMatching_, beamLineToken_, caloMETMuonCorrsToken_, computeMiniIso_, computeMuonMVA_, computePuppiCombinedIso_, computeSoftMuonMVA_, effectiveAreaVec_, efficiencyLoader_, embedBestTrack_, embedCaloMETMuonCorrs_, embedCombinedMuon_, embedDytMuon_, embedGenMatch_, embedHighLevelSelection_, embedPFCandidate_, embedPfEcalEnergy_, embedPickyMuon_, embedStandAloneMuon_, embedTcMETMuonCorrs_, embedTpfmsMuon_, embedTrack_, embedTunePBestTrack_, Exception, edm::ParameterSet::existsAs(), forceEmbedBestTrack_, genMatchTokens_, edm::ParameterSet::getParameter(), hltCollectionFilters_, isoDepositLabels_, isoDepositTokens_, isolationValueLabels_, isolationValueTokens_, miniIsoParams_, muonToken_, mvaBTagCollectionTag_, mvaL1Corrector_, mvaL1L2L3ResCorrector_, mvaUseJec_, pcToken_, pfMuonToken_, PUPPIIsolation_charged_hadrons_, PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_, PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_photons_, pvToken_, readIsolationLabels(), recomputeBasicSelectors_, resolutionLoader_, rho_, simInfo_, GlobalPosition_Frontier_DevDB_cff::tag, tcMETMuonCorrsToken_, triggerObjects_, triggerResults_, useParticleFlow_, userDataHelper_, useUserData_, and edm::vector_transform().

77  :
79  useUserData_(iConfig.exists("userData")),
80  computeMuonMVA_(false),
81  computeSoftMuonMVA_(false),
83  mvaUseJec_(false),
84  isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter<edm::ParameterSet>("userIsolation") : edm::ParameterSet(), consumesCollector(), false)
85 {
86  // input source
87  muonToken_ = consumes<edm::View<reco::Muon> >(iConfig.getParameter<edm::InputTag>( "muonSource" ));
88  // embedding of tracks
89  embedBestTrack_ = iConfig.getParameter<bool>( "embedMuonBestTrack" );
90  embedTunePBestTrack_ = iConfig.getParameter<bool>( "embedTunePMuonBestTrack" );
91  forceEmbedBestTrack_ = iConfig.getParameter<bool>( "forceBestTrackEmbedding" );
92  embedTrack_ = iConfig.getParameter<bool>( "embedTrack" );
93  embedCombinedMuon_ = iConfig.getParameter<bool>( "embedCombinedMuon" );
94  embedStandAloneMuon_ = iConfig.getParameter<bool>( "embedStandAloneMuon" );
95  // embedding of muon MET correction information
96  embedCaloMETMuonCorrs_ = iConfig.getParameter<bool>("embedCaloMETMuonCorrs" );
97  embedTcMETMuonCorrs_ = iConfig.getParameter<bool>("embedTcMETMuonCorrs" );
98  caloMETMuonCorrsToken_ = mayConsume<edm::ValueMap<reco::MuonMETCorrectionData> >(iConfig.getParameter<edm::InputTag>("caloMETMuonCorrs" ));
99  tcMETMuonCorrsToken_ = mayConsume<edm::ValueMap<reco::MuonMETCorrectionData> >(iConfig.getParameter<edm::InputTag>("tcMETMuonCorrs" ));
100  // pflow specific configurables
101  useParticleFlow_ = iConfig.getParameter<bool>( "useParticleFlow" );
102  embedPFCandidate_ = iConfig.getParameter<bool>( "embedPFCandidate" );
103  pfMuonToken_ = mayConsume<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>( "pfMuonSource" ));
104  embedPfEcalEnergy_ = iConfig.getParameter<bool>( "embedPfEcalEnergy" );
105  // embedding of tracks from TeV refit
106  embedPickyMuon_ = iConfig.getParameter<bool>( "embedPickyMuon" );
107  embedTpfmsMuon_ = iConfig.getParameter<bool>( "embedTpfmsMuon" );
108  embedDytMuon_ = iConfig.getParameter<bool>( "embedDytMuon" );
109  // Monte Carlo matching
110  addGenMatch_ = iConfig.getParameter<bool>( "addGenMatch" );
111  if (addGenMatch_) {
112  embedGenMatch_ = iConfig.getParameter<bool>( "embedGenMatch" );
113  if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
114  genMatchTokens_.push_back(consumes<edm::Association<reco::GenParticleCollection> >(iConfig.getParameter<edm::InputTag>( "genParticleMatch" )));
115  }
116  else {
117  genMatchTokens_ = edm::vector_transform(iConfig.getParameter<std::vector<edm::InputTag> >( "genParticleMatch" ), [this](edm::InputTag const & tag){return consumes<edm::Association<reco::GenParticleCollection> >(tag);});
118  }
119  }
120  // efficiencies
121  addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
122  if(addEfficiencies_){
123  efficiencyLoader_ = pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"), consumesCollector());
124  }
125  // resolutions
126  addResolutions_ = iConfig.getParameter<bool>("addResolutions");
127  if (addResolutions_) {
129  }
130  // puppi
131  addPuppiIsolation_ = iConfig.getParameter<bool>("addPuppiIsolation");
132  if(addPuppiIsolation_){
133  PUPPIIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationChargedHadrons"));
134  PUPPIIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationNeutralHadrons"));
135  PUPPIIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiIsolationPhotons"));
136  //puppiNoLeptons
137  PUPPINoLeptonsIsolation_charged_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons"));
138  PUPPINoLeptonsIsolation_neutral_hadrons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons"));
139  PUPPINoLeptonsIsolation_photons_ = consumes<edm::ValueMap<float> >(iConfig.getParameter<edm::InputTag>("puppiNoLeptonsIsolationPhotons"));
140  }
141  // read isoDeposit labels, for direct embedding
142  readIsolationLabels(iConfig, "isoDeposits", isoDepositLabels_, isoDepositTokens_);
143  // read isolation value labels, for direct embedding
145  // check to see if the user wants to add user data
146  if( useUserData_ ){
147  userDataHelper_ = PATUserDataHelper<Muon>(iConfig.getParameter<edm::ParameterSet>("userData"), consumesCollector());
148  }
149  // embed high level selection variables
150  embedHighLevelSelection_ = iConfig.getParameter<bool>("embedHighLevelSelection");
151  if ( embedHighLevelSelection_ ) {
152  beamLineToken_ = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamLineSrc"));
153  pvToken_ = consumes<std::vector<reco::Vertex> >(iConfig.getParameter<edm::InputTag>("pvSrc"));
154  }
155 
156  //for mini-isolation calculation
157  computeMiniIso_ = iConfig.getParameter<bool>("computeMiniIso");
158 
159  computePuppiCombinedIso_ = iConfig.getParameter<bool>("computePuppiCombinedIso");
160 
161  effectiveAreaVec_ = iConfig.getParameter<std::vector<double> >("effectiveAreaVec");
162 
163  miniIsoParams_ = iConfig.getParameter<std::vector<double> >("miniIsoParams");
164  if(computeMiniIso_ && miniIsoParams_.size() != 9){
165  throw cms::Exception("ParameterError") << "miniIsoParams must have exactly 9 elements.\n";
166  }
167  if(computeMiniIso_ || computePuppiCombinedIso_)
168  pcToken_ = consumes<pat::PackedCandidateCollection >(iConfig.getParameter<edm::InputTag>("pfCandsForMiniIso"));
169 
170  // standard selectors
171  recomputeBasicSelectors_ = iConfig.getParameter<bool>("recomputeBasicSelectors");
172  computeMuonMVA_ = iConfig.getParameter<bool>("computeMuonMVA");
173  if (computeMuonMVA_ and not computeMiniIso_)
174  throw cms::Exception("ConfigurationError") << "MiniIso is needed for Muon MVA calculation.\n";
175 
176  if (computeMuonMVA_) {
177  // pfCombinedInclusiveSecondaryVertexV2BJetTags
178  mvaBTagCollectionTag_ = consumes<reco::JetTagCollection>(iConfig.getParameter<edm::InputTag>("mvaJetTag"));
179  mvaL1Corrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1Corrector"));
180  mvaL1L2L3ResCorrector_ = consumes<reco::JetCorrector>(iConfig.getParameter<edm::InputTag>("mvaL1L2L3ResCorrector"));
181  rho_ = consumes<double>(iConfig.getParameter<edm::InputTag>("rho"));
182  mvaUseJec_ = iConfig.getParameter<bool>("mvaUseJec");
183  }
184 
185  computeSoftMuonMVA_ = iConfig.getParameter<bool>("computeSoftMuonMVA");
186 
187  // MC info
188  simInfo_ = consumes<edm::ValueMap<reco::MuonSimInfo> >(iConfig.getParameter<edm::InputTag>("muonSimInfo"));
189 
190  addTriggerMatching_ = iConfig.getParameter<bool>("addTriggerMatching");
191  if ( addTriggerMatching_ ){
192  triggerObjects_ = consumes<std::vector<pat::TriggerObjectStandAlone>>(iConfig.getParameter<edm::InputTag>("triggerObjects"));
193  triggerResults_ = consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("triggerResults"));
194  }
195  hltCollectionFilters_ = iConfig.getParameter<std::vector<std::string>>("hltCollectionFilters");
196 
197  // produces vector of muons
198  produces<std::vector<Muon> >();
199 }
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) ...
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
T getParameter(std::string const &) const
Assists in assimilating all pat::UserData into pat objects.
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
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:161
edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
input source of the primary vertex
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
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
MC info.
bool exists(std::string const &parameterName) const
checks if a parameter exists
bool addTriggerMatching_
Trigger.
bool embedBestTrack_
embed the track from best muon measurement (global pflow)
edm::EDGetTokenT< reco::JetCorrector > mvaL1Corrector_
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_
std::vector< double > miniIsoParams_
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_
helper class to add userdefined isolation values to the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
input source of the primary vertex/beamspot
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
bool embedPfEcalEnergy_
add ecal PF energy
std::vector< std::string > hltCollectionFilters_
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
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
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
edm::EDGetTokenT< reco::JetCorrector > mvaL1L2L3ResCorrector_
pat::helper::EfficiencyLoader efficiencyLoader_
helper class to add efficiencies to the muon
bool embedPickyMuon_
embed track from picky muon fit into the muon
bool embedDytMuon_
embed track from DYT muon fit into the muon
edm::EDGetTokenT< std::vector< pat::TriggerObjectStandAlone > > triggerObjects_
bool embedGenMatch_
embed the gen match information into the muon
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
IsolationLabels isoDepositLabels_
input source for isoDeposits
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
input tags for generator match information
IsolationLabels isolationValueLabels_
input source isolation value maps
bool forceEmbedBestTrack_
force separate embed of the best track even if already embedded
bool embedPFCandidate_
embed pfCandidates into the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
bool computeMuonMVA_
standard muon selectors
bool embedCombinedMuon_
embed track of the combined fit into the muon
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
bool embedHighLevelSelection_
embed high level selection variables
PATMuonProducer::~PATMuonProducer ( )
override

default destructur

Definition at line 202 of file PATMuonProducer.cc.

203 {
204 }

Member Function Documentation

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

References pat::Muon::BS2D, pat::Muon::BS3D, DEFINE_FWK_MODULE, reco::BeamSpot::position(), reco::Vertex::position(), pat::Muon::PV2D, pat::Muon::PV3D, pat::Muon::PVDZ, mps_fire::result, reco::BeamSpot::rotatedCovariance3D(), pat::Muon::setDB(), IPTools::signedImpactParameter3D(), IPTools::signedTransverseImpactParameter(), and reco::Vertex::zError().

Referenced by produce().

1055 {
1056  // Correct to PV
1057 
1058  // PV2D
1059  std::pair<bool,Measurement1D> result =
1061  GlobalVector(track->px(),
1062  track->py(),
1063  track->pz()),
1064  primaryVertex);
1065  double d0_corr = result.second.value();
1066  double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1067  aMuon.setDB( d0_corr, d0_err, pat::Muon::PV2D);
1068 
1069 
1070  // PV3D
1071  result =
1073  GlobalVector(track->px(),
1074  track->py(),
1075  track->pz()),
1076  primaryVertex);
1077  d0_corr = result.second.value();
1078  d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1079  aMuon.setDB( d0_corr, d0_err, pat::Muon::PV3D);
1080 
1081 
1082  // Correct to beam spot
1083  // make a fake vertex out of beam spot
1084  reco::Vertex vBeamspot(beamspot.position(), beamspot.rotatedCovariance3D());
1085 
1086  // BS2D
1087  result =
1089  GlobalVector(track->px(),
1090  track->py(),
1091  track->pz()),
1092  vBeamspot);
1093  d0_corr = result.second.value();
1094  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1095  aMuon.setDB( d0_corr, d0_err, pat::Muon::BS2D);
1096 
1097  // BS3D
1098  result =
1100  GlobalVector(track->px(),
1101  track->py(),
1102  track->pz()),
1103  vBeamspot);
1104  d0_corr = result.second.value();
1105  d0_err = beamspotIsValid ? result.second.error() : -1.0;
1106  aMuon.setDB( d0_corr, d0_err, pat::Muon::BS3D);
1107 
1108 
1109  // PVDZ
1110  aMuon.setDB( track->dz(primaryVertex.position()), std::hypot(track->dzError(), primaryVertex.zError()), pat::Muon::PVDZ );
1111 }
double zError() const
error on z
Definition: Vertex.h:123
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
const Point & position() const
position
Definition: Vertex.h:109
void setDB(double dB, double edB, IPTYPE type=PV2D)
Definition: Muon.h:244
const Point & position() const
position
Definition: BeamSpot.h:62
Covariance3DMatrix rotatedCovariance3D() const
Definition: BeamSpot.cc:78
Global3DVector GlobalVector
Definition: GlobalVector.h:10
void PATMuonProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

description of config file parameters

Definition at line 931 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(), or, edm::ParameterSetDescription::setAllowAnything(), edm::ParameterSetDescription::setComment(), and edm::ParameterDescriptionNode::setComment().

932 {
934  iDesc.setComment("PAT muon producer module");
935 
936  // input source
937  iDesc.add<edm::InputTag>("muonSource", edm::InputTag("no default"))->setComment("input collection");
938 
939  // embedding
940  iDesc.add<bool>("embedMuonBestTrack", true)->setComment("embed muon best track (global pflow)");
941  iDesc.add<bool>("embedTunePMuonBestTrack", true)->setComment("embed muon best track (muon only)");
942  iDesc.add<bool>("forceBestTrackEmbedding", true)->setComment("force embedding separately the best tracks even if they're already embedded e.g. as tracker or global tracks");
943  iDesc.add<bool>("embedTrack", true)->setComment("embed external track");
944  iDesc.add<bool>("embedStandAloneMuon", true)->setComment("embed external stand-alone muon");
945  iDesc.add<bool>("embedCombinedMuon", false)->setComment("embed external combined muon");
946  iDesc.add<bool>("embedPickyMuon", false)->setComment("embed external picky track");
947  iDesc.add<bool>("embedTpfmsMuon", false)->setComment("embed external tpfms track");
948  iDesc.add<bool>("embedDytMuon", false)->setComment("embed external dyt track ");
949 
950  // embedding of MET muon corrections
951  iDesc.add<bool>("embedCaloMETMuonCorrs", true)->setComment("whether to add MET muon correction for caloMET or not");
952  iDesc.add<edm::InputTag>("caloMETMuonCorrs", edm::InputTag("muonMETValueMapProducer" , "muCorrData"))->setComment("source of MET muon corrections for caloMET");
953  iDesc.add<bool>("embedTcMETMuonCorrs", true)->setComment("whether to add MET muon correction for tcMET or not");
954  iDesc.add<edm::InputTag>("tcMETMuonCorrs", edm::InputTag("muonTCMETValueMapProducer" , "muCorrData"))->setComment("source of MET muon corrections for tcMET");
955 
956  // pf specific parameters
957  iDesc.add<edm::InputTag>("pfMuonSource", edm::InputTag("pfMuons"))->setComment("particle flow input collection");
958  iDesc.add<bool>("useParticleFlow", false)->setComment("whether to use particle flow or not");
959  iDesc.add<bool>("embedPFCandidate", false)->setComment("embed external particle flow object");
960  iDesc.add<bool>("embedPfEcalEnergy", true)->setComment("add ecal energy as reconstructed by PF");
961 
962  // MC matching configurables
963  iDesc.add<bool>("addGenMatch", true)->setComment("add MC matching");
964  iDesc.add<bool>("embedGenMatch", false)->setComment("embed MC matched MC information");
965  std::vector<edm::InputTag> emptySourceVector;
966  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("genParticleMatch", edm::InputTag(), true) xor
967  edm::ParameterDescription<std::vector<edm::InputTag> >("genParticleMatch", emptySourceVector, true)
968  )->setComment("input with MC match information");
969 
970  // mini-iso
971  iDesc.add<bool>("computeMiniIso", false)->setComment("whether or not to compute and store electron mini-isolation");
972  iDesc.add<bool>("computePuppiCombinedIso",false)->setComment("whether or not to compute and store puppi combined isolation");
973 
974  iDesc.add<edm::InputTag>("pfCandsForMiniIso", edm::InputTag("packedPFCandidates"))->setComment("collection to use to compute mini-iso");
975  iDesc.add<std::vector<double> >("miniIsoParams", std::vector<double>())->setComment("mini-iso parameters to use for muons");
976 
977  iDesc.add<bool>("addTriggerMatching", false)->setComment("add L1 and HLT matching to offline muon");
978 
980 
981  // IsoDeposit configurables
982  edm::ParameterSetDescription isoDepositsPSet;
983  isoDepositsPSet.addOptional<edm::InputTag>("tracker");
984  isoDepositsPSet.addOptional<edm::InputTag>("ecal");
985  isoDepositsPSet.addOptional<edm::InputTag>("hcal");
986  isoDepositsPSet.addOptional<edm::InputTag>("particle");
987  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedHadrons");
988  isoDepositsPSet.addOptional<edm::InputTag>("pfChargedAll");
989  isoDepositsPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
990  isoDepositsPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
991  isoDepositsPSet.addOptional<edm::InputTag>("pfPhotons");
992  isoDepositsPSet.addOptional<std::vector<edm::InputTag> >("user");
993  iDesc.addOptional("isoDeposits", isoDepositsPSet);
994 
995  // isolation values configurables
996  edm::ParameterSetDescription isolationValuesPSet;
997  isolationValuesPSet.addOptional<edm::InputTag>("tracker");
998  isolationValuesPSet.addOptional<edm::InputTag>("ecal");
999  isolationValuesPSet.addOptional<edm::InputTag>("hcal");
1000  isolationValuesPSet.addOptional<edm::InputTag>("particle");
1001  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedHadrons");
1002  isolationValuesPSet.addOptional<edm::InputTag>("pfChargedAll");
1003  isolationValuesPSet.addOptional<edm::InputTag>("pfPUChargedHadrons");
1004  isolationValuesPSet.addOptional<edm::InputTag>("pfNeutralHadrons");
1005  isolationValuesPSet.addOptional<edm::InputTag>("pfPhotons");
1006  iDesc.addOptional("isolationValues", isolationValuesPSet);
1007 
1008  iDesc.ifValue(edm::ParameterDescription<bool>("addPuppiIsolation", false, true),
1009  true >> (edm::ParameterDescription<edm::InputTag>("puppiIsolationChargedHadrons", edm::InputTag("muonPUPPIIsolation","h+-DR030-ThresholdVeto000-ConeVeto000"), true) and
1010  edm::ParameterDescription<edm::InputTag>("puppiIsolationNeutralHadrons", edm::InputTag("muonPUPPIIsolation","h0-DR030-ThresholdVeto000-ConeVeto001"), true) and
1011  edm::ParameterDescription<edm::InputTag>("puppiIsolationPhotons", edm::InputTag("muonPUPPIIsolation","gamma-DR030-ThresholdVeto000-ConeVeto001"), true) and
1012  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationChargedHadrons", edm::InputTag("muonPUPPINoLeptonsIsolation","h+-DR030-ThresholdVeto000-ConeVeto000"), true) and
1013  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationNeutralHadrons", edm::InputTag("muonPUPPINoLeptonsIsolation","h0-DR030-ThresholdVeto000-ConeVeto001"), true) and
1014  edm::ParameterDescription<edm::InputTag>("puppiNoLeptonsIsolationPhotons", edm::InputTag("muonPUPPINoLeptonsIsolation","gamma-DR030-ThresholdVeto000-ConeVeto001"), true)) or
1015  false >> edm::EmptyGroupDescription());
1016 
1017  // Efficiency configurables
1018  edm::ParameterSetDescription efficienciesPSet;
1019  efficienciesPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1020  iDesc.add("efficiencies", efficienciesPSet);
1021  iDesc.add<bool>("addEfficiencies", false);
1022 
1023  // Check to see if the user wants to add user data
1024  edm::ParameterSetDescription userDataPSet;
1026  iDesc.addOptional("userData", userDataPSet);
1027 
1028  edm::ParameterSetDescription isolationPSet;
1029  isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description.
1030  iDesc.add("userIsolation", isolationPSet);
1031 
1032  iDesc.add<bool>("embedHighLevelSelection", true)->setComment("embed high level selection");
1033  edm::ParameterSetDescription highLevelPSet;
1034  highLevelPSet.setAllowAnything();
1035  iDesc.addNode( edm::ParameterDescription<edm::InputTag>("beamLineSrc", edm::InputTag(), true)
1036  )->setComment("input with high level selection");
1038  )->setComment("input with high level selection");
1039 
1040  //descriptions.add("PATMuonProducer", iDesc);
1041 }
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.
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 266 of file PATMuonProducer.cc.

References pat::PATObject< ObjectType >::addTriggerObjectMatch(), boostedElectronIsolation_cff::deltaR, metsig::muon, dataset::name, hgcalPlots::obj, trigger::TriggerMuon, TriggerAnalyzer::triggerObjects, and pat::TriggerObjectStandAlone::unpackPathNames().

Referenced by produce().

270 {
271  // WARNING: in a case of close-by muons the dR matching may select both muons.
272  // It's better to select the best match for a given collection.
273  for (const auto& triggerObject: *triggerObjects){
274  if (triggerObject.hasTriggerObjectType(trigger::TriggerMuon)){
275  bool keepIt = false;
276  for (const auto& name: collection_filter_names){
277  if (triggerObject.hasCollection(name)){
278  keepIt = true;
279  break;
280  }
281  }
282  if (not keepIt) continue;
283  if ( deltaR(triggerObject.p4(),muon)>0.1 ) continue;
284  pat::TriggerObjectStandAlone obj(triggerObject);
285  obj.unpackPathNames(names);
287  }
288  }
289 }
void addTriggerObjectMatch(const TriggerObjectStandAlone &trigObj)
add a trigger match
Definition: PATObject.h:204
Analysis-level trigger object class (stand-alone)
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 220 of file PATMuonProducer.cc.

References funct::abs(), pat::PATObject< ObjectType >::addTriggerObjectMatch(), MuonSubdetId::CSC, hiPixelPairStep_cff::deltaPhi, boostedElectronIsolation_cff::deltaR, MuonSubdetId::DT, getMuonDirection(), reco::Muon::matches(), hgcalPlots::obj, trigger::TriggerL1Mu, TriggerAnalyzer::triggerObjects, and pat::TriggerObjectStandAlone::unpackPathNames().

Referenced by produce().

224 {
225  // L1 trigger object parameters are defined at MB2/ME2. Use the muon
226  // chamber matching information to get the local direction of the
227  // muon trajectory and convert it to a global direction to match the
228  // trigger objects
229 
230  std::optional<GlobalPoint> muonPosition;
231  // Loop over chambers
232  // initialize muonPosition with any available match, just in case
233  // the second station is missing - it's better folling back to
234  // dR matching at IP
235  for ( const auto& chamberMatch: aMuon.matches() ) {
236  if ( chamberMatch.id.subdetId() == MuonSubdetId::DT) {
237  DTChamberId detId(chamberMatch.id.rawId());
238  if (abs(detId.station())>3) continue;
239  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
240  if (abs(detId.station())==2) break;
241  }
242  if ( chamberMatch.id.subdetId() == MuonSubdetId::CSC) {
243  CSCDetId detId(chamberMatch.id.rawId());
244  if (abs(detId.station())>3) continue;
245  muonPosition = getMuonDirection(chamberMatch, geometry, detId);
246  if (abs(detId.station())==2) break;
247  }
248  }
249  if (not muonPosition) return;
250  for (const auto& triggerObject: *triggerObjects){
251  if (triggerObject.hasTriggerObjectType(trigger::TriggerL1Mu)){
252  if (fabs(triggerObject.eta())<0.001){
253  // L1 is defined in X-Y plain
254  if (deltaPhi(triggerObject.phi(),muonPosition->phi())>0.1) continue;
255  } else {
256  // 3D L1
257  if (deltaR(triggerObject.p4(),*muonPosition)>0.15) continue;
258  }
259  pat::TriggerObjectStandAlone obj(triggerObject);
260  obj.unpackPathNames(names);
261  aMuon.addTriggerObjectMatch(obj);
262  }
263  }
264 }
enum start value shifted to 81 so as to avoid clashes with PDG codes
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static constexpr int DT
Definition: MuonSubdetId.h:12
static constexpr int CSC
Definition: MuonSubdetId.h:13
std::optional< GlobalPoint > getMuonDirection(const reco::MuonChamberMatch &chamberMatch, const edm::ESHandle< GlobalTrackingGeometry > &geometry, const DetId &chamberId)
Analysis-level trigger object class (stand-alone)
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 773 of file PATMuonProducer.cc.

References addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), edm::contains(), 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(), plotBeamSpotDB::first, forceEmbedBestTrack_, mps_fire::i, edm::RefToBase< T >::id(), reco::Muon::isAValidMuonTrack(), reco::Muon::isGlobalMuon(), isoDepositLabels_, isolationValueLabels_, gen::n, 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().

774 {
775  // in the particle flow algorithm,
776  // the muon momentum is recomputed.
777  // the new value is stored as the momentum of the
778  // resulting PFCandidate of type Muon, and choosen
779  // as the pat::Muon momentum
780  if (useParticleFlow_)
781  aMuon.setP4( aMuon.pfCandidateRef()->p4() );
782  if (embedTrack_) aMuon.embedTrack();
785 
786  // embed the TeV refit track refs (only available for globalMuons)
787  if (aMuon.isGlobalMuon()) {
789  aMuon.embedPickyMuon();
791  aMuon.embedTpfmsMuon();
793  aMuon.embedDytMuon();
794  }
795 
796  // embed best tracks (at the end, so unless forceEmbedBestTrack_ is true we can save some space not embedding them twice)
799 
800  // store the match to the generated final state muons
801  if (addGenMatch_) {
802  for(size_t i = 0, n = genMatches.size(); i < n; ++i) {
803  reco::GenParticleRef genMuon = (*genMatches[i])[baseRef];
804  aMuon.addGenParticleRef(genMuon);
805  }
806  if (embedGenMatch_) aMuon.embedGenParticle();
807  }
808  if (efficiencyLoader_.enabled()) {
809  efficiencyLoader_.setEfficiencies( aMuon, muonRef );
810  }
811 
812  for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
813  if(useParticleFlow_) {
814  if (deposits[j]->contains(baseRef.id())) {
815  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[baseRef]);
816  } else if (deposits[j]->contains(muonRef.id())){
817  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
818  } else {
819  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
820  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[source]);
821  }
822  }
823  else{
824  aMuon.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[muonRef]);
825  }
826  }
827 
828  for (size_t j = 0; j<isolationValues.size(); ++j) {
829  if(useParticleFlow_) {
830  if (isolationValues[j]->contains(baseRef.id())) {
831  aMuon.setIsolation(isolationValueLabels_[j].first, (*isolationValues[j])[baseRef]);
832  } else if (isolationValues[j]->contains(muonRef.id())) {
833  aMuon.setIsolation(isolationValueLabels_[j].first, (*isolationValues[j])[muonRef]);
834  } else {
835  reco::CandidatePtr source = aMuon.pfCandidateRef()->sourceCandidatePtr(0);
836  aMuon.setIsolation(isolationValueLabels_[j].first, (*isolationValues[j])[source]);
837  }
838  }
839  else{
840  aMuon.setIsolation(isolationValueLabels_[j].first, (*isolationValues[j])[muonRef]);
841  }
842  }
843 
844  if (resolutionLoader_.enabled()) {
846  }
847 }
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:99
bool contains(EventRange const &lh, EventID const &rh)
Definition: EventRange.cc:38
void embedCombinedMuon()
set reference to Track reconstructed in both tracked and muon detector (reimplemented from reco::Muon...
void embedTunePMuonBestTrack(bool force=false)
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.
ProductID id() const
Definition: RefToBase.h:242
void embedStandAloneMuon()
set reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
void setIsoDeposit(IsolationKeys key, const IsoDeposit &dep)
Sets the IsoDeposit associated with some key; if it is already existent, it is overwritten.
Definition: Lepton.h:176
void 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
bool isGlobalMuon() const override
Definition: Muon.h:291
void embedGenParticle()
Definition: PATObject.h:694
reco::PFCandidateRef pfCandidateRef() const
bool isAValidMuonTrack(const MuonTrackType &type) const
void addGenParticleRef(const reco::GenParticleRef &ref)
Definition: PATObject.h:678
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
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
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:47
void setP4(const LorentzVector &p4) final
set 4-momentum
std::optional< GlobalPoint > PATMuonProducer::getMuonDirection ( const reco::MuonChamberMatch chamberMatch,
const edm::ESHandle< GlobalTrackingGeometry > &  geometry,
const DetId chamberId 
)
private

Definition at line 206 of file PATMuonProducer.cc.

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

Referenced by fillL1TriggerInfo().

209 {
210  const GeomDet* chamberGeometry = geometry->idToDet( chamberId );
211  if (chamberGeometry){
212  LocalPoint localPosition(chamberMatch.x, chamberMatch.y, 0);
213  return std::optional<GlobalPoint>(std::in_place, chamberGeometry->toGlobal(localPosition));
214  }
215  return std::optional<GlobalPoint>();
216 
217 }
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:54
const GeomDet * idToDet(DetId) const override
double PATMuonProducer::getRelMiniIsoPUCorrected ( const pat::Muon muon,
double  rho,
const std::vector< double > &  area 
)
private

Definition at line 858 of file PATMuonProducer.cc.

References jets_cff::area, MTVHistoProducerAlgoForTrackerBlock_cfi::maxdr, MTVHistoProducerAlgoForTrackerBlock_cfi::mindr, pat::miniIsoDr(), miniIsoParams_, pat::Lepton< LeptonType >::miniPFIsolation(), pat::muonRelMiniIsoPUCorrected(), and reco::LeafCandidate::p4().

Referenced by produce().

859 {
860  double mindr(miniIsoParams_[0]);
861  double maxdr(miniIsoParams_[1]);
862  double kt_scale(miniIsoParams_[2]);
863  double drcut = pat::miniIsoDr(muon.p4(),mindr,maxdr,kt_scale);
864  return pat::muonRelMiniIsoPUCorrected(muon.miniPFIsolation(), muon.p4(), drcut, rho, area);
865 }
std::vector< double > miniIsoParams_
const PFIsolation & miniPFIsolation() const
Definition: Lepton.h:196
double muonRelMiniIsoPUCorrected(const PFIsolation &iso, const math::XYZTLorentzVector &p4, double dr, double rho, const std::vector< double > &area)
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
float miniIsoDr(const math::XYZTLorentzVector &p4, float mindr, float maxdr, float kt_scale)
static void pat::PATMuonProducer::globalEndJob ( PATMuonHeavyObjectCache )
inlinestatic

Definition at line 82 of file PATMuonProducer.h.

References fillDescriptions(), and iEvent.

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

Definition at line 78 of file PATMuonProducer.h.

78  {
79  return std::make_unique<PATMuonHeavyObjectCache>(iConfig);
80  }
bool PATMuonProducer::isChargedHadron ( long  pdgid)
private

Definition at line 922 of file PATMuonProducer.cc.

References funct::abs().

Referenced by puppiCombinedIsolation().

922  {
923  return std::abs(pdgid) == 211;
924 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool PATMuonProducer::isNeutralHadron ( long  pdgid)
private

Definition at line 918 of file PATMuonProducer.cc.

References funct::abs().

Referenced by puppiCombinedIsolation().

918  {
919  return std::abs(pdgid) == 130;
920 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool PATMuonProducer::isPhoton ( long  pdgid)
private

Definition at line 926 of file PATMuonProducer.cc.

Referenced by puppiCombinedIsolation().

926  {
927  return pdgid==22;
928 }
void PATMuonProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

everything that needs to be done during the event loop

Definition at line 292 of file PATMuonProducer.cc.

References addGenMatch_, addPuppiIsolation_, addTriggerMatching_, beamLineToken_, ecalDrivenElectronSeedsParameters_cff::beamSpot, pat::helper::MultiIsolator::beginEvent(), TransientTrackBuilder::build(), muonProducer_cfi::caloMETMuonCorrs, caloMETMuonCorrsToken_, computeMiniIso_, computeMuonMVA_, computePuppiCombinedIso_, computeSoftMuonMVA_, CandIsolatorFromDeposits_cfi::deposits, PVValHelper::dz, reco::PFCandidate::ecalEnergy(), effectiveAreaVec_, efficiencyLoader_, pat::Muon::embedCaloMETMuonCorrs(), embedCaloMETMuonCorrs_, embedCombinedMuon_, embedGenMatch_, embedHighLevel(), embedHighLevelSelection_, pat::Muon::embedPFCandidate(), embedPFCandidate_, embedPfEcalEnergy_, pat::Muon::embedTcMETMuonCorrs(), embedTcMETMuonCorrs_, pat::helper::EfficiencyLoader::enabled(), pat::helper::KinResolutionsLoader::enabled(), pat::helper::MultiIsolator::enabled(), pat::helper::MultiIsolator::endEvent(), pat::helper::MultiIsolator::fill(), fillHltTriggerInfo(), fillL1TriggerInfo(), fillMuon(), genMatchTokens_, geometry, edm::EventSetup::get(), edm::Event::getByToken(), getRelMiniIsoPUCorrected(), cutBasedMuonId_MuonPOG_V0_cff::globalTrack, hltCollectionFilters_, mps_fire::i, training_settings::idx, pat::Muon::initSimInfo(), susybsm::HSCParticleType::innerTrack, edm::Ref< C, T, F >::isAvailable(), edm::Ref< C, T, F >::isNonnull(), isoDepositTokens_, electronProducer_cff::isolationValues, isolationValueTokens_, isolator_, isolatorTmpStorage_, edm::EventBase::isRealData(), edm::ESHandleBase::isValid(), edm::HandleBase::isValid(), reco::Muon::LowPtMvaLoose, reco::Muon::LowPtMvaMedium, muon::makeSelectorBitset(), reco::Muon::MiniIsoLoose, reco::Muon::MiniIsoMedium, reco::Muon::MiniIsoTight, reco::Muon::MiniIsoVeryTight, eostools::move(), reco::Muon::MultiIsoMedium, reco::PFCandidate::muonRef(), extraflags_cff::muons, muonToken_, DetachedQuadStep_cff::mva, mvaBTagCollectionTag_, muonProducer_cfi::mvaL1Corrector, mvaL1Corrector_, muonProducer_cfi::mvaL1L2L3ResCorrector, mvaL1L2L3ResCorrector_, reco::Muon::MvaLoose, reco::Muon::MvaMedium, reco::Muon::MvaTight, mvaUseJec_, reco::Muon::MvaVTight, reco::Muon::MvaVVTight, pat::helper::EfficiencyLoader::newEvent(), pat::helper::KinResolutionsLoader::newEvent(), nhits, hemisphereProducer_cfi::patMuons, pcToken_, pfMuonToken_, reco::Vertex::position(), impactParameterTagInfos_cfi::primaryVertex, edm::Handle< T >::product(), pTComparator_, 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_, edm::Event::put(), MetAnalyzer::pv(), pat::Muon::PV2D, pat::Muon::PV3D, pvToken_, recomputeBasicSelectors_, resolutionLoader_, rho_, edm::Event::run(), 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, muonProducer_cfi::tcMETMuonCorrs, tcMETMuonCorrsToken_, edm::Event::triggerNames(), TriggerAnalyzer::triggerObjects, triggerObjects_, triggerResults, triggerResults_, groupFilesInBlocks::tt, useParticleFlow_, userDataHelper_, and useUserData_.

293 {
294  // get the tracking Geometry
296  iSetup.get<GlobalTrackingGeometryRecord>().get(geometry);
297  if ( ! geometry.isValid() )
298  throw cms::Exception("FatalError") << "Unable to find GlobalTrackingGeometryRecord in event!\n";
299 
300  // switch off embedding (in unschedules mode)
301  if (iEvent.isRealData()){
302  addGenMatch_ = false;
303  embedGenMatch_ = false;
304  }
305 
307  iEvent.getByToken(muonToken_, muons);
308 
309 
312  iEvent.getByToken(pcToken_, pc);
313 
314  // get the ESHandle for the transient track builder,
315  // if needed for high level selection embedding
317 
318  if(isolator_.enabled()) isolator_.beginEvent(iEvent,iSetup);
320  if(resolutionLoader_.enabled()) resolutionLoader_.newEvent(iEvent, iSetup);
321 
323  for (size_t j = 0; j<isoDepositTokens_.size(); ++j) {
324  iEvent.getByToken(isoDepositTokens_[j], deposits[j]);
325  }
326 
328  for (size_t j = 0; j<isolationValueTokens_.size(); ++j) {
330  }
331 
332  //value maps for puppi isolation
333  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_charged_hadrons;
334  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_neutral_hadrons;
335  edm::Handle<edm::ValueMap<float>> PUPPIIsolation_photons;
336  //value maps for puppiNoLeptons isolation
337  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_charged_hadrons;
338  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_neutral_hadrons;
339  edm::Handle<edm::ValueMap<float>> PUPPINoLeptonsIsolation_photons;
340  if(addPuppiIsolation_){
341  //puppi
342  iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons);
343  iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons);
344  iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons);
345  //puppiNoLeptons
346  iEvent.getByToken(PUPPINoLeptonsIsolation_charged_hadrons_, PUPPINoLeptonsIsolation_charged_hadrons);
347  iEvent.getByToken(PUPPINoLeptonsIsolation_neutral_hadrons_, PUPPINoLeptonsIsolation_neutral_hadrons);
348  iEvent.getByToken(PUPPINoLeptonsIsolation_photons_, PUPPINoLeptonsIsolation_photons);
349  }
350 
351  // inputs for muon mva
352  edm::Handle<reco::JetTagCollection> mvaBTagCollectionTag;
355  if (computeMuonMVA_) {
356  iEvent.getByToken(mvaBTagCollectionTag_,mvaBTagCollectionTag);
357  iEvent.getByToken(mvaL1Corrector_,mvaL1Corrector);
358  iEvent.getByToken(mvaL1L2L3ResCorrector_,mvaL1L2L3ResCorrector);
359  }
360 
361  // prepare the MC genMatchTokens_
362  GenAssociations genMatches(genMatchTokens_.size());
363  if (addGenMatch_) {
364  for (size_t j = 0, nd = genMatchTokens_.size(); j < nd; ++j) {
365  iEvent.getByToken(genMatchTokens_[j], genMatches[j]);
366  }
367  }
368 
369  // prepare the high level selection: needs beamline
370  // OR primary vertex, depending on user selection
373  bool beamSpotIsValid = false;
374  bool primaryVertexIsValid = false;
375  if ( embedHighLevelSelection_ ) {
376  // get the beamspot
377  edm::Handle<reco::BeamSpot> beamSpotHandle;
378  iEvent.getByToken(beamLineToken_, beamSpotHandle);
379 
380  // get the primary vertex
382  iEvent.getByToken( pvToken_, pvHandle );
383 
384  if( beamSpotHandle.isValid() ){
385  beamSpot = *beamSpotHandle;
386  beamSpotIsValid = true;
387  } else{
388  edm::LogError("DataNotAvailable")
389  << "No beam spot available from EventSetup, not adding high level selection \n";
390  }
391  if( pvHandle.isValid() && !pvHandle->empty() ) {
392  primaryVertex = pvHandle->at(0);
393  primaryVertexIsValid = true;
394  } else {
395  edm::LogError("DataNotAvailable")
396  << "No primary vertex available from EventSetup, not adding high level selection \n";
397  }
398  // this is needed by the IPTools methods from the tracking group
399  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", trackBuilder);
400  }
401 
402  // MC info
404  bool simInfoIsAvailalbe = iEvent.getByToken(simInfo_,simInfo);
405 
406  // this will be the new object collection
407  std::vector<Muon> * patMuons = new std::vector<Muon>();
408 
410  if( useParticleFlow_ ){
411  // get the PFCandidates of type muons
412  iEvent.getByToken(pfMuonToken_, pfMuons);
413 
414  unsigned index=0;
415  for( reco::PFCandidateConstIterator i = pfMuons->begin(); i != pfMuons->end(); ++i, ++index) {
416  const reco::PFCandidate& pfmu = *i;
417  //const reco::IsolaPFCandidate& pfmu = *i;
418  const reco::MuonRef& muonRef = pfmu.muonRef();
419  assert( muonRef.isNonnull() );
420 
421  MuonBaseRef muonBaseRef(muonRef);
422  Muon aMuon(muonBaseRef);
423 
424  if ( useUserData_ ) {
425  userDataHelper_.add( aMuon, iEvent, iSetup );
426  }
427 
428  // embed high level selection
429  if ( embedHighLevelSelection_ ) {
430  // get the tracks
431  reco::TrackRef innerTrack = muonBaseRef->innerTrack();
432  reco::TrackRef globalTrack= muonBaseRef->globalTrack();
433  reco::TrackRef bestTrack = muonBaseRef->muonBestTrack();
434  reco::TrackRef chosenTrack = innerTrack;
435  // Make sure the collection it points to is there
436  if ( bestTrack.isNonnull() && bestTrack.isAvailable() )
437  chosenTrack = bestTrack;
438 
439  if ( chosenTrack.isNonnull() && chosenTrack.isAvailable() ) {
440  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
441  aMuon.setNumberOfValidHits( nhits );
442 
443  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
444  embedHighLevel( aMuon,
445  chosenTrack,
446  tt,
447  primaryVertex,
448  primaryVertexIsValid,
449  beamSpot,
450  beamSpotIsValid );
451 
452  }
453 
454  if ( globalTrack.isNonnull() && globalTrack.isAvailable() && !embedCombinedMuon_) {
455  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
456  aMuon.setNormChi2( norm_chi2 );
457  }
458  }
459  reco::PFCandidateRef pfRef(pfMuons,index);
460  //reco::PFCandidatePtr ptrToMother(pfMuons,index);
461  reco::CandidateBaseRef pfBaseRef( pfRef );
462 
463  aMuon.setPFCandidateRef( pfRef );
464  if( embedPFCandidate_ ) aMuon.embedPFCandidate();
465  fillMuon( aMuon, muonBaseRef, pfBaseRef, genMatches, deposits, isolationValues );
466 
467  if(computeMiniIso_)
468  setMuonMiniIso(aMuon, pc.product());
469 
470  if (addPuppiIsolation_) {
471  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonBaseRef],
472  (*PUPPIIsolation_neutral_hadrons)[muonBaseRef],
473  (*PUPPIIsolation_photons)[muonBaseRef]);
474 
475  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonBaseRef],
476  (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonBaseRef],
477  (*PUPPINoLeptonsIsolation_photons)[muonBaseRef]);
478  }
479  else {
480  aMuon.setIsolationPUPPI(-999., -999.,-999.);
481  aMuon.setIsolationPUPPINoLeptons(-999., -999.,-999.);
482  }
483 
484  if (embedPfEcalEnergy_) {
485  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
486  }
487 
488  patMuons->push_back(aMuon);
489  }
490  }
491  else {
493  iEvent.getByToken(muonToken_, muons);
494 
495  // embedding of muon MET corrections
497  //edm::ValueMap<reco::MuonMETCorrectionData> caloMETmuCorValueMap;
499  iEvent.getByToken(caloMETMuonCorrsToken_, caloMETMuonCorrs);
500  //caloMETmuCorValueMap = *caloMETmuCorValueMap_h;
501  }
503  //edm::ValueMap<reco::MuonMETCorrectionData> tcMETmuCorValueMap;
505  iEvent.getByToken(tcMETMuonCorrsToken_, tcMETMuonCorrs);
506  //tcMETmuCorValueMap = *tcMETmuCorValueMap_h;
507  }
508 
509  if (embedPfEcalEnergy_) {
510  // get the PFCandidates of type muons
511  iEvent.getByToken(pfMuonToken_, pfMuons);
512  }
513 
514  for (edm::View<reco::Muon>::const_iterator itMuon = muons->begin(); itMuon != muons->end(); ++itMuon) {
515  // construct the Muon from the ref -> save ref to original object
516  unsigned int idx = itMuon - muons->begin();
517  MuonBaseRef muonRef = muons->refAt(idx);
518  reco::CandidateBaseRef muonBaseRef( muonRef );
519 
520  Muon aMuon(muonRef);
521  fillMuon( aMuon, muonRef, muonBaseRef, genMatches, deposits, isolationValues);
522  if(computeMiniIso_)
523  setMuonMiniIso(aMuon, pc.product());
524  if (addPuppiIsolation_) {
525  aMuon.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[muonRef], (*PUPPIIsolation_neutral_hadrons)[muonRef], (*PUPPIIsolation_photons)[muonRef]);
526  aMuon.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[muonRef], (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonRef], (*PUPPINoLeptonsIsolation_photons)[muonRef]);
527  }
528  else {
529  aMuon.setIsolationPUPPI(-999., -999.,-999.);
530  aMuon.setIsolationPUPPINoLeptons(-999., -999.,-999.);
531  }
532 
533  // Isolation
534  if (isolator_.enabled()) {
535  //reco::CandidatePtr mother = ptrToMother->sourceCandidatePtr(0);
536  isolator_.fill(*muons, idx, isolatorTmpStorage_);
537  typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
538  // better to loop backwards, so the vector is resized less times
539  for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(), ed = isolatorTmpStorage_.rend(); it != ed; ++it) {
540  aMuon.setIsolation(it->first, it->second);
541  }
542  }
543 
544  // for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
545  // aMuon.setIsoDeposit(isoDepositLabels_[j].first,
546  // (*deposits[j])[muonRef]);
547  // }
548 
549  // add sel to selected
550  edm::Ptr<reco::Muon> muonsPtr = muons->ptrAt(idx);
551  if ( useUserData_ ) {
552  userDataHelper_.add( aMuon, iEvent, iSetup );
553  }
554 
555  // embed high level selection
556  if ( embedHighLevelSelection_ ) {
557  // get the tracks
558  reco::TrackRef innerTrack = itMuon->innerTrack();
559  reco::TrackRef globalTrack= itMuon->globalTrack();
560  reco::TrackRef bestTrack = itMuon->muonBestTrack();
561  reco::TrackRef chosenTrack = innerTrack;
562  // Make sure the collection it points to is there
563  if ( bestTrack.isNonnull() && bestTrack.isAvailable() )
564  chosenTrack = bestTrack;
565  if ( chosenTrack.isNonnull() && chosenTrack.isAvailable() ) {
566  unsigned int nhits = chosenTrack->numberOfValidHits(); // ????
567  aMuon.setNumberOfValidHits( nhits );
568 
569  reco::TransientTrack tt = trackBuilder->build(chosenTrack);
570  embedHighLevel( aMuon,
571  chosenTrack,
572  tt,
573  primaryVertex,
574  primaryVertexIsValid,
575  beamSpot,
576  beamSpotIsValid );
577 
578  }
579 
580  if ( globalTrack.isNonnull() && globalTrack.isAvailable() ) {
581  double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
582  aMuon.setNormChi2( norm_chi2 );
583  }
584  }
585 
586  // embed MET muon corrections
587  if( embedCaloMETMuonCorrs_ ) aMuon.embedCaloMETMuonCorrs((*caloMETMuonCorrs)[muonRef]);
588  if( embedTcMETMuonCorrs_ ) aMuon.embedTcMETMuonCorrs((*tcMETMuonCorrs )[muonRef]);
589 
590  if (embedPfEcalEnergy_) {
591  aMuon.setPfEcalEnergy(-99.0);
592  for (const reco::PFCandidate &pfmu : *pfMuons) {
593  if (pfmu.muonRef().isNonnull()) {
594  if (pfmu.muonRef().id() != muonRef.id()) throw cms::Exception("Configuration") << "Muon reference within PF candidates does not point to the muon collection." << std::endl;
595  if (pfmu.muonRef().key() == muonRef.key()) {
596  aMuon.setPfEcalEnergy(pfmu.ecalEnergy());
597  }
598  }
599  }
600  }
601  // MC info
602  aMuon.initSimInfo();
603  if (simInfoIsAvailalbe){
604  const auto& msi = (*simInfo)[muonBaseRef];
605  aMuon.setSimType(msi.primaryClass);
606  aMuon.setExtSimType(msi.extendedClass);
607  aMuon.setSimFlavour(msi.flavour);
608  aMuon.setSimHeaviestMotherFlavour(msi.heaviestMotherFlavour);
609  aMuon.setSimPdgId(msi.pdgId);
610  aMuon.setSimMotherPdgId(msi.motherPdgId);
611  aMuon.setSimBX(msi.tpBX);
612  aMuon.setSimTpEvent(msi.tpEvent);
613  aMuon.setSimProdRho(msi.vertex.Rho());
614  aMuon.setSimProdZ(msi.vertex.Z());
615  aMuon.setSimPt(msi.p4.pt());
616  aMuon.setSimEta(msi.p4.eta());
617  aMuon.setSimPhi(msi.p4.phi());
618  aMuon.setSimMatchQuality(msi.tpAssoQuality);
619  }
620  patMuons->push_back(aMuon);
621  }
622  }
623 
624  // sort muons in pt
625  std::sort(patMuons->begin(), patMuons->end(), pTComparator_);
626 
627  // Store standard muon selection decisions and jet related
628  // quantaties.
629  // Need a separate loop over muons to have all inputs properly
630  // computed and stored in the object.
632  if (computeMuonMVA_) iEvent.getByToken(rho_,rho);
633  const reco::Vertex* pv(nullptr);
634  if (primaryVertexIsValid) pv = &primaryVertex;
635 
638  bool triggerObjectsAvailable = false;
639  bool triggerResultsAvailable = false;
640  if (addTriggerMatching_){
641  triggerObjectsAvailable = iEvent.getByToken(triggerObjects_, triggerObjects);
642  triggerResultsAvailable = iEvent.getByToken(triggerResults_, triggerResults);
643  }
644 
645  for(auto& muon: *patMuons){
646  // trigger info
647  if (addTriggerMatching_ and triggerObjectsAvailable and triggerResultsAvailable){
648  const edm::TriggerNames & triggerNames(iEvent.triggerNames( *triggerResults ));
649  fillL1TriggerInfo(muon,triggerObjects,triggerNames,geometry);
650  fillHltTriggerInfo(muon,triggerObjects,triggerNames,hltCollectionFilters_);
651  }
652 
654  muon.setSelectors(0);
655  bool isRun2016BCDEF = (272728 <= iEvent.run() && iEvent.run() <= 278808);
656  muon.setSelectors(muon::makeSelectorBitset(muon, pv, isRun2016BCDEF));
657  }
658  float miniIsoValue = -1;
659  if (computeMiniIso_){
660  // MiniIsolation working points
661 
662  miniIsoValue = getRelMiniIsoPUCorrected(muon,*rho, effectiveAreaVec_);
663 
664  muon.setSelector(reco::Muon::MiniIsoLoose, miniIsoValue<0.40);
665  muon.setSelector(reco::Muon::MiniIsoMedium, miniIsoValue<0.20);
666  muon.setSelector(reco::Muon::MiniIsoTight, miniIsoValue<0.10);
667  muon.setSelector(reco::Muon::MiniIsoVeryTight, miniIsoValue<0.05);
668  }
669 
670  double puppiCombinedIsolationPAT = -1;
672 
673  puppiCombinedIsolationPAT=puppiCombinedIsolation(muon, pc.product());
674  muon.setSelector(reco::Muon::PuppiIsoLoose, puppiCombinedIsolationPAT<0.27);
675  muon.setSelector(reco::Muon::PuppiIsoMedium, puppiCombinedIsolationPAT<0.22);
676  muon.setSelector(reco::Muon::PuppiIsoTight, puppiCombinedIsolationPAT<0.12);
677  }
678 
679  float jetPtRatio = 0.0;
680  float jetPtRel = 0.0;
681  float mva = 0.0;
682  float mva_lowpt = 0.0;
683  if (computeMuonMVA_ && primaryVertexIsValid && computeMiniIso_){
684  if (mvaUseJec_){
685  mva = globalCache()->muonMvaEstimator()->computeMva(muon,
686  primaryVertex,
687  *(mvaBTagCollectionTag.product()),
688  jetPtRatio,
689  jetPtRel,
690  miniIsoValue,
691  &*mvaL1Corrector,
692  &*mvaL1L2L3ResCorrector
693  );
694  mva_lowpt = globalCache()->muonLowPtMvaEstimator()->computeMva(muon,
695  primaryVertex,
696  *(mvaBTagCollectionTag.product()),
697  jetPtRatio,
698  jetPtRel,
699  miniIsoValue,
700  &*mvaL1Corrector,
701  &*mvaL1L2L3ResCorrector
702  );
703 
704  }
705  else{
706  mva = globalCache()->muonMvaEstimator()->computeMva(muon,
707  primaryVertex,
708  *(mvaBTagCollectionTag.product()),
709  jetPtRatio,
710  jetPtRel,
711  miniIsoValue);
712  mva_lowpt = globalCache()->muonLowPtMvaEstimator()->computeMva(muon,
713  primaryVertex,
714  *(mvaBTagCollectionTag.product()),
715  jetPtRatio,
716  jetPtRel,
717  miniIsoValue);
718  }
719 
720  muon.setMvaValue(mva);
721  muon.setLowPtMvaValue(mva_lowpt);
722  muon.setJetPtRatio(jetPtRatio);
723  muon.setJetPtRel(jetPtRel);
724 
725  // multi-isolation
726  if (computeMiniIso_){
727  muon.setSelector(reco::Muon::MultiIsoMedium, miniIsoValue<0.11 && (muon.jetPtRatio() > 0.74 || muon.jetPtRel() > 6.8) );
728  }
729 
730  // MVA working points
731  // https://twiki.cern.ch/twiki/bin/viewauth/CMS/LeptonMVA
732  double dB2D = fabs(muon.dB(pat::Muon::PV2D));
733  double dB3D = fabs(muon.dB(pat::Muon::PV3D));
734  double edB3D = fabs(muon.edB(pat::Muon::PV3D));
735  double sip3D = edB3D>0?dB3D/edB3D:0.0;
736  double dz = fabs(muon.muonBestTrack()->dz(primaryVertex.position()));
737 
738  // muon preselection
739  if (muon.pt()>5 and muon.isLooseMuon() and
740  muon.passed(reco::Muon::MiniIsoLoose) and
741  sip3D<8.0 and dB2D<0.05 and dz<0.1){
742  muon.setSelector(reco::Muon::MvaLoose, muon.mvaValue()>-0.60);
743  muon.setSelector(reco::Muon::MvaMedium, muon.mvaValue()>-0.20);
744  muon.setSelector(reco::Muon::MvaTight, muon.mvaValue()> 0.15);
745  muon.setSelector(reco::Muon::MvaVTight, muon.mvaValue()> 0.45);
746  muon.setSelector(reco::Muon::MvaVVTight, muon.mvaValue()> 0.9);
747  }
748  if (muon.pt()>5 and muon.isLooseMuon() and
749  sip3D<4 and dB2D < 0.5 and dz < 1){
750  muon.setSelector(reco::Muon::LowPtMvaLoose, muon.lowptMvaValue()>-0.60);
751  muon.setSelector(reco::Muon::LowPtMvaMedium, muon.lowptMvaValue()>-0.20);
752  }
753  }
754 
755  //SOFT MVA
756  if (computeSoftMuonMVA_){
757  float mva = globalCache()->softMuonMvaEstimator()->computeMva(muon);
758  muon.setSoftMvaValue(mva);
759  //preselection in SoftMuonMvaEstimator.cc
760  muon.setSelector(reco::Muon::SoftMvaId, muon.softMvaValue() > 0.58 ); //WP choose for bmm4
761 
762  }
763  }
764 
765  // put products in Event
766  std::unique_ptr<std::vector<Muon> > ptr(patMuons);
767  iEvent.put(std::move(ptr));
768 
770 }
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
bool useUserData_
add user data to the muon (this will be data members of th muon even w/o embedding) ...
bool isAvailable() const
Definition: Ref.h:575
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
double ecalEnergy() const
return corrected Ecal energy
Definition: PFCandidate.h:222
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
bool addPuppiIsolation_
add puppi isolation
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:251
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< 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 getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
bool embedCaloMETMuonCorrs_
embed muon MET correction info for caloMET into the muon
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
MC info.
void setMuonMiniIso(pat::Muon &aMuon, const pat::PackedCandidateCollection *pc)
reco::TransientTrack build(const reco::Track *p) const
bool addTriggerMatching_
Trigger.
edm::EDGetTokenT< reco::JetCorrector > mvaL1Corrector_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
key_type key() const
Accessor for product key.
Definition: Ref.h:263
PFCandidateCollection::const_iterator PFCandidateConstIterator
iterator
bool isRealData() const
Definition: EventBase.h:62
const Point & position() const
position
Definition: Vertex.h:109
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_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
ProductID id() const
Accessor for product ID.
Definition: Ref.h:257
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_
helper class to add userdefined isolation values to the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
bool enabled() const
&#39;true&#39; if this there is at least one efficiency configured
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
input source of the primary vertex/beamspot
bool useParticleFlow_
switch to use particle flow (PF2PAT) or not
pat::PATUserDataHelper< pat::Muon > userDataHelper_
helper class to add userData to the muon
bool enabled() const
True if it has a non null configuration.
Definition: MultiIsolator.h:50
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
GreaterByPt< Muon > pTComparator_
bool addGenMatch_
add generator match information
Definition: Muon.py:1
void fillHltTriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone > > &triggerObjects, const edm::TriggerNames &names, const std::vector< std::string > &collection_names)
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.
RunNumber_t run() const
Definition: Event.h:101
def pv(vc)
Definition: MetAnalyzer.py:7
void fillL1TriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone > > &triggerObjects, const edm::TriggerNames &names, const edm::ESHandle< GlobalTrackingGeometry > &geometry)
static std::string const triggerResults
Definition: EdmProvDump.cc:45
bool isValid() const
Definition: HandleBase.h:74
double puppiCombinedIsolation(const pat::Muon &muon, const pat::PackedCandidateCollection *pc)
std::vector< std::string > hltCollectionFilters_
reco::MuonRef muonRef() const
Definition: PFCandidate.cc:459
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=0, bool run2016_hip_mitigation=false)
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
T const * product() const
Definition: Handle.h:74
double getRelMiniIsoPUCorrected(const pat::Muon &muon, double rho, const std::vector< double > &area)
std::vector< edm::Handle< edm::Association< reco::GenParticleCollection > > > GenAssociations
edm::EDGetTokenT< reco::JetCorrector > mvaL1L2L3ResCorrector_
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
ESHandle< TrackerGeometry > geometry
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
Definition: MultiIsolator.h:16
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
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
T get() const
Definition: EventSetup.h:71
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
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
ProductIndex id() const
Definition: ProductID.h:38
bool isValid() const
Definition: ESHandle.h:44
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
edm::RefToBase< reco::Muon > MuonBaseRef
typedefs for convenience
bool embedPFCandidate_
embed pfCandidates into the muon
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
bool computeMuonMVA_
standard muon selectors
bool embedCombinedMuon_
embed track of the combined fit into the muon
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:256
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
def move(src, dest)
Definition: eostools.py:511
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
Definition: MultiIsolator.h:82
bool embedHighLevelSelection_
embed high level selection variables
double PATMuonProducer::puppiCombinedIsolation ( const pat::Muon muon,
const pat::PackedCandidateCollection pc 
)
private

Definition at line 868 of file PATMuonProducer.cc.

References funct::abs(), reco::deltaPhi(), reco::deltaR2(), reco::LeafCandidate::eta(), isChargedHadron(), isNeutralHadron(), isPhoton(), LogTrace, dqm::qstatus::OTHER, objects.autophobj::particleType, reco::LeafCandidate::phi(), and reco::LeafCandidate::pt().

Referenced by produce().

869 {
870  double dR_threshold = 0.4;
871  double dR2_threshold = dR_threshold * dR_threshold;
872  double mix_fraction = 0.5;
873  enum particleType{
874  CH = 0,
875  NH = 1,
876  PH = 2,
877  OTHER = 100000
878  };
879  double val_PuppiWithLep = 0.0;
880  double val_PuppiWithoutLep = 0.0;
881 
882  for(const auto & cand : *pc){//pat::pat::PackedCandidate loop start
883 
884  const particleType pType =
885  isChargedHadron( cand.pdgId() ) ? CH :
886  isNeutralHadron( cand.pdgId() ) ? NH :
887  isPhoton( cand.pdgId() ) ? PH : OTHER;
888  if( pType == OTHER ){
889  if( cand.pdgId() != 1 && cand.pdgId() != 2
890  && abs( cand.pdgId() ) != 11
891  && abs( cand.pdgId() ) != 13){
892  LogTrace("PATMuonProducer") <<"candidate with PDGID = " << cand.pdgId() << " is not CH/NH/PH/e/mu or 1/2 (and this is removed from isolation calculation)" << std::endl;
893  }
894  continue;
895  }
896  double d_eta = std::abs( cand.eta() - muon.eta() );
897  if( d_eta > dR_threshold ) continue;
898 
899  double d_phi = std::abs(reco::deltaPhi(cand.phi(),muon.phi()));
900  if( d_phi > dR_threshold ) continue ;
901 
902  double dR2=reco::deltaR2(cand, muon);
903  if( dR2 > dR2_threshold ) continue;
904  if( pType == CH && dR2 < 0.0001*0.0001 ) continue;
905  if( pType == NH && dR2 < 0.01 *0.01 ) continue;
906  if( pType == PH && dR2 < 0.01 *0.01 ) continue;
907  val_PuppiWithLep += cand.pt() * cand.puppiWeight();
908  val_PuppiWithoutLep += cand.pt() * cand.puppiWeightNoLep();
909 
910  }//pat::pat::PackedCandidate loop end
911 
912  double reliso_Puppi_withLep = val_PuppiWithLep/muon.pt();
913  double reliso_Puppi_withoutlep = val_PuppiWithoutLep/muon.pt();
914  double reliso_Puppi_combined = mix_fraction * reliso_Puppi_withLep + ( 1.0 - mix_fraction) * reliso_Puppi_withoutlep;
915  return reliso_Puppi_combined;
916 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
double eta() const final
momentum pseudorapidity
static const int OTHER
bool isChargedHadron(long pdgid)
double pt() const final
transverse momentum
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define LogTrace(id)
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
bool isPhoton(long pdgid)
double phi() const final
momentum azimuthal angle
bool isNeutralHadron(long pdgid)
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 258 of file PATMuonProducer.h.

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

Referenced by PATMuonProducer().

259 {
260  labels.clear();
261 
262  if (iConfig.exists( psetName )) {
263  edm::ParameterSet depconf = iConfig.getParameter<edm::ParameterSet>(psetName);
264 
265  if (depconf.exists("tracker")) labels.push_back(std::make_pair(pat::TrackIso, depconf.getParameter<edm::InputTag>("tracker")));
266  if (depconf.exists("ecal")) labels.push_back(std::make_pair(pat::EcalIso, depconf.getParameter<edm::InputTag>("ecal")));
267  if (depconf.exists("hcal")) labels.push_back(std::make_pair(pat::HcalIso, depconf.getParameter<edm::InputTag>("hcal")));
268  if (depconf.exists("pfAllParticles")) {
269  labels.push_back(std::make_pair(pat::PfAllParticleIso, depconf.getParameter<edm::InputTag>("pfAllParticles")));
270  }
271  if (depconf.exists("pfChargedHadrons")) {
272  labels.push_back(std::make_pair(pat::PfChargedHadronIso, depconf.getParameter<edm::InputTag>("pfChargedHadrons")));
273  }
274  if (depconf.exists("pfChargedAll")) {
275  labels.push_back(std::make_pair(pat::PfChargedAllIso, depconf.getParameter<edm::InputTag>("pfChargedAll")));
276  }
277  if (depconf.exists("pfPUChargedHadrons")) {
278  labels.push_back(std::make_pair(pat::PfPUChargedHadronIso, depconf.getParameter<edm::InputTag>("pfPUChargedHadrons")));
279  }
280  if (depconf.exists("pfNeutralHadrons")) {
281  labels.push_back(std::make_pair(pat::PfNeutralHadronIso, depconf.getParameter<edm::InputTag>("pfNeutralHadrons")));
282  }
283  if (depconf.exists("pfPhotons")) {
284  labels.push_back(std::make_pair(pat::PfGammaIso, depconf.getParameter<edm::InputTag>("pfPhotons")));
285  }
286  if (depconf.exists("user")) {
287  std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag> >("user");
288  std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
290  for ( ; it != ed; ++it, ++key) {
291  labels.push_back(std::make_pair(pat::IsolationKeys(key), *it));
292  }
293  tokens = edm::vector_transform(labels, [this](IsolationLabel const & label){return consumes<edm::ValueMap<T> >(label.second);});
294  }
295  }
296  tokens = edm::vector_transform(labels, [this](pat::PATMuonProducer::IsolationLabel const & label){return consumes<edm::ValueMap<T> >(label.second);});
297 }
T getParameter(std::string const &) const
std::pair< pat::IsolationKeys, edm::InputTag > IsolationLabel
bool exists(std::string const &parameterName) const
checks if a parameter exists
IsolationKeys
Enum defining isolation keys.
Definition: Isolation.h:9
char const * label
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
double pat::PATMuonProducer::relMiniIsoPUCorrected ( const pat::Muon aMuon,
double  rho 
)
private
void PATMuonProducer::setMuonMiniIso ( pat::Muon aMuon,
const pat::PackedCandidateCollection pc 
)
private

Definition at line 849 of file PATMuonProducer.cc.

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

Referenced by produce().

850 {
851  pat::PFIsolation miniiso = pat::getMiniPFIsolation(pc, aMuon.p4(),
852  miniIsoParams_[0], miniIsoParams_[1], miniIsoParams_[2],
853  miniIsoParams_[3], miniIsoParams_[4], miniIsoParams_[5],
854  miniIsoParams_[6], miniIsoParams_[7], miniIsoParams_[8]);
855  aMuon.setMiniPFIsolation(miniiso);
856 }
std::vector< double > miniIsoParams_
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
void setMiniPFIsolation(PFIsolation const &iso)
Definition: Lepton.h:197
PFIsolation getMiniPFIsolation(const pat::PackedCandidateCollection *pfcands, const math::XYZTLorentzVector &p4, float mindr=0.05, float maxdr=0.2, float kt_scale=10.0, float ptthresh=0.5, float deadcone_ch=0.0001, float deadcone_pu=0.01, float deadcone_ph=0.01, float deadcone_nh=0.01, float dZ_cut=0.0)

Member Data Documentation

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 205 of file PATMuonProducer.h.

Referenced by PATMuonProducer().

bool pat::PATMuonProducer::addGenMatch_
private

add generator match information

Definition at line 177 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

bool pat::PATMuonProducer::addPuppiIsolation_
private

add puppi isolation

Definition at line 211 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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 183 of file PATMuonProducer.h.

Referenced by PATMuonProducer().

bool pat::PATMuonProducer::addTriggerMatching_
private

Trigger.

Definition at line 246 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

input source of the primary vertex/beamspot

Definition at line 195 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

source of caloMET muon corrections

Definition at line 165 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::computeMiniIso_
private

Definition at line 144 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::computeMuonMVA_
private

standard muon selectors

Definition at line 221 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::computePuppiCombinedIso_
private

Definition at line 145 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::computeSoftMuonMVA_
private

Definition at line 222 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 146 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

helper class to add efficiencies to the muon

Definition at line 238 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedBestTrack_
private

embed the track from best muon measurement (global pflow)

Definition at line 151 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedCaloMETMuonCorrs_
private

embed muon MET correction info for caloMET into the muon

Definition at line 163 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedCombinedMuon_
private

embed track of the combined fit into the muon

Definition at line 161 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedDytMuon_
private

embed track from DYT muon fit into the muon

Definition at line 175 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedGenMatch_
private

embed the gen match information into the muon

Definition at line 181 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedHighLevelSelection_
private

embed high level selection variables

Definition at line 193 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedPFCandidate_
private

embed pfCandidates into the muon

Definition at line 191 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedPfEcalEnergy_
private

add ecal PF energy

Definition at line 209 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedPickyMuon_
private

embed track from picky muon fit into the muon

Definition at line 171 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedStandAloneMuon_
private

embed track from muon system into the muon

Definition at line 159 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedTcMETMuonCorrs_
private

embed muon MET correction info for tcMET into the muon

Definition at line 167 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::embedTpfmsMuon_
private

embed track from tpfms muon fit into the muon

Definition at line 173 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedTrack_
private

embed the track from inner tracker into the muon

Definition at line 157 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::embedTunePBestTrack_
private

embed the track from best muon measurement (muon only)

Definition at line 153 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

bool pat::PATMuonProducer::forceEmbedBestTrack_
private

force separate embed of the best track even if already embedded

Definition at line 155 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

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

input tags for generator match information

Definition at line 179 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 249 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

IsolationLabels pat::PATMuonProducer::isoDepositLabels_
private

input source for isoDeposits

Definition at line 199 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

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

Definition at line 200 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

IsolationLabels pat::PATMuonProducer::isolationValueLabels_
private

input source isolation value maps

Definition at line 202 of file PATMuonProducer.h.

Referenced by fillMuon(), and PATMuonProducer().

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

Definition at line 203 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

helper class to add userdefined isolation values to the muon

Definition at line 234 of file PATMuonProducer.h.

Referenced by produce().

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

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

Definition at line 236 of file PATMuonProducer.h.

Referenced by produce().

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

Definition at line 147 of file PATMuonProducer.h.

Referenced by getRelMiniIsoPUCorrected(), PATMuonProducer(), and setMuonMiniIso().

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

input source

Definition at line 140 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 225 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 226 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 227 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::mvaUseJec_
private

Definition at line 224 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 143 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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 189 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

GreaterByPt<Muon> pat::PATMuonProducer::pTComparator_
private

— tools — comparator for pt ordering

Definition at line 232 of file PATMuonProducer.h.

Referenced by produce().

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

Definition at line 213 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 214 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 215 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 217 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 218 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 219 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

input source of the primary vertex

Definition at line 197 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::recomputeBasicSelectors_
private

Definition at line 223 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

double pat::PATMuonProducer::relMiniIsoPUCorrected_
private

Definition at line 148 of file PATMuonProducer.h.

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

helper class to add resolutions to the muon

Definition at line 185 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

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

Definition at line 228 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

MC info.

Definition at line 243 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

source of tcMET muon corrections

Definition at line 169 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 247 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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

Definition at line 248 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

bool pat::PATMuonProducer::useParticleFlow_
private

switch to use particle flow (PF2PAT) or not

Definition at line 187 of file PATMuonProducer.h.

Referenced by fillMuon(), PATMuonProducer(), and produce().

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

helper class to add userData to the muon

Definition at line 240 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().

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 207 of file PATMuonProducer.h.

Referenced by PATMuonProducer(), and produce().