Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Configuration/Applications/python/ConfigBuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,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 @@ -987,6 +988,8 @@ def define_Configs(self):
self.REPACKDefaultSeq='DigiToRawRepack'
self.PATDefaultSeq='miniAOD'
self.PATGENDefaultSeq='miniGEN'
#TODO: Check based of file input
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Kenneth - did you have an idea how to do this? I've been running the GEN and NANOGEN steps independently due to different CMSSW versions, and so had to change this logic for my use case. I see cmsDriverOptions.py has a --inputEventContent argument, but I don't know if requiring that argument is ideal.

Copy link
Owner Author

@kdlong kdlong Jun 3, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, I don't think it's possible to have pieces of a config that run in different CMSSW versions. But for GEN it really doesn't matter, I just use the 10_6 or 11_X for everything.

(assuming you're using a gridpack, it doesn't matter at all, and you probably don't care tooooo much about the Pythia version)

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way you can see a lot of configs and cmsDriver commands that I've used here:

https://github.com/kdlong/WMassNanoGen

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, the scripts are helpful!

self.NANOGENDefaultSeq='nanogenSequence' if any([x in self.stepMap for x in ['LHE', 'GEN', 'AOD']]) else 'nanogenMiniSequence'
self.NANODefaultSeq='nanoSequence'

self.EVTCONTDefaultCFF="Configuration/EventContent/EventContent_cff"
Expand Down Expand Up @@ -1690,6 +1693,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
133 changes: 133 additions & 0 deletions PhysicsTools/NanoAOD/python/nanogen_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
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
)

nanogenMiniSequence = cms.Sequence(
nanoMetadata+
mergedGenParticles+
genParticles2HepMC+
particleLevel+
genJetTable+
patJetPartons+
genJetFlavourAssociation+
genJetFlavourTable+
genJetAK8Table+
genJetAK8FlavourAssociation+
genJetAK8FlavourTable+
tauGenJets+
tauGenJetsSelectorAllHadrons+
genVisTaus+
genVisTauTable+
genTable+
genParticleTables+
tautagger+
genParticles2HepMCHiggsVtx+
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 customizeNanoGENFromMini(process):
process.lheInfoTable.storeLHEParticles = True
process.lheInfoTable.precision = 14
process.genParticleTable.src = "prunedGenParticles"
process.patJetPartons.particles = "prunedGenParticles"
process.particleLevel.src = "genParticles2HepMC:unsmeared"
process.rivetProducerHTXS.HepMCCollection = "genParticles2HepMCHiggsVtx:unsmeared"

process.genJetTable.src = "slimmedGenJets"
process.genJetFlavourAssociation.jets = process.genJetTable.src
process.genJetFlavourTable.src = process.genJetTable.src
process.genJetFlavourTable.jetFlavourInfos = "genJetFlavourAssociation"
process.genJetAK8Table.src = "slimmedGenJetsAK8"
process.genJetAK8FlavourAssociation.jets = process.genJetAK8Table.src
process.genJetAK8FlavourTable.src = process.genJetAK8Table.src
process.tauGenJets.GenParticles = "prunedGenParticles"
process.genVisTaus.srcGenParticles = "prunedGenParticles"

return process

def customizeNanoGEN(process):
process.lheInfoTable.storeLHEParticles = True
process.lheInfoTable.precision = 14
process.genParticleTable.src = "genParticles"
process.patJetPartons.particles = "genParticles"
process.particleLevel.src = "generatorSmeared"
process.rivetProducerHTXS.HepMCCollection = "generatorSmeared"

process.genJetTable.src = "ak4GenJets"
process.genJetFlavourAssociation.jets = process.genJetTable.src
process.genJetFlavourTable.src = process.genJetTable.src
process.genJetFlavourTable.jetFlavourInfos = "genJetFlavourAssociation"
process.genJetAK8Table.src = "ak8GenJets"
process.genJetAK8FlavourAssociation.jets = process.genJetAK8Table.src
process.genJetAK8FlavourTable.src = process.genJetAK8Table.src
process.tauGenJets.GenParticles = "genParticles"
process.genVisTaus.srcGenParticles = "genParticles"

return process