From 980739709fcc2a63d8b2cd4e0ee11d8cc1322cfa Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Fri, 9 Nov 2018 11:03:44 -0600 Subject: [PATCH] First pass at adding JERC-relevant variables --- .../NanoAOD/plugins/NPUTablesProducer.cc | 39 ++++++++++++++++--- PhysicsTools/NanoAOD/python/globals_cff.py | 4 ++ PhysicsTools/NanoAOD/python/jets_cff.py | 12 +++++- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc b/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc index c891e17720bf5..abc737527e416 100644 --- a/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/NPUTablesProducer.cc @@ -6,6 +6,7 @@ #include "DataFormats/NanoAOD/interface/FlatTable.h" #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" +#include "DataFormats/VertexReco/interface/Vertex.h" #include #include @@ -14,7 +15,9 @@ class NPUTablesProducer : public edm::global::EDProducer<> { public: NPUTablesProducer( edm::ParameterSet const & params ) : - npuTag_(consumes>(params.getParameter("src"))) + npuTag_(consumes>(params.getParameter("src"))), + pvTag_(consumes>(params.getParameter("pvsrc"))), + vz_(params.getParameter>("zbins")) { produces(); } @@ -24,24 +27,43 @@ class NPUTablesProducer : public edm::global::EDProducer<> { void produce(edm::StreamID id, edm::Event& iEvent, const edm::EventSetup& iSetup) const override { auto npuTab = std::make_unique(1, "Pileup", true); - edm::Handle > npuInfo; + edm::Handle> pvsIn; + iEvent.getByToken(pvTag_, pvsIn); + const double refpvz = (*pvsIn)[0].position().z(); + + edm::Handle > npuInfo; if (iEvent.getByToken(npuTag_, npuInfo)) { - fillNPUObjectTable(*npuInfo, *npuTab); + fillNPUObjectTable(*npuInfo, *npuTab, refpvz); } iEvent.put(std::move(npuTab)); } - void fillNPUObjectTable(const std::vector & npuProd, nanoaod::FlatTable & out) const { + void fillNPUObjectTable(const std::vector & npuProd, nanoaod::FlatTable & out, double refpvz) const { // Get BX 0 unsigned int bx0 = 0; unsigned int nt = 0; unsigned int npu = 0; + + auto zbin = std::lower_bound( vz_.begin(), vz_.end()-1, std::abs(refpvz) ); + float pudensity = 0; + float gpudensity = 0; + for(unsigned int ibx=0; ibx zpositions; + unsigned int nzpositions = npuProd[ibx].getPU_zpositions().size(); + for (unsigned int j=0; j { for(unsigned int ipu=npuProd.size()-1; ipu>bx0; ipu--) { loot+=npuProd[ipu].getPU_NumInteractions(); } - out.addColumnValue("nTrueInt", nt, "the true mean number of the poisson distribution for this event from which the number of interactions each bunch crossing has been sampled", nanoaod::FlatTable::FloatColumn); + out.addColumnValue("nTrueInt", nt, "the true mean number of the poisson distribution for this event from which the number of interactions each bunch crossing has been sampled", nanoaod::FlatTable::FloatColumn); out.addColumnValue("nPU", npu, "the number of pileup interactions that have been added to the event in the current bunch crossing", nanoaod::FlatTable::IntColumn); out.addColumnValue("sumEOOT", eoot, "number of early out of time pileup" , nanoaod::FlatTable::IntColumn); out.addColumnValue("sumLOOT", loot, "number of late out of time pileup" , nanoaod::FlatTable::IntColumn); + out.addColumnValue("pudensity", pudensity, "PU vertices / mm", nanoaod::FlatTable::FloatColumn); + out.addColumnValue("gpudensity", gpudensity, "Generator-level PU vertices / mm", nanoaod::FlatTable::FloatColumn); } static void fillDescriptions(edm::ConfigurationDescriptions & descriptions) { edm::ParameterSetDescription desc; desc.add("src", edm::InputTag("slimmedAddPileupInfo"))->setComment("tag for the PU information (vector)"); + desc.add("pvsrc", edm::InputTag("offlineSlimmedPrimaryVertices"))->setComment("tag for the PVs"); + desc.add> ("zbins", {})->setComment("Z bins to compute the generator-level number of PU vertices per mm"); descriptions.add("puTable", desc); } protected: const edm::EDGetTokenT> npuTag_; + const edm::EDGetTokenT> pvTag_; + + const std::vector vz_; }; #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/PhysicsTools/NanoAOD/python/globals_cff.py b/PhysicsTools/NanoAOD/python/globals_cff.py index 0c58aed9f8f8f..bfa17e721636b 100644 --- a/PhysicsTools/NanoAOD/python/globals_cff.py +++ b/PhysicsTools/NanoAOD/python/globals_cff.py @@ -6,11 +6,15 @@ fixedGridRhoFastjetAll = ExtVar( cms.InputTag("fixedGridRhoFastjetAll"), "double", doc = "rho from all PF Candidates, used e.g. for JECs" ), fixedGridRhoFastjetCentralNeutral = ExtVar( cms.InputTag("fixedGridRhoFastjetCentralNeutral"), "double", doc = "rho from neutral PF Candidates with |eta| < 2.5, used e.g. for rho corrections of some lepton isolations" ), fixedGridRhoFastjetCentralCalo = ExtVar( cms.InputTag("fixedGridRhoFastjetCentralCalo"), "double", doc = "rho from calo towers with |eta| < 2.5, used e.g. egamma PFCluster isolation" ), + fixedGridRhoFastjetCentral = ExtVar( cms.InputTag("fixedGridRhoFastjetCentral"), "double", doc = "rho from all PF Candidates for central region, used e.g. for JECs" ), + fixedGridRhoFastjetCentralChargedPileUp = ExtVar( cms.InputTag("fixedGridRhoFastjetCentralChargedPileUp"), "double", doc = "rho from charged PF Candidates for central region, used e.g. for JECs" ), ) ) puTable = cms.EDProducer("NPUTablesProducer", src = cms.InputTag("slimmedAddPileupInfo"), + pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"), + zbins = cms.vdouble( [0.0,1.7,2.6,3.0,3.5,4.2,5.2,6.0,7.5,9.0,12.0] ) ) genTable = cms.EDProducer("SimpleGenEventFlatTableProducer", diff --git a/PhysicsTools/NanoAOD/python/jets_cff.py b/PhysicsTools/NanoAOD/python/jets_cff.py index c07dccb089f1a..b058060ba3ccd 100644 --- a/PhysicsTools/NanoAOD/python/jets_cff.py +++ b/PhysicsTools/NanoAOD/python/jets_cff.py @@ -3,7 +3,7 @@ from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016 from PhysicsTools.NanoAOD.common_cff import * - +from RecoJets.JetProducers.ak4PFJetsBetaStar_cfi import * ##################### User floats producers, selectors ########################## @@ -111,6 +111,12 @@ #elesrc = cms.InputTag("slimmedElectrons") ) +jercVars = cms.EDProducer("BetaStarPackedCandidateVarProducer", + srcJet = cms.InputTag("slimmedJets"), + srcPF = cms.InputTag("packedPFCandidates"), + maxDR = cms.double(0.4) +) + updatedJetsWithUserData = cms.EDProducer("PATJetUserDataEmbedder", src = cms.InputTag("updatedJets"), @@ -131,6 +137,8 @@ ptD = cms.InputTag("bJetVars:ptD"), genPtwNu = cms.InputTag("bJetVars:genPtwNu"), qgl = cms.InputTag('qgtagger:qgLikelihood'), + jercCHPUF = cms.InputTag("jercVars:chargedHadronPUEnergyFraction"), + jercCHF = cms.InputTag("jercVars:chargedHadronCHSEnergyFraction"), ), userInts = cms.PSet( tightId = cms.InputTag("tightJetId"), @@ -214,6 +222,8 @@ chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6), neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6), muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6), + jercCHPUF = Var("userFloat('jercCHPUF')", float, doc="Pileup Charged Hadron Energy Fraction with the JERC group definition", precision= 6), + jercCHF = Var("userFloat('jercCHF')", float, doc="Charged Hadron Energy Fraction with the JERC group definition", precision= 6), ) )