Skip to content

Commit

Permalink
Merge pull request #29064 from nurfikri89/portFrom110XTo106X_nanojme_…
Browse files Browse the repository at this point in the history
…fixesAndupdateforData

Backport of #28854 (Updates for Custom JME NanoAODs: Fix JetID, update modifiers and able to run on data)
  • Loading branch information
cmsbuild committed Mar 3, 2020
2 parents 5527453 + 4330dc8 commit d26fff8
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 43 deletions.
47 changes: 22 additions & 25 deletions PhysicsTools/NanoAOD/python/custom_jme_cff.py
@@ -1,7 +1,7 @@
import FWCore.ParameterSet.Config as cms

from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016
from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017

from PhysicsTools.NanoAOD.common_cff import Var, P4Vars
from PhysicsTools.NanoAOD.jets_cff import jetTable
Expand Down Expand Up @@ -178,11 +178,6 @@
jercCHF = jetTable.variables.jercCHF,
)

for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
modifier.toModify(JETVARS,
jetId = Var("userInt('tightId')*2+userInt('looseId')", int, doc = "Jet ID flags bit1 is loose, bit2 is tight")
)

#============================================
#
# TableGenJetAdder
Expand Down Expand Up @@ -330,14 +325,6 @@ def addTable(self, proc, recoJetInfo):
)
currentTasks.append(table)

tightJetIdLepVeto = "tightJetIdLepVeto{}".format(recoJetInfo.jetTagName)
if not recoJetInfo.skipUserData:
altTasks = copy.deepcopy(currentTasks)
for idx, task in enumerate(altTasks):
if task == tightJetIdLepVeto:
altTasks[idx] = looseJetId
for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
modifier.toReplaceWith(currentTasks, altTasks)
self.main.extend(currentTasks)

def AddPileUpJetIDVars(proc):
Expand Down Expand Up @@ -399,7 +386,7 @@ def AddPileUpJetIDVars(proc):
proc.jetTable.variables.jetRchg = Var("userFloat('jetRchg')", float, doc="fraction of jet pT carried by the leading charged constituent", precision= 6)
proc.jetTable.variables.nCharged = Var("userInt('nCharged')", int, doc="number of charged constituents")

def PrepJMECustomNanoAOD(process):
def PrepJMECustomNanoAOD(process,runOnMC):
#
# Additional variables to AK4GenJets
#
Expand Down Expand Up @@ -444,8 +431,8 @@ def PrepJMECustomNanoAOD(process):
process.fatJetTable.variables.jercCHPUF = JETVARS.jercCHPUF
process.fatJetTable.variables.jercCHF = JETVARS.jercCHF
#
# Remove any pT cuts.
#
#
#
process.finalJets.cut = "" # 15 -> 10
process.finalJetsAK8.cut = "" # 170 -> 170
process.genJetTable.cut = "" # 10 -> 8
Expand All @@ -470,19 +457,29 @@ def PrepJMECustomNanoAOD(process):
genJetInfo = genJA.addGenJetCollection(process, **cfg)
tableGenJA.addTable(process, genJetInfo)

process.nanoSequenceMC += genJA.getSequence(process)
process.nanoSequenceMC += tableGenJA.getSequence(process)

#
# Add RecoJets to NanoAOD
#
recoJA = RecoJetAdder()
recoJA = RecoJetAdder(runOnMC=runOnMC)
tableRecoJA = TableRecoJetAdder()

for jetConfig in config_recojets:
cfg = { k : v for k, v in jetConfig.items() if k != "enabled" }
recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
tableRecoJA.addTable(process, recoJetInfo)

process.nanoSequenceMC += recoJA.getSequence(process)
process.nanoSequenceMC += tableRecoJA.getSequence(process)

if runOnMC:
process.nanoSequenceMC += genJA.getSequence(process)
process.nanoSequenceMC += recoJA.getSequence(process)
process.nanoSequenceMC += tableGenJA.getSequence(process)
process.nanoSequenceMC += tableRecoJA.getSequence(process)
else:
process.nanoSequence += recoJA.getSequence(process)
process.nanoSequence += tableRecoJA.getSequence(process)

def PrepJMECustomNanoAOD_MC(process):
PrepJMECustomNanoAOD(process,runOnMC=True)

def PrepJMECustomNanoAOD_Data(process):
PrepJMECustomNanoAOD(process,runOnMC=False)

77 changes: 59 additions & 18 deletions PhysicsTools/PatAlgos/python/tools/jetCollectionTools.py
Expand Up @@ -2,8 +2,8 @@

from FWCore.GuiBrowsers.ConfigToolBase import *

from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016
from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017

from RecoJets.JetProducers.PFJetParameters_cfi import PFJetParameters
from RecoJets.JetProducers.GenJetParameters_cfi import GenJetParameters
Expand Down Expand Up @@ -205,7 +205,7 @@ class RecoJetAdder(object):
"""
Tool to schedule modules for building a recojet collection with input MiniAODs
"""
def __init__(self):
def __init__(self,runOnMC=True):
self.prerequisites = []
self.main = []
self.bTagDiscriminators = ["None"] # No b-tagging by default
Expand All @@ -216,6 +216,7 @@ def __init__(self):
self.muLabel = "slimmedMuons"
self.elLabel = "slimmedElectrons"
self.gpLabel = "prunedGenParticles"
self.runOnMC = runOnMC

def getSequence(self, proc):
tasks = self.prerequisites + self.main
Expand Down Expand Up @@ -407,6 +408,11 @@ def addRecoJetCollection(self,

getJetMCFlavour = not recoJetInfo.doCalo and recoJetInfo.jetPUMethod != "cs"

if not self.runOnMC: #Remove modules for Gen-level object matching
delattr(proc, 'patJetGenJetMatch{}'.format(tagName))
delattr(proc, 'patJetPartonMatch{}'.format(tagName))
getJetMCFlavour = False

setattr(getattr(proc, "patJets{}".format(tagName)), "getJetMCFlavour", cms.bool(getJetMCFlavour))
setattr(getattr(proc, "patJetCorrFactors{}".format(tagName)), "payload", cms.string(recoJetInfo.jetCorrPayload))
selJet = "selectedPatJets{}".format(tagName)
Expand All @@ -423,27 +429,64 @@ def addRecoJetCollection(self,
setattr(proc, jercVar, proc.jercVars.clone(srcJet = selJet))
currentTasks.append(jercVar)
#
#
# JetID Loose
#
looseJetId = "looseJetId{}".format(tagName)
if looseJetId in self.main:
raise ValueError("Step '%s' already implemented" % looseJetId)
setattr(proc, looseJetId, proc.looseJetId.clone(src = selJet))
#
#
setattr(proc, looseJetId, proc.looseJetId.clone(
src = selJet,
filterParams=proc.looseJetId.filterParams.clone(
version ="WINTER16"
),
)
)
currentTasks.append(looseJetId)
#
# JetID Tight
#
tightJetId = "tightJetId{}".format(tagName)
if tightJetId in self.main:
raise ValueError("Step '%s' already implemented" % tightJetId)
setattr(proc, tightJetId, proc.tightJetId.clone(src = selJet))
setattr(proc, tightJetId, proc.tightJetId.clone(
src = selJet,
filterParams=proc.tightJetId.filterParams.clone(
version = "SUMMER18{}".format("PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")
),
)
)
tightJetIdObj = getattr(proc, tightJetId)
run2_jme_2016.toModify(
tightJetIdObj.filterParams,
version = "WINTER16"
)
run2_jme_2017.toModify(
tightJetIdObj.filterParams,
version = 'WINTER17{}'.format("PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")
)
currentTasks.append(tightJetId)
#
#
# JetID TightLepVeto
#
tightJetIdLepVeto = "tightJetIdLepVeto{}".format(tagName)
if tightJetIdLepVeto in self.main:
raise ValueError("Step '%s' already implemented" % tightJetIdLepVeto)
setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(src = selJet))
setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
src = selJet,
filterParams=proc.tightJetIdLepVeto.filterParams.clone(
version = "SUMMER18{}".format("PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")
),
)
)
tightJetIdLepVetoObj = getattr(proc, tightJetIdLepVeto)
run2_jme_2016.toModify(
tightJetIdLepVetoObj.filterParams,
version = "WINTER16"
)
run2_jme_2017.toModify(
tightJetIdLepVetoObj.filterParams,
version = 'WINTER17{}'.format("PUPPI" if recoJetInfo.jetPUMethod == "puppi" else ""),
)
currentTasks.append(tightJetIdLepVeto)
#
#
Expand All @@ -464,16 +507,14 @@ def addRecoJetCollection(self,
),
)
)
for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
selectedPatJetsWithUserDataObj = getattr(proc, selectedPatJetsWithUserData)
modifier.toModify(selectedPatJetsWithUserDataObj.userInts,
looseId = looseJetId,
tightIdLepVeto = None,
)
selectedPatJetsWithUserDataObj = getattr(proc, selectedPatJetsWithUserData)
run2_jme_2016.toModify(selectedPatJetsWithUserDataObj.userInts,
looseId = cms.InputTag(looseJetId),
)
currentTasks.append(selectedPatJetsWithUserData)
else:
selectedPatJetsWithUserData = "selectedPatJets{}".format(tagName)

#
# Not sure why we can't re-use patJetCorrFactors* created by addJetCollection()
# (even cloning doesn't work) Let's just create our own
Expand Down Expand Up @@ -502,8 +543,8 @@ def addRecoJetCollection(self,
jetCorrFactorsSource = [jetCorrFactors],
)
)

currentTasks.append(updatedJets)

self.main.extend(currentTasks)

return recoJetInfo

0 comments on commit d26fff8

Please sign in to comment.