Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-27 02:50:26

0001 from PhysicsTools.NanoAOD.taus_cff import *
0002 from PhysicsTools.NanoAOD.jetMC_cff import *
0003 from PhysicsTools.NanoAOD.globals_cff import genTable,genFilterTable
0004 from PhysicsTools.NanoAOD.met_cff import metMCTable
0005 from PhysicsTools.NanoAOD.genparticles_cff import *
0006 from PhysicsTools.NanoAOD.particlelevel_cff import *
0007 from PhysicsTools.NanoAOD.genWeightsTable_cfi import *
0008 from PhysicsTools.NanoAOD.genVertex_cff import *
0009 from PhysicsTools.NanoAOD.common_cff import Var,CandVars
0010 from PhysicsTools.NanoAOD.simpleSingletonCandidateFlatTableProducer_cfi import simpleSingletonCandidateFlatTableProducer
0011 from RecoJets.JetProducers.ak4GenJets_cfi import ak4GenJets
0012 
0013 nanoMetadata = cms.EDProducer("UniqueStringProducer",
0014     strings = cms.PSet(
0015         tag = cms.string("untagged"),
0016     )
0017 )
0018 
0019 
0020 
0021 nanogenSequence = cms.Sequence(
0022     nanoMetadata+
0023     cms.Sequence(particleLevelTask)+
0024     genJetTable+
0025     patJetPartonsNano+
0026     genJetFlavourAssociation+
0027     genJetFlavourTable+
0028     genParticlesForJetsCharged+
0029     ak4GenJetsChargedOnly+
0030     trackGenJetAK4Table+
0031     genSubJetAK8Table+
0032     genJetAK8Table+
0033     genJetAK8FlavourAssociation+
0034     genJetAK8FlavourTable+
0035     cms.Sequence(genTauTask)+
0036     genTable+
0037     genIso+
0038     genFilterTable+
0039     cms.Sequence(genParticleTablesTask)+
0040     cms.Sequence(genVertexTablesTask)+
0041     tautagger+
0042     rivetProducerHTXS+
0043     cms.Sequence(particleLevelTablesTask)+
0044     metMCTable+
0045     genWeightsTable
0046 )
0047 
0048 def nanoGenCommonCustomize(process):
0049     process.rivetMetTable.extension = False
0050     process.lheInfoTable.storeLHEParticles = True
0051     process.lheInfoTable.precision = 14
0052     process.genWeightsTable.keepAllPSWeights = True
0053     process.genJetFlavourAssociation.jets = process.genJetTable.src
0054     process.genJetFlavourTable.src = process.genJetTable.src
0055     process.genJetAK8FlavourAssociation.jets = process.genJetAK8Table.src
0056     process.genJetAK8FlavourTable.src = process.genJetAK8Table.src
0057     process.particleLevel.particleMaxEta = 999.
0058     process.particleLevel.lepMinPt = 0.
0059     process.particleLevel.lepMaxEta = 999.
0060     process.genJetFlavourTable.jetFlavourInfos = "genJetFlavourAssociation"
0061     # Same as default RECO
0062     setGenPtPrecision(process, CandVars.pt.precision)
0063     setGenEtaPrecision(process, CandVars.eta.precision)
0064     setGenPhiPrecision(process, CandVars.phi.precision)
0065     setGenMassPrecision(process, CandVars.mass.precision)
0066 
0067     for output in ("NANOEDMAODSIMoutput", "NANOAODSIMoutput"):
0068         if hasattr(process, output):
0069             getattr(process, output).outputCommands.append("drop edmTriggerResults_*_*_*")
0070 
0071 def customizeNanoGENFromMini(process):
0072     process.nanogenSequence.insert(0, process.genParticles2HepMCHiggsVtx)
0073     process.nanogenSequence.insert(0, process.genParticles2HepMC)
0074     process.nanogenSequence.insert(0, process.mergedGenParticles)
0075 
0076     process.metMCTable.src = "slimmedMETs"
0077     process.metMCTable.variables.pt = Var("genMET.pt", float, doc="pt")
0078     process.metMCTable.variables.phi = Var("genMET.phi", float, doc="phi")
0079     process.metMCTable.variables.phi.precision = CandVars.phi.precision
0080 
0081     process.rivetProducerHTXS.HepMCCollection = "genParticles2HepMCHiggsVtx:unsmeared"
0082     process.genParticleTable.src = "prunedGenParticles"
0083     process.patJetPartonsNano.particles = "prunedGenParticles"
0084     process.particleLevel.src = "genParticles2HepMC:unsmeared"
0085     process.genIso.genPart = "prunedGenParticles"
0086 
0087     process.genJetTable.src = "slimmedGenJets"
0088     process.genJetAK8Table.src = "slimmedGenJetsAK8"
0089     process.tauGenJetsForNano.GenParticles = "prunedGenParticles"
0090     process.genVisTaus.srcGenParticles = "prunedGenParticles"
0091 
0092     nanoGenCommonCustomize(process)
0093 
0094     return process
0095 
0096 def customizeNanoGEN(process):
0097     process.metMCTable = simpleSingletonCandidateFlatTableProducer.clone(
0098         src = "genMetTrue",
0099         name = process.metMCTable.name,
0100         doc = process.metMCTable.doc,
0101         variables = cms.PSet(PTVars)
0102     )
0103 
0104     process.nanogenSequence.insert(0, process.genParticles2HepMCHiggsVtx)
0105     process.nanogenSequence.insert(0, process.genParticles2HepMC)
0106     process.genParticles2HepMCHiggsVtx.genParticles = "genParticles"
0107     process.genParticles2HepMC.genParticles = "genParticles"
0108 
0109     process.rivetProducerHTXS.HepMCCollection = "genParticles2HepMCHiggsVtx:unsmeared"
0110     process.genParticleTable.src = "genParticles"
0111     process.patJetPartonsNano.particles = "genParticles"
0112     process.particleLevel.src = "genParticles2HepMC:unsmeared"
0113 
0114     process.genJetTable.src = "ak4GenJetsNoNu"
0115     process.genJetAK8Table.src = "ak8GenJetsNoNu"
0116     process.tauGenJetsForNano.GenParticles = "genParticles"
0117     process.genVisTaus.srcGenParticles = "genParticles"
0118     process.load("RecoJets.JetProducers.ak8GenJets_cfi")
0119     process.ak8GenJetsNoNuConstituents =  process.ak8GenJetsConstituents.clone(src='ak8GenJetsNoNu')
0120     process.ak8GenJetsNoNuSoftDrop = process.ak8GenJetsSoftDrop.clone(src=cms.InputTag('ak8GenJetsNoNuConstituents', 'constituents'))
0121     process.genSubJetAK8Table.src = ("ak8GenJetsNoNuSoftDrop","SubJets")
0122     process.genParticlesForJetsCharged = cms.EDFilter("CandPtrSelector", src = cms.InputTag("genParticles"), cut = cms.string("charge != 0 && pt > 0.3 && status == 1 && abs(pdgId) != 12 && abs(pdgId) != 14 && abs(pdgId) != 16"))
0123     process.ak4GenJetsChargedOnly = ak4GenJets.clone(src = cms.InputTag("genParticlesForJetsCharged"), rParam = cms.double(0.4), jetAlgorithm=cms.string("AntiKt"), doAreaFastjet = False, jetPtMin=1)
0124     process.nanogenSequence.insert(0, process.ak4GenJetsChargedOnly)
0125     process.nanogenSequence.insert(0, process.genParticlesForJetsCharged)
0126     process.nanogenSequence.insert(0, process.ak8GenJetsNoNuSoftDrop)
0127     process.nanogenSequence.insert(0, process.ak8GenJetsNoNuConstituents)
0128     # In case customizeNanoGENFromMini has already been called
0129     process.nanogenSequence.remove(process.mergedGenParticles)
0130     process.nanogenSequence.remove(process.genIso)
0131     delattr(process.genParticleTable.externalVariables,"iso")
0132     nanoGenCommonCustomize(process)
0133     return process
0134 
0135 # Prune gen particles with tight conditions applied in usual NanoAOD
0136 def pruneGenParticlesNano(process):
0137     process.finalGenParticles.src = process.genParticleTable.src.getModuleLabel()
0138     process.genParticleTable.src = "finalGenParticles"
0139     process.nanogenSequence.insert(1, process.finalGenParticles)
0140     return process
0141 
0142 # Prune gen particles with conditions applied in usual MiniAOD
0143 def pruneGenParticlesMini(process):
0144 #    if process.nanogenSequence.contains(process.mergedGenParticles):
0145 #        raise ValueError("Applying the MiniAOD genParticle pruner to MiniAOD is redunant. " \
0146 #            "Use a different customization.")
0147     from PhysicsTools.PatAlgos.slimming.prunedGenParticles_cfi import prunedGenParticles
0148     process.prunedGenParticles = prunedGenParticles.clone()
0149     process.prunedGenParticles.src = "genParticles"
0150     process.genParticleTable.src = "prunedGenParticles"
0151 
0152     process.nanogenSequence.insert(0, process.prunedGenParticles)
0153     return process
0154 
0155 def setGenFullPrecision(process):
0156     process = setGenPtPrecision(process, 23)
0157     process = setGenEtaPrecision(process, 23)
0158     process = setGenPhiPrecision(process, 23)
0159     process = setGenMassPrecision(process, 23)
0160     return process
0161 
0162 def setGenPtPrecision(process, precision):
0163     process.genParticleTable.variables.pt.precision = precision
0164     process.genJetTable.variables.pt.precision = precision
0165     process.metMCTable.variables.pt.precision = precision
0166     return process
0167 
0168 def setGenEtaPrecision(process, precision):
0169     process.genParticleTable.variables.eta.precision = precision
0170     process.genJetTable.variables.eta.precision = precision
0171     return process
0172 
0173 def setGenPhiPrecision(process, precision):
0174     process.genParticleTable.variables.phi.precision = precision
0175     process.genJetTable.variables.phi.precision = precision
0176     process.metMCTable.variables.phi.precision = precision
0177     return process
0178 
0179 def setGenMassPrecision(process, precision):
0180     process.genParticleTable.variables.mass.precision = precision
0181     process.genJetTable.variables.mass.precision = precision
0182     return process
0183 
0184 def setLHEFullPrecision(process):
0185     process.lheInfoTable.precision = 23
0186     return process
0187 
0188 def setGenWeightsFullPrecision(process):
0189     process.genWeightsTable.lheWeightPrecision = 23
0190     return process