66 muonLowPtMvaEstimator_ = std::make_unique<MuonMvaEstimator>(mvaLowPtTrainingFile,
mvaDrMax);
76 : relMiniIsoPUCorrected_(0),
77 useUserData_(iConfig.exists(
"userData")),
78 computeMuonMVA_(
false),
79 computeSoftMuonMVA_(
false),
80 recomputeBasicSelectors_(
false),
82 isolator_(iConfig.exists(
"userIsolation") ? iConfig.getParameter<
edm::
ParameterSet>(
"userIsolation")
113 if (addInverseBeta_) {
126 iConfig.
getParameter<std::vector<edm::InputTag>>(
"genParticleMatch"),
127 [
this](
edm::InputTag const&
tag) { return consumes<edm::Association<reco::GenParticleCollection>>(tag); });
168 if (embedHighLevelSelection_) {
182 throw cms::Exception(
"ParameterError") <<
"miniIsoParams must have exactly 9 elements.\n";
191 throw cms::Exception(
"ConfigurationError") <<
"MiniIso is needed for Muon MVA calculation.\n";
193 if (computeMuonMVA_) {
216 produces<std::vector<Muon>>();
223 const DetId& chamberId) {
225 if (chamberGeometry) {
226 LocalPoint localPosition(chamberMatch.
x, chamberMatch.
y, 0);
227 return std::optional<GlobalPoint>(std::in_place, chamberGeometry->
toGlobal(localPosition));
229 return std::optional<GlobalPoint>();
241 std::optional<GlobalPoint> muonPosition;
246 for (
const auto& chamberMatch : aMuon.
matches()) {
249 if (
abs(detId.station()) > 3)
252 if (
abs(detId.station()) == 2)
256 CSCDetId detId(chamberMatch.id.rawId());
257 if (
abs(detId.station()) > 3)
260 if (
abs(detId.station()) == 2)
264 if (not muonPosition)
268 if (fabs(triggerObject.eta()) < 0.001) {
270 if (
deltaPhi(triggerObject.phi(), muonPosition->phi()) > 0.1)
274 if (
deltaR(triggerObject.p4(), *muonPosition) > 0.15)
287 const std::vector<std::string>& collection_filter_names) {
293 for (
const auto&
name : collection_filter_names) {
294 if (triggerObject.hasCollection(
name)) {
315 throw cms::Exception(
"FatalError") <<
"Unable to find GlobalTrackingGeometryRecord in event!\n";
392 bool beamSpotIsValid =
false;
393 bool primaryVertexIsValid =
false;
403 if (beamSpotHandle.
isValid()) {
404 beamSpot = *beamSpotHandle;
405 beamSpotIsValid =
true;
407 edm::LogError(
"DataNotAvailable") <<
"No beam spot available from EventSetup, not adding high level selection \n";
409 if (pvHandle.
isValid() && !pvHandle->empty()) {
410 primaryVertex = pvHandle->at(0);
411 primaryVertexIsValid =
true;
414 <<
"No primary vertex available from EventSetup, not adding high level selection \n";
425 std::vector<Muon>*
patMuons =
new std::vector<Muon>();
440 Muon aMuon(muonBaseRef);
455 chosenTrack = bestTrack;
458 unsigned int nhits = chosenTrack->numberOfValidHits();
462 embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
466 double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
484 (*PUPPIIsolation_neutral_hadrons)[muonBaseRef],
485 (*PUPPIIsolation_photons)[muonBaseRef]);
488 (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonBaseRef],
489 (*PUPPINoLeptonsIsolation_photons)[muonBaseRef]);
499 patMuons->push_back(aMuon);
532 unsigned int idx = itMuon - muons->begin();
542 (*PUPPIIsolation_neutral_hadrons)[muonRef],
543 (*PUPPIIsolation_photons)[muonRef]);
545 (*PUPPINoLeptonsIsolation_neutral_hadrons)[muonRef],
546 (*PUPPINoLeptonsIsolation_photons)[muonRef]);
586 chosenTrack = bestTrack;
588 unsigned int nhits = chosenTrack->numberOfValidHits();
592 embedHighLevel(aMuon, chosenTrack, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
596 double norm_chi2 = globalTrack->chi2() / globalTrack->ndof();
610 if (pfmu.muonRef().isNonnull()) {
611 if (pfmu.muonRef().id() != muonRef.id())
613 <<
"Muon reference within PF candidates does not point to the muon collection." << std::endl;
614 if (pfmu.muonRef().key() == muonRef.key()) {
625 if (simInfoIsAvailalbe) {
626 const auto& msi = (*simInfo)[muonBaseRef];
642 patMuons->push_back(aMuon);
647 std::sort(patMuons->begin(), patMuons->end(),
pTComparator_);
657 if (primaryVertexIsValid)
662 bool triggerObjectsAvailable =
false;
663 bool triggerResultsAvailable =
false;
669 for (
auto&
muon : *patMuons) {
678 muon.setSelectors(0);
679 bool isRun2016BCDEF = (272728 <= iEvent.
run() && iEvent.
run() <= 278808);
682 float miniIsoValue = -1;
694 double puppiCombinedIsolationPAT = -1;
702 float jetPtRatio = 0.0;
703 float jetPtRel = 0.0;
705 float mva_lowpt = 0.0;
708 mva = globalCache()->muonMvaEstimator()->computeMva(
muon,
710 *(mvaBTagCollectionTag.
product()),
715 &*mvaL1L2L3ResCorrector);
716 mva_lowpt = globalCache()->muonLowPtMvaEstimator()->computeMva(
muon,
718 *(mvaBTagCollectionTag.
product()),
723 &*mvaL1L2L3ResCorrector);
726 mva = globalCache()->muonMvaEstimator()->computeMva(
727 muon, primaryVertex, *(mvaBTagCollectionTag.
product()), jetPtRatio, jetPtRel, miniIsoValue);
728 mva_lowpt = globalCache()->muonLowPtMvaEstimator()->computeMva(
729 muon, primaryVertex, *(mvaBTagCollectionTag.
product()), jetPtRatio, jetPtRel, miniIsoValue);
732 muon.setMvaValue(mva);
733 muon.setLowPtMvaValue(mva_lowpt);
734 muon.setJetPtRatio(jetPtRatio);
735 muon.setJetPtRel(jetPtRel);
740 miniIsoValue < 0.11 && (
muon.jetPtRatio() > 0.74 ||
muon.jetPtRel() > 6.8));
748 double sip3D = edB3D > 0 ? dB3D / edB3D : 0.0;
749 double dz = fabs(
muon.muonBestTrack()->dz(primaryVertex.
position()));
753 dB2D < 0.05 and dz < 0.1) {
760 if (
muon.pt() > 5 and
muon.isLooseMuon() and sip3D < 4 and dB2D < 0.5 and dz < 1) {
768 float mva = globalCache()->softMuonMvaEstimator()->computeMva(
muon);
769 muon.setSoftMvaValue(mva);
776 std::unique_ptr<std::vector<Muon>> ptr(patMuons);
821 for (
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
832 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
847 for (
size_t j = 0;
j < isolationValues.size(); ++
j) {
851 }
else if (isolationValues[
j]->
contains(muonRef.
id())) {
891 double dR_threshold = 0.4;
892 double dR2_threshold = dR_threshold * dR_threshold;
893 double mix_fraction = 0.5;
895 double val_PuppiWithLep = 0.0;
896 double val_PuppiWithoutLep = 0.0;
898 for (
const auto&
cand : *pc) {
902 if (pType ==
OTHER) {
904 LogTrace(
"PATMuonProducer") <<
"candidate with PDGID = " <<
cand.pdgId()
905 <<
" is not CH/NH/PH/e/mu or 1/2 (and this is removed from isolation calculation)" 911 if (d_eta > dR_threshold)
915 if (d_phi > dR_threshold)
919 if (dR2 > dR2_threshold)
921 if (pType ==
CH && dR2 < 0.0001 * 0.0001)
923 if (pType == NH && dR2 < 0.01 * 0.01)
925 if (pType == PH && dR2 < 0.01 * 0.01)
927 val_PuppiWithLep +=
cand.pt() *
cand.puppiWeight();
928 val_PuppiWithoutLep +=
cand.pt() *
cand.puppiWeightNoLep();
932 double reliso_Puppi_withLep = val_PuppiWithLep / muon.
pt();
933 double reliso_Puppi_withoutlep = val_PuppiWithoutLep / muon.
pt();
934 double reliso_Puppi_combined = mix_fraction * reliso_Puppi_withLep + (1.0 - mix_fraction) * reliso_Puppi_withoutlep;
935 return reliso_Puppi_combined;
953 iDesc.
add<
bool>(
"embedMuonBestTrack",
true)->setComment(
"embed muon best track (global pflow)");
954 iDesc.
add<
bool>(
"embedTunePMuonBestTrack",
true)->setComment(
"embed muon best track (muon only)");
955 iDesc.
add<
bool>(
"forceBestTrackEmbedding",
true)
957 "force embedding separately the best tracks even if they're already embedded e.g. as tracker or global " 959 iDesc.
add<
bool>(
"embedTrack",
true)->setComment(
"embed external track");
960 iDesc.
add<
bool>(
"embedStandAloneMuon",
true)->setComment(
"embed external stand-alone muon");
961 iDesc.
add<
bool>(
"embedCombinedMuon",
false)->setComment(
"embed external combined muon");
962 iDesc.
add<
bool>(
"embedPickyMuon",
false)->setComment(
"embed external picky track");
963 iDesc.
add<
bool>(
"embedTpfmsMuon",
false)->setComment(
"embed external tpfms track");
964 iDesc.
add<
bool>(
"embedDytMuon",
false)->setComment(
"embed external dyt track ");
967 iDesc.
add<
bool>(
"embedCaloMETMuonCorrs",
true)->setComment(
"whether to add MET muon correction for caloMET or not");
969 ->setComment(
"source of MET muon corrections for caloMET");
970 iDesc.
add<
bool>(
"embedTcMETMuonCorrs",
true)->setComment(
"whether to add MET muon correction for tcMET or not");
972 ->setComment(
"source of MET muon corrections for tcMET");
976 iDesc.
add<
bool>(
"useParticleFlow",
false)->setComment(
"whether to use particle flow or not");
977 iDesc.
add<
bool>(
"embedPFCandidate",
false)->setComment(
"embed external particle flow object");
978 iDesc.
add<
bool>(
"embedPfEcalEnergy",
true)->setComment(
"add ecal energy as reconstructed by PF");
981 iDesc.
add<
bool>(
"addInverseBeta",
true)->setComment(
"add combined inverse beta");
983 ->setComment(
"source of inverse beta values");
986 iDesc.
add<
bool>(
"addGenMatch",
true)->setComment(
"add MC matching");
987 iDesc.
add<
bool>(
"embedGenMatch",
false)->setComment(
"embed MC matched MC information");
988 std::vector<edm::InputTag> emptySourceVector;
992 ->
setComment(
"input with MC match information");
995 iDesc.
add<
bool>(
"computeMiniIso",
false)->setComment(
"whether or not to compute and store electron mini-isolation");
996 iDesc.
add<
bool>(
"computePuppiCombinedIso",
false)
997 ->setComment(
"whether or not to compute and store puppi combined isolation");
1000 ->setComment(
"collection to use to compute mini-iso");
1001 iDesc.
add<std::vector<double>>(
"miniIsoParams", std::vector<double>())
1002 ->
setComment(
"mini-iso parameters to use for muons");
1004 iDesc.
add<
bool>(
"addTriggerMatching",
false)->setComment(
"add L1 and HLT matching to offline muon");
1019 isoDepositsPSet.
addOptional<std::vector<edm::InputTag>>(
"user");
1020 iDesc.
addOptional(
"isoDeposits", isoDepositsPSet);
1033 iDesc.
addOptional(
"isolationValues", isolationValuesPSet);
1037 "puppiIsolationChargedHadrons",
1038 edm::InputTag(
"muonPUPPIIsolation",
"h+-DR030-ThresholdVeto000-ConeVeto000"),
1041 "puppiIsolationNeutralHadrons",
1042 edm::InputTag(
"muonPUPPIIsolation",
"h0-DR030-ThresholdVeto000-ConeVeto001"),
1045 "puppiIsolationPhotons",
1046 edm::InputTag(
"muonPUPPIIsolation",
"gamma-DR030-ThresholdVeto000-ConeVeto001"),
1049 "puppiNoLeptonsIsolationChargedHadrons",
1050 edm::InputTag(
"muonPUPPINoLeptonsIsolation",
"h+-DR030-ThresholdVeto000-ConeVeto000"),
1053 "puppiNoLeptonsIsolationNeutralHadrons",
1054 edm::InputTag(
"muonPUPPINoLeptonsIsolation",
"h0-DR030-ThresholdVeto000-ConeVeto001"),
1057 "puppiNoLeptonsIsolationPhotons",
1058 edm::InputTag(
"muonPUPPINoLeptonsIsolation",
"gamma-DR030-ThresholdVeto000-ConeVeto001"),
1065 iDesc.
add(
"efficiencies", efficienciesPSet);
1066 iDesc.
add<
bool>(
"addEfficiencies",
false);
1075 iDesc.
add(
"userIsolation", isolationPSet);
1077 iDesc.
add<
bool>(
"embedHighLevelSelection",
true)->setComment(
"embed high level selection");
1081 ->
setComment(
"input with high level selection");
1083 ->
setComment(
"input with high level selection");
1094 bool primaryVertexIsValid,
1096 bool beamspotIsValid) {
1100 std::pair<bool, Measurement1D>
result =
1102 double d0_corr = result.second.value();
1103 double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1108 d0_corr = result.second.value();
1109 d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1118 d0_corr = result.second.value();
1119 d0_err = beamspotIsValid ? result.second.error() : -1.0;
1124 d0_corr = result.second.value();
1125 d0_err = beamspotIsValid ? result.second.error() : -1.0;
bool embedTpfmsMuon_
embed track from tpfms muon fit into the muon
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
bool enabled() const
'true' 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) ...
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T >>> &tokens)
constexpr double deltaPhi(double phi1, double phi2)
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
T getParameter(std::string const &) const
double ecalEnergy() const
return corrected Ecal energy
void setComment(std::string const &value)
Assists in assimilating all pat::UserData into pat objects.
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
bool addPuppiIsolation_
add puppi isolation
void embedDytMuon()
embed reference to the above dyt Track
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
bool isNonnull() const
Checks for non-null.
void embedTpfmsMuon()
embed reference to the above tpfms Track
edm::EDGetTokenT< edm::ValueMap< reco::MuonMETCorrectionData > > tcMETMuonCorrsToken_
source of tcMET muon corrections
double eta() const final
momentum pseudorapidity
void setIsolation(IsolationKeys key, float value)
bool embedTcMETMuonCorrs_
embed muon MET correction info for tcMET into the muon
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
void embedTcMETMuonCorrs(const reco::MuonMETCorrectionData &t)
edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
input source of the primary vertex
bool contains(EventRange const &lh, EventID const &rh)
edm::EDGetTokenT< edm::ValueMap< reco::MuonTimeExtra > > muonTimeExtraToken_
input tag for reading inverse beta
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
void embedCombinedMuon()
set reference to Track reconstructed in both tracked and muon detector (reimplemented from reco::Muon...
edm::EDGetTokenT< double > rho_
edm::EDGetTokenT< edm::View< reco::Muon > > muonToken_
input source
void embedTunePMuonBestTrack(bool force=false)
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 getByToken(EDGetToken token, Handle< PROD > &result) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
void setAllowAnything()
allow any parameter label/value pairs
double zError() const
error on z
void setSimFlavour(int f)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
bool embedCaloMETMuonCorrs_
embed muon MET correction info for caloMET into the muon
bool isChargedHadron(long pdgid)
~PATMuonProducer() override
default destructur
edm::EDGetTokenT< edm::ValueMap< reco::MuonSimInfo > > simInfo_
MC info.
void embedMuonBestTrack(bool force=false)
std::vector< pat::PackedCandidate > PackedCandidateCollection
void setIsolationPUPPINoLeptons(float chargedhadrons, float neutralhadrons, float photons)
sets PUPPINoLeptons isolations
void setMuonMiniIso(pat::Muon &aMuon, const pat::PackedCandidateCollection *pc)
reco::TransientTrack build(const reco::Track *p) const
PATMuonProducer(const edm::ParameterSet &iConfig, PATMuonHeavyObjectCache const *)
default constructir
bool addTriggerMatching_
Trigger.
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
bool embedBestTrack_
embed the track from best muon measurement (global pflow)
CH
LTS and SET for low trigger suppression.
edm::EDGetTokenT< reco::JetCorrector > mvaL1Corrector_
double pt() const final
transverse momentum
bool addResolutions_
add resolutions to the muon (this will be data members of th muon even w/o embedding) ...
void unpackPathNames(const edm::TriggerNames &names)
unpack trigger names into indices
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
std::vector< double > miniIsoParams_
void setSimPhi(float phi)
PFCandidateCollection::const_iterator PFCandidateConstIterator
iterator
bool computePuppiCombinedIso_
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
void setSimProdRho(float rho)
void setSimHeaviestMotherFlavour(int id)
void setPFCandidateRef(const reco::PFCandidateRef &ref)
add a reference to the source IsolatedPFCandidate
const Point & position() const
position
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_
const std::string names[nVars_]
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
void setSimType(reco::MuonSimType type)
void embedStandAloneMuon()
set reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
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 ...
void setIsolationPUPPI(float chargedhadrons, float neutralhadrons, float photons)
sets PUPPI isolations
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
'true' 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.
void embedTrack()
set reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
static void fillDescription(edm::ParameterSetDescription &iDesc)
const PFIsolation & miniPFIsolation() const
edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
input source of the primary vertex/beamspot
bool addInverseBeta_
add combined inverse beta measurement into the muon
bool useParticleFlow_
switch to use particle flow (PF2PAT) or not
pat::PATUserDataHelper< pat::Muon > userDataHelper_
helper class to add userData to the muon
bool enabled() const
True if it has a non null configuration.
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
bool embedStandAloneMuon_
embed track from muon system into the muon
void setComment(std::string const &value)
double muonRelMiniIsoPUCorrected(const PFIsolation &iso, const math::XYZTLorentzVector &p4, double dr, double rho, const std::vector< double > &area)
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
#define DEFINE_FWK_MODULE(type)
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
GreaterByPt< Muon > pTComparator_
bool embedTrack_
embed the track from inner tracker into the muon
void setDB(double dB, double edB, IPTYPE type=PV2D)
bool addGenMatch_
add generator match information
PATMuonHeavyObjectCache(const edm::ParameterSet &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
description of config file parameters
void fillL1TriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const edm::ESHandle< GlobalTrackingGeometry > &geometry)
bool isGlobalMuon() const override
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.
void embedPFCandidate()
embed the IsolatedPFCandidate pointed to by pfCandidateRef_
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
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
everything that needs to be done during the event loop
reco::PFCandidateRef pfCandidateRef() const
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
const LorentzVector & p4() const final
four-momentum Lorentz vector
static std::string const triggerResults
ParameterDescriptionBase * add(U const &iLabel, T const &value)
double puppiCombinedIsolation(const pat::Muon &muon, const pat::PackedCandidateCollection *pc)
void readTimeExtra(const reco::MuonTimeExtra &t)
std::vector< std::string > hltCollectionFilters_
reco::MuonRef muonRef() const
void fillHltTriggerInfo(pat::Muon &muon, edm::Handle< std::vector< pat::TriggerObjectStandAlone >> &triggerObjects, const edm::TriggerNames &names, const std::vector< std::string > &collection_names)
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=0, bool run2016_hip_mitigation=false)
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
bool isAValidMuonTrack(const MuonTrackType &type) const
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
void addGenParticleRef(const reco::GenParticleRef &ref)
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 >
void setPfEcalEnergy(float pfEcalEnergy)
bool embedTunePBestTrack_
embed the track from best muon measurement (muon only)
T const * product() const
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
double getRelMiniIsoPUCorrected(const pat::Muon &muon, double rho, const std::vector< double > &area)
void setSimMotherPdgId(int id)
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
void addTriggerObjectMatch(const TriggerObjectStandAlone &trigObj)
add a trigger match
void setExtSimType(reco::ExtendedMuonSimType type)
std::vector< MuonChamberMatch > & matches()
get muon matching information
void setMiniPFIsolation(PFIsolation const &iso)
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
void setSimProdZ(float z)
Particle reconstructed by the particle flow algorithm.
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
pat::helper::EfficiencyLoader efficiencyLoader_
helper class to add efficiencies to the muon
bool embedPickyMuon_
embed track from picky muon fit into the muon
void setNormChi2(double normChi2)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
bool embedDytMuon_
embed track from DYT muon fit into the muon
void embedCaloMETMuonCorrs(const reco::MuonMETCorrectionData &t)
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)
const GeomDet * idToDet(DetId) const override
float miniIsoDr(const math::XYZTLorentzVector &p4, float mindr, float maxdr, float kt_scale)
bool isPhoton(long pdgid)
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
const Point & position() const
position
IsolationLabels isoDepositLabels_
input source for isoDeposits
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
input tags for generator match information
Covariance3DMatrix rotatedCovariance3D() const
IsolationLabels isolationValueLabels_
input source isolation value maps
bool recomputeBasicSelectors_
void embedPickyMuon()
embed reference to the above picky Track
primaryVertex
hltOfflineBeamSpot for HLTMON
bool forceEmbedBestTrack_
force separate embed of the best track even if already embedded
bool embedPFCandidate_
embed pfCandidates into the muon
double phi() const final
momentum azimuthal angle
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
void setNumberOfValidHits(unsigned int numberOfValidHits)
bool computeMuonMVA_
standard muon selectors
void setSimEta(float eta)
bool embedCombinedMuon_
embed track of the combined fit into the muon
Analysis-level muon class.
pat::helper::KinResolutionsLoader resolutionLoader_
helper class to add resolutions to the muon
static std::string const source
void setP4(const LorentzVector &p4) final
set 4-momentum
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
std::optional< GlobalPoint > getMuonDirection(const reco::MuonChamberMatch &chamberMatch, const edm::ESHandle< GlobalTrackingGeometry > &geometry, const DetId &chamberId)
bool isNeutralHadron(long pdgid)
Global3DVector GlobalVector
Analysis-level trigger object class (stand-alone)
void setSimMatchQuality(float quality)
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
void setSimTpEvent(int tpEvent)
bool embedHighLevelSelection_
embed high level selection variables