Skip to content

Commit

Permalink
Merge pull request #30306 from kdlong/NanoGen_master
Browse files Browse the repository at this point in the history
GEN-only NanoAOD configs (NanoGEN) and cmsDriver support
  • Loading branch information
cmsbuild authored Sep 7, 2020
2 parents 2c7b8d6 + d5ef610 commit 2cb5c0d
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 19 deletions.
14 changes: 14 additions & 0 deletions Configuration/Applications/python/ConfigBuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,7 @@ def define_Configs(self):
self.RECOSIMDefaultCFF="Configuration/StandardSequences/RecoSim_cff"
self.PATDefaultCFF="Configuration/StandardSequences/PAT_cff"
self.NANODefaultCFF="PhysicsTools/NanoAOD/nano_cff"
self.NANOGENDefaultCFF="PhysicsTools/NanoAOD/nanogen_cff"
self.EIDefaultCFF=None
self.SKIMDefaultCFF="Configuration/StandardSequences/Skims_cff"
self.POSTRECODefaultCFF="Configuration/StandardSequences/PostRecoGenerator_cff"
Expand Down Expand Up @@ -986,6 +987,8 @@ def define_Configs(self):
self.REPACKDefaultSeq='DigiToRawRepack'
self.PATDefaultSeq='miniAOD'
self.PATGENDefaultSeq='miniGEN'
#TODO: Check based of file input
self.NANOGENDefaultSeq='nanogenSequence'
self.NANODefaultSeq='nanoSequence'

self.EVTCONTDefaultCFF="Configuration/EventContent/EventContent_cff"
Expand Down Expand Up @@ -1684,6 +1687,17 @@ def prepare_NANO(self, sequence = "nanoAOD"):
self._options.customise_commands = self._options.customise_commands + " \n"
self._options.customise_commands = self._options.customise_commands + "process.unpackedPatTrigger.triggerResults= cms.InputTag( 'TriggerResults::"+self._options.hltProcess+"' )\n"

def prepare_NANOGEN(self, sequence = "nanoAOD"):
''' Enrich the schedule with NANOGEN '''
# TODO: Need to modify this based on the input file type
fromGen = any([x in self.stepMap for x in ['LHE', 'GEN', 'AOD']])
self.loadDefaultOrSpecifiedCFF(sequence,self.NANOGENDefaultCFF)
self.scheduleSequence(sequence.split('.')[-1],'nanoAOD_step')
custom = "customizeNanoGEN" if fromGen else "customizeNanoGENFromMini"
if self._options.runUnscheduled:
self._options.customisation_file_unsch.insert(0, '.'.join([self.NANOGENDefaultCFF, custom]))
else:
self._options.customisation_file.insert(0, '.'.join([self.NANOGENDefaultCFF, custom]))

def prepare_EI(self, sequence = None):
''' Enrich the schedule with event interpretation '''
Expand Down
4 changes: 4 additions & 0 deletions PhysicsTools/NanoAOD/python/NanoAODEDMEventContent_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@
compressionLevel = cms.untracked.int32(9),
compressionAlgorithm = cms.untracked.string("LZMA"),
)
NANOAODGENEventContent = NanoAODEDMEventContent.clone(
compressionLevel = cms.untracked.int32(9),
compressionAlgorithm = cms.untracked.string("LZMA"),
)
20 changes: 20 additions & 0 deletions PhysicsTools/NanoAOD/python/genWeightsTable_cfi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import FWCore.ParameterSet.Config as cms

genWeightsTable = cms.EDProducer("GenWeightsTableProducer",
genEvent = cms.InputTag("generator"),
genLumiInfoHeader = cms.InputTag("generator"),
lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
preferredPDFs = cms.VPSet( # see https://lhapdf.hepforge.org/pdfsets.html
cms.PSet( name = cms.string("PDF4LHC15_nnlo_30_pdfas"), lhaid = cms.uint32(91400) ),
cms.PSet( name = cms.string("NNPDF31_nnlo_hessian_pdfas"), lhaid = cms.uint32(306000) ),
cms.PSet( name = cms.string("NNPDF30_nlo_as_0118"), lhaid = cms.uint32(260000) ), # for some 92X samples. Note that the nominal weight, 260000, is not included in the LHE ...
cms.PSet( name = cms.string("NNPDF30_lo_as_0130"), lhaid = cms.uint32(262000) ), # some MLM 80X samples have only this (e.g. /store/mc/RunIISummer16MiniAODv2/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/PUMoriond17_80X_mcRun2_asymptotic_2016_TrancheIV_v6_ext1-v2/120000/02A210D6-F5C3-E611-B570-008CFA197BD4.root )
cms.PSet( name = cms.string("NNPDF30_nlo_nf_4_pdfas"), lhaid = cms.uint32(292000) ), # some FXFX 80X samples have only this (e.g. WWTo1L1Nu2Q, WWTo4Q)
cms.PSet( name = cms.string("NNPDF30_nlo_nf_5_pdfas"), lhaid = cms.uint32(292200) ), # some FXFX 80X samples have only this (e.g. DYJetsToLL_Pt, WJetsToLNu_Pt, DYJetsToNuNu_Pt)
),
namedWeightIDs = cms.vstring(),
namedWeightLabels = cms.vstring(),
lheWeightPrecision = cms.int32(14),
maxPdfWeights = cms.uint32(150),
debug = cms.untracked.bool(False),
)
20 changes: 1 addition & 19 deletions PhysicsTools/NanoAOD/python/nano_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from PhysicsTools.NanoAOD.ttbarCategorization_cff import *
from PhysicsTools.NanoAOD.genparticles_cff import *
from PhysicsTools.NanoAOD.particlelevel_cff import *
from PhysicsTools.NanoAOD.genWeightsTable_cfi import *
from PhysicsTools.NanoAOD.vertices_cff import *
from PhysicsTools.NanoAOD.met_cff import *
from PhysicsTools.NanoAOD.triggerObjects_cff import *
Expand Down Expand Up @@ -93,25 +94,6 @@
)


genWeightsTable = cms.EDProducer("GenWeightsTableProducer",
genEvent = cms.InputTag("generator"),
genLumiInfoHeader = cms.InputTag("generator"),
lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
preferredPDFs = cms.VPSet( # see https://lhapdf.hepforge.org/pdfsets.html
cms.PSet( name = cms.string("PDF4LHC15_nnlo_30_pdfas"), lhaid = cms.uint32(91400) ),
cms.PSet( name = cms.string("NNPDF31_nnlo_hessian_pdfas"), lhaid = cms.uint32(306000) ),
cms.PSet( name = cms.string("NNPDF30_nlo_as_0118"), lhaid = cms.uint32(260000) ), # for some 92X samples. Note that the nominal weight, 260000, is not included in the LHE ...
cms.PSet( name = cms.string("NNPDF30_lo_as_0130"), lhaid = cms.uint32(262000) ), # some MLM 80X samples have only this (e.g. /store/mc/RunIISummer16MiniAODv2/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/PUMoriond17_80X_mcRun2_asymptotic_2016_TrancheIV_v6_ext1-v2/120000/02A210D6-F5C3-E611-B570-008CFA197BD4.root )
cms.PSet( name = cms.string("NNPDF30_nlo_nf_4_pdfas"), lhaid = cms.uint32(292000) ), # some FXFX 80X samples have only this (e.g. WWTo1L1Nu2Q, WWTo4Q)
cms.PSet( name = cms.string("NNPDF30_nlo_nf_5_pdfas"), lhaid = cms.uint32(292200) ), # some FXFX 80X samples have only this (e.g. DYJetsToLL_Pt, WJetsToLNu_Pt, DYJetsToNuNu_Pt)
cms.PSet( name = cms.string("NNPDF31_lo_as_0130"), lhaid = cms.uint32(315200) ), # SUSY signal samples use this
),
namedWeightIDs = cms.vstring(),
namedWeightLabels = cms.vstring(),
lheWeightPrecision = cms.int32(14),
maxPdfWeights = cms.uint32(150),
debug = cms.untracked.bool(False),
)
lheInfoTable = cms.EDProducer("LHETablesProducer",
lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
precision = cms.int32(14),
Expand Down
148 changes: 148 additions & 0 deletions PhysicsTools/NanoAOD/python/nanogen_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
from PhysicsTools.NanoAOD.taus_cff import *
from PhysicsTools.NanoAOD.jets_cff import *
from PhysicsTools.NanoAOD.globals_cff import *
from PhysicsTools.NanoAOD.genparticles_cff import *
from PhysicsTools.NanoAOD.particlelevel_cff import *
from PhysicsTools.NanoAOD.lheInfoTable_cfi import *
from PhysicsTools.NanoAOD.genWeightsTable_cfi import *

nanoMetadata = cms.EDProducer("UniqueStringProducer",
strings = cms.PSet(
tag = cms.string("untagged"),
)
)

metGenTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
src = cms.InputTag("genMetTrue"),
name = cms.string("GenMET"),
doc = cms.string("Gen MET"),
singleton = cms.bool(True),
extension = cms.bool(False),
variables = cms.PSet(
pt = Var("pt", float, doc="pt", precision=10),
phi = Var("phi", float, doc="phi", precision=10),
),
)

nanogenSequence = cms.Sequence(
nanoMetadata+
particleLevel+
genJetTable+
patJetPartons+
genJetFlavourAssociation+
genJetFlavourTable+
genJetAK8Table+
genJetAK8FlavourAssociation+
genJetAK8FlavourTable+
tauGenJets+
tauGenJetsSelectorAllHadrons+
genVisTaus+
genVisTauTable+
genTable+
genParticleTables+
tautagger+
rivetProducerHTXS+
particleLevelTables+
metGenTable+
genWeightsTable+
lheInfoTable
)

NANOAODGENoutput = cms.OutputModule("NanoAODOutputModule",
compressionAlgorithm = cms.untracked.string('LZMA'),
compressionLevel = cms.untracked.int32(9),
dataset = cms.untracked.PSet(
dataTier = cms.untracked.string('NANOAODSIM'),
filterName = cms.untracked.string('')
),
fileName = cms.untracked.string('nanogen.root'),
outputCommands = cms.untracked.vstring(
'drop *',
"keep nanoaodFlatTable_*Table_*_*", # event data
"keep String_*_genModel_*", # generator model data
"keep nanoaodMergeableCounterTable_*Table_*_*", # accumulated per/run or per/lumi data
"keep nanoaodUniqueString_nanoMetadata_*_*", # basic metadata
)
)

def nanoGenCommonCustomize(process):
process.lheInfoTable.storeLHEParticles = True
process.lheInfoTable.precision = 14
process.genJetFlavourAssociation.jets = process.genJetTable.src
process.genJetFlavourTable.src = process.genJetTable.src
process.genJetAK8FlavourAssociation.jets = process.genJetAK8Table.src
process.genJetAK8FlavourTable.src = process.genJetAK8Table.src
process.particleLevel.particleMaxEta = 999.
process.particleLevel.lepMinPt = 0.
process.particleLevel.lepMaxEta = 999.
process.genJetFlavourTable.jetFlavourInfos = "genJetFlavourAssociation"

def customizeNanoGENFromMini(process):
process.nanoAOD_step.insert(0, process.genParticles2HepMCHiggsVtx)
process.nanoAOD_step.insert(0, process.genParticles2HepMC)
process.nanoAOD_step.insert(0, process.mergedGenParticles)

process.rivetProducerHTXS.HepMCCollection = "genParticles2HepMCHiggsVtx:unsmeared"
process.genParticleTable.src = "prunedGenParticles"
process.patJetPartons.particles = "prunedGenParticles"
process.particleLevel.src = "genParticles2HepMC:unsmeared"

process.genJetTable.src = "slimmedGenJets"
process.genJetAK8Table.src = "slimmedGenJetsAK8"
process.tauGenJets.GenParticles = "prunedGenParticles"
process.genVisTaus.srcGenParticles = "prunedGenParticles"
nanoGenCommonCustomize(process)

return process

def customizeNanoGEN(process):
process.rivetProducerHTXS.HepMCCollection = "generatorSmeared"
process.genParticleTable.src = "genParticles"
process.patJetPartons.particles = "genParticles"
process.particleLevel.src = "generatorSmeared"

process.genJetTable.src = "ak4GenJets"
process.genJetAK8Table.src = "ak8GenJets"
process.tauGenJets.GenParticles = "genParticles"
process.genVisTaus.srcGenParticles = "genParticles"
nanoGenCommonCustomize(process)
return process

# Prune gen particles with tight conditions applied in usual NanoAOD
def pruneGenParticlesNano(process):
process.finalGenParticles = finalGenParticles.clone()
process.genParticleTable.src = "prunedGenParticles"
process.patJetPartons.particles = "prunedGenParticles"
process.nanoAOD_step.insert(0, process.finalGenParticles)
return process

# Prune gen particles with conditions applied in usual MiniAOD
def pruneGenParticlesMini(process):
from PhysicsTools.PatAlgos.slimming.prunedGenParticles_cfi import prunedGenParticles
process.prunedGenParticles = prunedGenParticles.clone()
if process.nanoAOD_step.contains(process.nanogenMiniSequence):
raise ValueError("Applying the MiniAOD genParticle pruner to MiniAOD is redunant. " \
"Use a different customization.")
process.genParticleTable.src = "prunedGenParticles"
process.patJetPartons.particles = "prunedGenParticles"
process.nanoAOD_step.insert(0, process.prunedGenParticles)
return process

def setGenFullPrecision(process):
process.genParticleTable.variables.pt.precision = 23
process.genParticleTable.variables.eta.precision = 23
process.genParticleTable.variables.phi.precision = 23
process.genJetTable.variables.pt.precision = 23
process.genJetTable.variables.eta.precision = 23
process.genJetTable.variables.phi.precision = 23
process.metGenTable.variables.pt.precision = 23
process.metGenTable.variables.phi.precision = 23
return process

def setLHEFullPrecision(process):
process.lheInfoTable.precision = 23
return process

def setGenWeightsFullPrecision(process):
process.genWeightsTable.lheWeightPrecision = 23
return process

0 comments on commit 2cb5c0d

Please sign in to comment.