File indexing completed on 2025-06-06 01:33:32
0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.NanoAOD.common_cff import *
0003 from PhysicsTools.NanoAOD.nano_eras_cff import *
0004 from PhysicsTools.NanoAOD.jetsAK4_CHS_cff import *
0005 from PhysicsTools.NanoAOD.jetsAK4_Puppi_cff import *
0006 from PhysicsTools.NanoAOD.jetsAK8_cff import *
0007 from PhysicsTools.NanoAOD.jetMC_cff import *
0008 from PhysicsTools.NanoAOD.jetConstituents_cff import *
0009 from PhysicsTools.NanoAOD.muons_cff import *
0010 from PhysicsTools.NanoAOD.taus_cff import *
0011 from PhysicsTools.NanoAOD.boostedTaus_cff import *
0012 from PhysicsTools.NanoAOD.electrons_cff import *
0013 from PhysicsTools.NanoAOD.lowPtElectrons_cff import *
0014 from PhysicsTools.NanoAOD.photons_cff import *
0015 from PhysicsTools.NanoAOD.globals_cff import *
0016 from PhysicsTools.NanoAOD.extraflags_cff import *
0017 from PhysicsTools.NanoAOD.ttbarCategorization_cff import *
0018 from PhysicsTools.NanoAOD.genparticles_cff import *
0019 from PhysicsTools.NanoAOD.particlelevel_cff import *
0020 from PhysicsTools.NanoAOD.genWeightsTable_cfi import *
0021 from PhysicsTools.NanoAOD.tauSpinnerTable_cfi import *
0022 from PhysicsTools.NanoAOD.genVertex_cff import *
0023 from PhysicsTools.NanoAOD.vertices_cff import *
0024 from PhysicsTools.NanoAOD.met_cff import *
0025 from PhysicsTools.NanoAOD.triggerObjects_cff import *
0026 from PhysicsTools.NanoAOD.isotracks_cff import *
0027 from PhysicsTools.NanoAOD.protons_cff import *
0028 from PhysicsTools.NanoAOD.NanoAODEDMEventContent_cff import *
0029 from PhysicsTools.NanoAOD.fsrPhotons_cff import *
0030 from PhysicsTools.NanoAOD.softActivity_cff import *
0031
0032 nanoMetadata = cms.EDProducer("UniqueStringProducer",
0033 strings = cms.PSet(
0034 tag = cms.string("untagged"),
0035 )
0036 )
0037
0038 linkedObjects = cms.EDProducer("PATObjectCrossLinker",
0039 jets=cms.InputTag("finalJetsPuppi"),
0040 muons=cms.InputTag("finalMuons"),
0041 electrons=cms.InputTag("finalElectrons"),
0042 lowPtElectrons=cms.InputTag("finalLowPtElectrons"),
0043 taus=cms.InputTag("finalTaus"),
0044 boostedTaus=cms.InputTag("finalBoostedTaus"),
0045 photons=cms.InputTag("finalPhotons"),
0046 vertices=cms.InputTag("slimmedSecondaryVertices")
0047 )
0048
0049 from PhysicsTools.NanoAOD.lhcInfoProducer_cfi import lhcInfoProducer
0050 lhcInfoTable = lhcInfoProducer.clone()
0051 (~run3_common).toModify(
0052 lhcInfoTable, useNewLHCInfo=False
0053 )
0054
0055 nanoTableTaskCommon = cms.Task(
0056 cms.Task(nanoMetadata),
0057 jetPuppiTask, jetPuppiForMETTask, jetAK8Task, jetConstituentsTask,
0058 extraFlagsProducersTask, muonTask, tauTask, boostedTauTask,
0059 electronTask , lowPtElectronTask, photonTask,
0060 vertexTask, isoTrackTask, jetAK8LepTask,
0061 softActivityTask,
0062 cms.Task(linkedObjects),
0063 jetPuppiTablesTask, jetAK8TablesTask, jetConstituentsTablesTask,
0064 muonTablesTask, fsrTablesTask, tauTablesTask, boostedTauTablesTask,
0065 electronTablesTask, lowPtElectronTablesTask, photonTablesTask,
0066 globalTablesTask, vertexTablesTask, metTablesTask, extraFlagsTableTask,
0067 isoTrackTablesTask,softActivityTablesTask
0068 )
0069
0070 (run2_muon | run2_egamma).toReplaceWith(
0071 nanoTableTaskCommon,
0072 nanoTableTaskCommon.copyAndAdd(chsJetUpdateTask)
0073 )
0074
0075 nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
0076
0077 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTablesTask)
0078 nanoSequenceOnlyData = cms.Sequence(cms.Sequence(protonTablesTask) + lhcInfoTable)
0079
0080 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim)
0081
0082 nanoTableTaskFS = cms.Task(
0083 genParticleTask, particleLevelTask, jetMCTask, muonMCTask, electronMCTask, lowPtElectronMCTask, photonMCTask,
0084 tauMCTask, boostedTauMCTask,
0085 metMCTable, ttbarCatMCProducersTask, globalTablesMCTask, ttbarCategoryTableTask,
0086 genWeightsTableTask, genVertexTablesTask, genParticleTablesTask, genProtonTablesTask, particleLevelTablesTask, tauSpinnerTableTask
0087 )
0088
0089 nanoSequenceFS = cms.Sequence(nanoSequenceCommon + cms.Sequence(nanoTableTaskFS))
0090
0091
0092 nanoSequenceMC = nanoSequenceFS.copy()
0093 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
0094
0095
0096 def _fixPNetInputCollection(process):
0097
0098 if hasattr(process, 'slimmedTaus'):
0099 for mod in process.producers.keys():
0100 if 'ParticleNetFromMiniAOD' in mod and 'TagInfos' in mod:
0101 getattr(process, mod).taus = 'slimmedTaus::@skipCurrentProcess'
0102
0103
0104
0105 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
0106 def nanoAOD_addTauIds(process, idsToRun=[], addPNetCHS=False, addUParTPuppi=False):
0107 originalTauName = 'slimmedTaus::@skipCurrentProcess'
0108 updatedTauName = None
0109
0110 if idsToRun:
0111 updatedTauName = 'slimmedTausUpdated'
0112 tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug=False,
0113 originalTauName=originalTauName,
0114 updatedTauName=updatedTauName,
0115 postfix="ForNano",
0116 toKeep=idsToRun)
0117 tauIdEmbedder.runTauID()
0118 process.tauTask.add(process.rerunMvaIsolationTaskForNano, getattr(process, updatedTauName))
0119 originalTauName = updatedTauName
0120
0121 from PhysicsTools.PatAlgos.patTauHybridProducer_cfi import patTauHybridProducer
0122 if addPNetCHS:
0123 jetCollection = "updatedJets"
0124 TagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTags"
0125 tag_prefix = "byUTagCHS"
0126 updatedTauName = originalTauName.split(':')[0] + 'WithPNetCHS'
0127
0128 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import pfParticleNetFromMiniAODAK4CHSCentralJetTags
0129 Discriminators = [TagName + ":" + tag for tag in pfParticleNetFromMiniAODAK4CHSCentralJetTags.flav_names.value()]
0130
0131
0132 setattr(process, updatedTauName, patTauHybridProducer.clone(
0133 src=originalTauName,
0134 jetSource=jetCollection,
0135 dRMax=0.4,
0136 jetPtMin=15,
0137 jetEtaMax=2.5,
0138 UTagLabel=TagName,
0139 UTagScoreNames=Discriminators,
0140 tagPrefix=tag_prefix,
0141 tauScoreMin=-1,
0142 vsJetMin=0.05,
0143 checkTauScoreIsBest=False,
0144 chargeAssignmentProbMin=0.2,
0145 addGenJetMatch=False,
0146 genJetMatch=""
0147 ))
0148 process.tauTask.add(process.chsJetUpdateTask, getattr(process, updatedTauName))
0149 originalTauName = updatedTauName
0150
0151 if addUParTPuppi:
0152 jetCollection = "updatedJetsPuppi"
0153 TagName = "pfUnifiedParticleTransformerAK4JetTags"
0154 tag_prefix = "byUTagPUPPI"
0155 updatedTauName = originalTauName.split(':')[0] + 'WithUParTPuppi'
0156
0157 from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4JetTags_cfi import pfUnifiedParticleTransformerAK4JetTags
0158 Discriminators = [TagName + ":" + tag for tag in pfUnifiedParticleTransformerAK4JetTags.flav_names.value()]
0159
0160
0161 setattr(process, updatedTauName, patTauHybridProducer.clone(
0162 src=originalTauName,
0163 jetSource=jetCollection,
0164 dRMax=0.4,
0165 jetPtMin=15,
0166 jetEtaMax=2.5,
0167 UTagLabel=TagName,
0168 UTagScoreNames=Discriminators,
0169 tagPrefix=tag_prefix,
0170 tauScoreMin=-1,
0171 vsJetMin=0.05,
0172 checkTauScoreIsBest=False,
0173 chargeAssignmentProbMin=0.2,
0174 addGenJetMatch=False,
0175 genJetMatch=""
0176 ))
0177 process.tauTask.add(getattr(process, updatedTauName))
0178 originalTauName = updatedTauName
0179
0180 if updatedTauName is not None:
0181 process.slimmedTaus = getattr(process, updatedTauName).clone()
0182 process.tauTask.replace(getattr(process, updatedTauName), process.slimmedTaus)
0183 delattr(process, updatedTauName)
0184 _fixPNetInputCollection(process)
0185
0186 return process
0187
0188
0189 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
0190 if idsToRun:
0191 boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug=False,
0192 originalTauName="slimmedTausBoosted::@skipCurrentProcess",
0193 updatedTauName="slimmedTausBoostedNewID",
0194 postfix="BoostedForNano",
0195 toKeep=idsToRun)
0196 boostedTauIdEmbedder.runTauID()
0197
0198 process.slimmedTausBoosted = process.slimmedTausBoostedNewID.clone()
0199 del process.slimmedTausBoostedNewID
0200 process.boostedTauTask.add(process.rerunMvaIsolationTaskBoostedForNano, process.slimmedTausBoosted)
0201
0202 return process
0203
0204
0205 from PhysicsTools.SelectorUtils.tools.vid_id_tools import *
0206 def nanoAOD_activateVID(process):
0207
0208 switchOnVIDElectronIdProducer(process, DataFormat.MiniAOD, electronTask)
0209 for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
0210 setupAllVIDIdsInModule(process, modname, setupVIDElectronSelection)
0211
0212 process.electronTask.add(process.egmGsfElectronIDTask)
0213
0214
0215 switchOnVIDPhotonIdProducer(process, DataFormat.MiniAOD, photonTask)
0216 for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
0217 setupAllVIDIdsInModule(process, modname, setupVIDPhotonSelection)
0218
0219 process.photonTask.add(process.egmPhotonIDTask)
0220
0221 return process
0222
0223
0224 def nanoAOD_customizeCommon(process):
0225
0226 process = nanoAOD_activateVID(process)
0227
0228 nanoAOD_rePuppi_switch = cms.PSet(
0229 useExistingWeights=cms.bool(False),
0230 reclusterAK4MET=cms.bool(False),
0231 reclusterAK8=cms.bool(False),
0232 )
0233
0234
0235 (run2_nanoAOD_106Xv2 | run3_nanoAOD_pre142X | nanoAOD_rePuppi).toModify(
0236 nanoAOD_rePuppi_switch, useExistingWeights=False, reclusterAK4MET=True, reclusterAK8=True
0237 )
0238
0239 runOnMC = True
0240 if hasattr(process, "NANOEDMAODoutput") or hasattr(process, "NANOAODoutput"):
0241 runOnMC = False
0242 from PhysicsTools.PatAlgos.tools.puppiJetMETReclusteringFromMiniAOD_cff import puppiJetMETReclusterFromMiniAOD
0243 puppiJetMETReclusterFromMiniAOD(process,
0244 runOnMC=runOnMC,
0245 useExistingWeights=nanoAOD_rePuppi_switch.useExistingWeights.value(),
0246 reclusterAK4MET=nanoAOD_rePuppi_switch.reclusterAK4MET.value(),
0247 reclusterAK8=nanoAOD_rePuppi_switch.reclusterAK8.value(),
0248 )
0249
0250
0251 process = nanoAOD_addDeepInfoAK4(process,
0252 addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
0253 addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch,
0254 addUnifiedParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addUnifiedParTAK4Tag_switch
0255 )
0256
0257
0258 run2_nanoAOD_106Xv2.toModify(
0259 nanoAOD_addDeepInfoAK4CHS_switch, nanoAOD_addParticleNet_switch=True,
0260 )
0261
0262 process = nanoAOD_addDeepInfoAK4CHS(
0263 process, addDeepBTag=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepBTag_switch,
0264 addDeepFlavour=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepFlavourTag_switch,
0265 addParticleNet=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addParticleNet_switch,
0266 addRobustParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addRobustParTAK4Tag_switch,
0267 addUnifiedParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addUnifiedParTAK4Tag_switch)
0268
0269
0270 process = nanoAOD_addDeepInfoAK8(
0271 process, addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
0272 addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
0273 addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
0274 addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
0275 addParticleNetMassLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetMassLegacy_switch,
0276 addParticleNetLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetLegacy_switch,
0277 addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
0278 addGlobalParT=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addGlobalParT_switch,
0279 jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
0280
0281 nanoAOD_tau_switch = cms.PSet(
0282 idsToAdd=cms.vstring(),
0283 addPNetCHS=cms.bool(False),
0284 addUParTPuppi=cms.bool(False)
0285 )
0286 (run2_nanoAOD_106Xv2).toModify(
0287 nanoAOD_tau_switch, idsToAdd=["deepTau2018v2p5"]
0288 )
0289 (run2_nanoAOD_106Xv2 | run3_nanoAOD_pre142X).toModify(
0290 nanoAOD_tau_switch, addPNetCHS=True, addUParTPuppi=True,
0291 )
0292 nanoAOD_addTauIds(process,
0293 idsToRun=nanoAOD_tau_switch.idsToAdd.value(),
0294 addPNetCHS=nanoAOD_tau_switch.addPNetCHS.value(),
0295 addUParTPuppi=nanoAOD_tau_switch.addUParTPuppi.value(),
0296 )
0297
0298 nanoAOD_boostedTau_switch = cms.PSet(
0299 idsToAdd=cms.vstring()
0300 )
0301 run2_nanoAOD_106Xv2.toModify(
0302 nanoAOD_boostedTau_switch,
0303 idsToAdd=["mvaIso", "mvaIsoNewDM", "mvaIsoDR0p3", "againstEle", "boostedDeepTauRunIIv2p0"])
0304 run3_nanoAOD_pre142X.toModify(
0305 nanoAOD_boostedTau_switch, idsToAdd=["boostedDeepTauRunIIv2p0"]
0306 )
0307 nanoAOD_addBoostedTauIds(process, nanoAOD_boostedTau_switch.idsToAdd.value())
0308
0309
0310 from PhysicsTools.NanoAOD.leptonTimeLifeInfo_common_cff import addTimeLifeInfoBase
0311 process = addTimeLifeInfoBase(process)
0312
0313 return process
0314
0315
0316 def nanoWmassGenCustomize(process):
0317 pdgSelection="?(abs(pdgId) == 11|| abs(pdgId)==13 || abs(pdgId)==15 ||abs(pdgId)== 12 || abs(pdgId)== 14 || abs(pdgId)== 16|| abs(pdgId)== 24|| pdgId== 23)"
0318
0319 ptPrecision="{}?{}:{}".format(pdgSelection, CandVars.pt.precision.value(),genParticleTable.variables.pt.precision.value())
0320 process.genParticleTable.variables.pt.precision=cms.string(ptPrecision)
0321 phiPrecision="{} ? {} : {}".format(pdgSelection, CandVars.phi.precision.value(), genParticleTable.variables.phi.precision.value())
0322 process.genParticleTable.variables.phi.precision=cms.string(phiPrecision)
0323 etaPrecision="{} ? {} : {}".format(pdgSelection, CandVars.eta.precision.value(), genParticleTable.variables.eta.precision.value())
0324 process.genParticleTable.variables.eta.precision=cms.string(etaPrecision)
0325 return process
0326