From b6bb6a0c1e3cf4e61b8eb242bc1e0240851efa75 Mon Sep 17 00:00:00 2001 From: matthieu Date: Mon, 31 Oct 2016 17:10:42 +0100 Subject: [PATCH 1/3] enable update of MET sgnificance when correcting the MET Conflicts: PhysicsTools/PatUtils/plugins/CorrectedPATMETProducer.cc --- .../plugins/CorrectedPATMETProducer.cc | 10 +++++++++- .../METAlgorithms/interface/METSignificance.h | 2 +- RecoMET/METAlgorithms/src/METSignificance.cc | 20 ++++++++++--------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/PhysicsTools/PatUtils/plugins/CorrectedPATMETProducer.cc b/PhysicsTools/PatUtils/plugins/CorrectedPATMETProducer.cc index b804e1228b4a2..426cac99065d0 100644 --- a/PhysicsTools/PatUtils/plugins/CorrectedPATMETProducer.cc +++ b/PhysicsTools/PatUtils/plugins/CorrectedPATMETProducer.cc @@ -15,6 +15,7 @@ #include "DataFormats/METReco/interface/CorrMETData.h" #include "JetMETCorrections/Type1MET/interface/AddCorrectionsToGenericMET.h" +#include "RecoMET/METAlgorithms/interface/METSignificance.h" #include @@ -49,7 +50,6 @@ class CorrectedPATMETProducer : public edm::stream::EDProducer<> edm::EDGetTokenT token_; - void produce(edm::Event& evt, const edm::EventSetup& es) override { edm::Handle srcMETCollection; @@ -62,6 +62,14 @@ class CorrectedPATMETProducer : public edm::stream::EDProducer<> pat::MET outMET(corrMET, srcMET); auto product = std::make_unique(); + + reco::METCovMatrix cov=srcMET.getSignificanceMatrix(); + if( !(cov(0,0)==0 && cov(0,1)==0 && cov(1,0)==0 && cov(1,1)==0) ) { + outMET.setSignificanceMatrix(cov); + double metSig=metsig::METSignificance::getSignificance(cov, outMET); + outMET.setMETSignificance(metSig); + } + product->push_back(outMET); evt.put(std::move(product)); } diff --git a/RecoMET/METAlgorithms/interface/METSignificance.h b/RecoMET/METAlgorithms/interface/METSignificance.h index a2912483ce43a..33a27610ecbbe 100644 --- a/RecoMET/METAlgorithms/interface/METSignificance.h +++ b/RecoMET/METAlgorithms/interface/METSignificance.h @@ -46,7 +46,7 @@ namespace metsig { JME::JetResolutionScaleFactor & resSFObj, bool isRealData); - double getSignificance(const reco::METCovMatrix& cov, const reco::MET& met ) const; + static double getSignificance(const reco::METCovMatrix& cov, const reco::MET& met ); private: bool cleanJet(const reco::Jet& jet, diff --git a/RecoMET/METAlgorithms/src/METSignificance.cc b/RecoMET/METAlgorithms/src/METSignificance.cc index 7dbeefc274680..54287d242be6f 100644 --- a/RecoMET/METAlgorithms/src/METSignificance.cc +++ b/RecoMET/METAlgorithms/src/METSignificance.cc @@ -20,16 +20,18 @@ Description: [one line class summary] metsig::METSignificance::METSignificance(const edm::ParameterSet& iConfig) { - edm::ParameterSet cfgParams = iConfig.getParameter("parameters"); + // if(iConfig.exists("parameters")) { + edm::ParameterSet cfgParams = iConfig.getParameter("parameters"); - double dRmatch = cfgParams.getParameter("dRMatch"); - dR2match_ = dRmatch*dRmatch; + double dRmatch = cfgParams.getParameter("dRMatch"); + dR2match_ = dRmatch*dRmatch; + + jetThreshold_ = cfgParams.getParameter("jetThreshold"); + jetEtas_ = cfgParams.getParameter >("jeta"); + jetParams_ = cfgParams.getParameter >("jpar"); + pjetParams_ = cfgParams.getParameter >("pjpar"); + // } - jetThreshold_ = cfgParams.getParameter("jetThreshold"); - jetEtas_ = cfgParams.getParameter >("jeta"); - jetParams_ = cfgParams.getParameter >("jpar"); - pjetParams_ = cfgParams.getParameter >("pjpar"); - } metsig::METSignificance::~METSignificance() { @@ -172,7 +174,7 @@ metsig::METSignificance::getCovariance(const edm::View& jets, } double -metsig::METSignificance::getSignificance(const reco::METCovMatrix& cov, const reco::MET& met) const { +metsig::METSignificance::getSignificance(const reco::METCovMatrix& cov, const reco::MET& met) { // covariance matrix determinant double det = cov(0,0)*cov(1,1) - cov(0,1)*cov(1,0); From 9d3044a3f4be13630fb7586bf3a46507329843ad Mon Sep 17 00:00:00 2001 From: matthieu Date: Fri, 26 Aug 2016 10:27:23 +0200 Subject: [PATCH 2/3] enable the JER uncertainty variation when MET is not smeared --- PhysicsTools/PatAlgos/plugins/PATMETSlimmer.cc | 4 ++-- .../PatUtils/interface/SmearedJetProducerT.h | 17 ++++++++++++++--- .../tools/runMETCorrectionsAndUncertainties.py | 8 +++++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATMETSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATMETSlimmer.cc index a930cb9452fc7..b1902d557d9e9 100644 --- a/PhysicsTools/PatAlgos/plugins/PATMETSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATMETSlimmer.cc @@ -117,8 +117,8 @@ pat::PATMETSlimmer::OneMETShift::OneMETShift(pat::MET::METUncertainty shift_, pa case pat::MET::NoShift : snprintf(buff, 1023, baseTagStr.c_str(), ""); break; case pat::MET::JetEnUp : snprintf(buff, 1023, baseTagStr.c_str(), "JetEnUp"); break; case pat::MET::JetEnDown: snprintf(buff, 1023, baseTagStr.c_str(), "JetEnDown"); break; - case pat::MET::JetResUp : snprintf(buff, 1023, baseTagStr.c_str(), isSmeared?"JetResUp":""); break; - case pat::MET::JetResDown: snprintf(buff, 1023, baseTagStr.c_str(), isSmeared?"JetResDown":""); break; + case pat::MET::JetResUp : snprintf(buff, 1023, baseTagStr.c_str(), "JetResUp"); break; + case pat::MET::JetResDown: snprintf(buff, 1023, baseTagStr.c_str(), "JetResDown"); break; case pat::MET::MuonEnUp : snprintf(buff, 1023, baseTagStr.c_str(), "MuonEnUp"); break; case pat::MET::MuonEnDown: snprintf(buff, 1023, baseTagStr.c_str(), "MuonEnDown"); break; case pat::MET::ElectronEnUp : snprintf(buff, 1023, baseTagStr.c_str(), "ElectronEnUp"); break; diff --git a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h index 5bc1cb7bc9d8f..995c82d936836 100644 --- a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h +++ b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h @@ -131,14 +131,23 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { m_genJetMatcher = std::make_shared(cfg, consumesCollector()); std::int32_t variation = cfg.getParameter("variation"); + _nomVar=1; if (variation == 0) m_systematic_variation = Variation::NOMINAL; else if (variation == 1) m_systematic_variation = Variation::UP; else if (variation == -1) m_systematic_variation = Variation::DOWN; + else if (variation == 101) { + m_systematic_variation = Variation::NOMINAL; + _nomVar=1; + } + else if (variation == -101) { + m_systematic_variation = Variation::NOMINAL; + _nomVar=-1; + } else - throw edm::Exception(edm::errors::ConfigFileReadError, "Invalid value for 'variation' parameter. Only -1, 0 or 1 are supported."); + throw edm::Exception(edm::errors::ConfigFileReadError, "Invalid value for 'variation' parameter. Only -1, 0, 1 or 101, -101 are supported."); } produces(); @@ -234,7 +243,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { } double dPt = jet.pt() - genJet->pt(); - smearFactor = 1 + (jer_sf - 1.) * dPt / jet.pt(); + smearFactor = 1 + _nomVar*(jer_sf - 1.) * dPt / jet.pt(); } else if (jer_sf > 1) { /* @@ -247,7 +256,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { } std::normal_distribution<> d(0, sigma); - smearFactor = 1. + d(m_random_generator); + smearFactor = 1. + _nomVar*d(m_random_generator); } else if (m_debug) { std::cout << "Impossible to smear this jet" << std::endl; } @@ -298,5 +307,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { std::mt19937 m_random_generator; GreaterByPt jetPtComparator; + + int _nomVar; }; #endif diff --git a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py index b27a645b6b951..f5830db301ee9 100644 --- a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py +++ b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py @@ -966,7 +966,10 @@ def getVariations(self, process, metModName, identifier,preId, objectCollection, smear=False if "Smear" in metModName: smear=True - + else: + smear=True + varyByNsigmas=101 + shiftedCollModules['Up'] = self.createShiftedJetResModule(process, smear, objectCollection, +1.*varyByNsigmas, "Up", postfix) shiftedCollModules['Down'] = self.createShiftedJetResModule(process, smear, objectCollection, -1.*varyByNsigmas, @@ -1464,6 +1467,9 @@ def miniAODConfigurationPost(self, process, postfix): if hasattr(process, "patPFMetTxyCorr"+postfix): getattr(process, "patPFMetTxyCorr"+postfix).vertexCollection = cms.InputTag("offlineSlimmedPrimaryVertices") + if self._parameters['computeUncertainties'].value: + getattr(process, "shiftedPatJetResDown"+postfix).genJets = cms.InputTag("slimmedGenJets") + getattr(process, "shiftedPatJetResUp"+postfix).genJets = cms.InputTag("slimmedGenJets") def miniAODConfiguration(self, process, pfCandCollection, jetCollection, From 27b0a9110ec584d4eb5b35119228420a50cf1e6e Mon Sep 17 00:00:00 2001 From: matthieu Date: Mon, 7 Nov 2016 09:46:40 +0100 Subject: [PATCH 3/3] cleaning --- .../PatUtils/interface/SmearedJetProducerT.h | 12 ++++++------ RecoMET/METAlgorithms/src/METSignificance.cc | 16 +++++++--------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h index 995c82d936836..3a30d392873b8 100644 --- a/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h +++ b/PhysicsTools/PatUtils/interface/SmearedJetProducerT.h @@ -131,7 +131,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { m_genJetMatcher = std::make_shared(cfg, consumesCollector()); std::int32_t variation = cfg.getParameter("variation"); - _nomVar=1; + m_nomVar=1; if (variation == 0) m_systematic_variation = Variation::NOMINAL; else if (variation == 1) @@ -140,11 +140,11 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { m_systematic_variation = Variation::DOWN; else if (variation == 101) { m_systematic_variation = Variation::NOMINAL; - _nomVar=1; + m_nomVar=1; } else if (variation == -101) { m_systematic_variation = Variation::NOMINAL; - _nomVar=-1; + m_nomVar=-1; } else throw edm::Exception(edm::errors::ConfigFileReadError, "Invalid value for 'variation' parameter. Only -1, 0, 1 or 101, -101 are supported."); @@ -243,7 +243,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { } double dPt = jet.pt() - genJet->pt(); - smearFactor = 1 + _nomVar*(jer_sf - 1.) * dPt / jet.pt(); + smearFactor = 1 + m_nomVar*(jer_sf - 1.) * dPt / jet.pt(); } else if (jer_sf > 1) { /* @@ -256,7 +256,7 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { } std::normal_distribution<> d(0, sigma); - smearFactor = 1. + _nomVar*d(m_random_generator); + smearFactor = 1. + m_nomVar*d(m_random_generator); } else if (m_debug) { std::cout << "Impossible to smear this jet" << std::endl; } @@ -308,6 +308,6 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> { GreaterByPt jetPtComparator; - int _nomVar; + int m_nomVar; }; #endif diff --git a/RecoMET/METAlgorithms/src/METSignificance.cc b/RecoMET/METAlgorithms/src/METSignificance.cc index 54287d242be6f..3ba29c5a9398c 100644 --- a/RecoMET/METAlgorithms/src/METSignificance.cc +++ b/RecoMET/METAlgorithms/src/METSignificance.cc @@ -20,17 +20,15 @@ Description: [one line class summary] metsig::METSignificance::METSignificance(const edm::ParameterSet& iConfig) { - // if(iConfig.exists("parameters")) { - edm::ParameterSet cfgParams = iConfig.getParameter("parameters"); + edm::ParameterSet cfgParams = iConfig.getParameter("parameters"); - double dRmatch = cfgParams.getParameter("dRMatch"); - dR2match_ = dRmatch*dRmatch; + double dRmatch = cfgParams.getParameter("dRMatch"); + dR2match_ = dRmatch*dRmatch; - jetThreshold_ = cfgParams.getParameter("jetThreshold"); - jetEtas_ = cfgParams.getParameter >("jeta"); - jetParams_ = cfgParams.getParameter >("jpar"); - pjetParams_ = cfgParams.getParameter >("pjpar"); - // } + jetThreshold_ = cfgParams.getParameter("jetThreshold"); + jetEtas_ = cfgParams.getParameter >("jeta"); + jetParams_ = cfgParams.getParameter >("jpar"); + pjetParams_ = cfgParams.getParameter >("pjpar"); }