File indexing completed on 2023-05-05 02:47:58
0001 from __future__ import print_function
0002 import FWCore.ParameterSet.Config as cms
0003 from PhysicsTools.NanoAOD.common_cff import *
0004 from PhysicsTools.NanoAOD.nano_eras_cff import *
0005 from PhysicsTools.NanoAOD.jetsAK4_CHS_cff import *
0006 from PhysicsTools.NanoAOD.jetsAK4_Puppi_cff import *
0007 from PhysicsTools.NanoAOD.jetsAK8_cff import *
0008 from PhysicsTools.NanoAOD.jetMC_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.genVertex_cff import *
0022 from PhysicsTools.NanoAOD.vertices_cff import *
0023 from PhysicsTools.NanoAOD.met_cff import *
0024 from PhysicsTools.NanoAOD.triggerObjects_cff import *
0025 from PhysicsTools.NanoAOD.isotracks_cff import *
0026 from PhysicsTools.NanoAOD.protons_cff import *
0027 from PhysicsTools.NanoAOD.NanoAODEDMEventContent_cff import *
0028 from PhysicsTools.NanoAOD.fsrPhotons_cff import *
0029 from PhysicsTools.NanoAOD.softActivity_cff import *
0030 from PhysicsTools.NanoAOD.l1trig_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
0050 run2_nanoAOD_ANY.toModify(
0051 linkedObjects, jets="finalJets"
0052 )
0053
0054
0055 run3_nanoAOD_122.toModify(
0056 linkedObjects, boostedTaus=None,
0057 )
0058
0059 lhcInfoTable = cms.EDProducer("LHCInfoProducer")
0060
0061 nanoTableTaskCommon = cms.Task(
0062 cms.Task(nanoMetadata),
0063 jetPuppiTask, jetPuppiForMETTask, jetAK8Task,
0064 extraFlagsProducersTask, muonTask, tauTask, boostedTauTask,
0065 electronTask , lowPtElectronTask, photonTask,
0066 vertexTask, isoTrackTask, jetAK8LepTask,
0067 softActivityTask,
0068 cms.Task(linkedObjects),
0069 jetPuppiTablesTask, jetAK8TablesTask,
0070 muonTablesTask, fsrTablesTask, tauTablesTask, boostedTauTablesTask,
0071 electronTablesTask, lowPtElectronTablesTask, photonTablesTask,
0072 globalTablesTask, vertexTablesTask, metTablesTask, extraFlagsTableTask,
0073 isoTrackTablesTask,softActivityTablesTask
0074 )
0075
0076
0077 _nanoTableTaskCommonRun2 = nanoTableTaskCommon.copy()
0078 _nanoTableTaskCommonRun2.replace(jetPuppiTask, jetTask)
0079 _nanoTableTaskCommonRun2.replace(jetPuppiForMETTask, jetForMETTask)
0080 _nanoTableTaskCommonRun2.replace(jetPuppiTablesTask, jetTablesTask)
0081 run2_nanoAOD_ANY.toReplaceWith(
0082 nanoTableTaskCommon, _nanoTableTaskCommonRun2
0083 )
0084
0085 nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
0086
0087 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTablesTask)
0088 nanoSequenceOnlyData = cms.Sequence(cms.Sequence(protonTablesTask) + lhcInfoTable)
0089
0090 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim)
0091
0092 nanoTableTaskFS = cms.Task(
0093 genParticleTask, particleLevelTask, jetMCTask, muonMCTask, electronMCTask, lowPtElectronMCTask, photonMCTask,
0094 tauMCTask, boostedTauMCTask,
0095 metMCTable, ttbarCatMCProducersTask, globalTablesMCTask, ttbarCategoryTableTask,
0096 genWeightsTableTask, genVertexTablesTask, genParticleTablesTask, genProtonTablesTask, particleLevelTablesTask
0097 )
0098
0099 nanoSequenceFS = cms.Sequence(nanoSequenceCommon + cms.Sequence(nanoTableTaskFS))
0100
0101
0102 nanoSequenceMC = nanoSequenceFS.copy()
0103 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
0104
0105
0106 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
0107 def nanoAOD_addTauIds(process, idsToRun=[]):
0108 if idsToRun:
0109 updatedTauName = "slimmedTausUpdated"
0110 tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
0111 updatedTauName = updatedTauName,
0112 postfix = "ForNano",
0113 toKeep = idsToRun)
0114 tauIdEmbedder.runTauID()
0115 process.finalTaus.src = updatedTauName
0116
0117
0118 process.tauTask.add( process.rerunMvaIsolationTaskForNano , process.patTauMVAIDsTask )
0119
0120 return process
0121
0122 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
0123 if idsToRun:
0124 updatedBoostedTauName = "slimmedTausBoostedNewID"
0125 boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
0126 originalTauName = "slimmedTausBoosted",
0127 updatedTauName = updatedBoostedTauName,
0128 postfix = "BoostedForNano",
0129 toKeep = idsToRun)
0130 boostedTauIdEmbedder.runTauID()
0131 process.finalBoostedTaus.src = updatedBoostedTauName
0132
0133
0134 process.boostedTauTask.add( process.rerunMvaIsolationTaskBoostedForNano, getattr(process, updatedBoostedTauName))
0135
0136 return process
0137
0138 def nanoAOD_addPNetToTaus(process, addPNetInfo=False, runPNetCHSAK4=False):
0139 if addPNetInfo:
0140 originalTauName = process.finalTaus.src.value()
0141 updatedTauName = originalTauName+'WithPNet'
0142 jetCollection = "updatedJets"
0143 process.load('RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff')
0144 pnetTagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTag"
0145 pnetDiscriminators = [];
0146 for tag in getattr(process,pnetTagName+"s").flav_names.value():
0147 pnetDiscriminators.append(pnetTagName+"s:"+tag)
0148
0149
0150 from PhysicsTools.PatAlgos.patTauHybridProducer_cfi import patTauHybridProducer
0151 setattr(process, updatedTauName, patTauHybridProducer.clone(
0152 src = originalTauName,
0153 jetSource = jetCollection,
0154 dRMax = 0.4,
0155 jetPtMin = 15,
0156 jetEtaMax = 2.5,
0157 pnetLabel = pnetTagName+"s",
0158 pnetScoreNames = pnetDiscriminators,
0159 tauScoreMin = -1,
0160 vsJetMin = 0.05,
0161 checkTauScoreIsBest = False,
0162 chargeAssignmentProbMin = 0.2,
0163 addGenJetMatch = False,
0164 genJetMatch = ""
0165 ))
0166 process.finalTaus.src = updatedTauName
0167
0168
0169 if runPNetCHSAK4:
0170 from PhysicsTools.NanoAOD.jetsAK4_CHS_cff import nanoAOD_addDeepInfoAK4CHS
0171 process = nanoAOD_addDeepInfoAK4CHS(process,
0172 addDeepBTag = False,
0173 addDeepFlavour = False,
0174 addParticleNet = True
0175 )
0176
0177
0178
0179 process.tauTask.add(process.jetTask, getattr(process, updatedTauName))
0180
0181 return process
0182
0183 from PhysicsTools.SelectorUtils.tools.vid_id_tools import *
0184 def nanoAOD_activateVID(process):
0185
0186 switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD,electronTask)
0187 for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
0188 setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
0189
0190 process.electronTask.add( process.egmGsfElectronIDTask )
0191
0192 switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD,photonTask)
0193 for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
0194 setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
0195
0196 process.photonTask.add( process.egmPhotonIDTask )
0197
0198 return process
0199
0200 def nanoAOD_customizeCommon(process):
0201
0202 process = nanoAOD_activateVID(process)
0203
0204 run2_nanoAOD_106Xv2.toModify(
0205 nanoAOD_addDeepInfoAK4CHS_switch, nanoAOD_addParticleNet_switch=True,
0206 nanoAOD_addRobustParTAK4Tag_switch=True,
0207 )
0208
0209
0210 process = nanoAOD_addDeepInfoAK4(process,
0211 addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
0212 addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch
0213 )
0214
0215
0216 process = nanoAOD_addDeepInfoAK4CHS(process,
0217 addDeepBTag=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepBTag_switch,
0218 addDeepFlavour=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepFlavourTag_switch,
0219 addParticleNet=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addParticleNet_switch,
0220 addRobustParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addRobustParTAK4Tag_switch
0221 )
0222
0223
0224 process = nanoAOD_addDeepInfoAK8(process,
0225 addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
0226 addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
0227 addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
0228 addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
0229 addParticleNetMassLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetMassLegacy_switch,
0230 addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
0231 jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload
0232 )
0233
0234 nanoAOD_tau_switch = cms.PSet(
0235 idsToAdd = cms.vstring(),
0236 runPNetAK4 = cms.bool(False),
0237 addPNet = cms.bool(True)
0238 )
0239 (run2_nanoAOD_106Xv2 | run3_nanoAOD_122).toModify(
0240 nanoAOD_tau_switch, idsToAdd = ["deepTau2018v2p5"]
0241 ).toModify(
0242 process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value())
0243 )
0244
0245
0246
0247
0248 (run3_nanoAOD_122 | run3_nanoAOD_124).toModify(
0249 nanoAOD_tau_switch, runPNetAK4 = True
0250 )
0251 nanoAOD_addPNetToTaus(process,
0252 addPNetInfo = nanoAOD_tau_switch.addPNet.value(),
0253 runPNetCHSAK4 = nanoAOD_tau_switch.runPNetAK4.value()
0254 )
0255 nanoAOD_boostedTau_switch = cms.PSet(
0256 idsToAdd = cms.vstring()
0257 )
0258 run2_nanoAOD_106Xv2.toModify(
0259 nanoAOD_boostedTau_switch, idsToAdd = ["2017v2", "dR0p32017v2", "newDM2017v2","againstEle2018"]
0260 ).toModify(
0261 process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value())
0262 )
0263
0264 return process
0265
0266
0267 def nanoWmassGenCustomize(process):
0268 pdgSelection="?(abs(pdgId) == 11|| abs(pdgId)==13 || abs(pdgId)==15 ||abs(pdgId)== 12 || abs(pdgId)== 14 || abs(pdgId)== 16|| abs(pdgId)== 24|| pdgId== 23)"
0269
0270 ptPrecision="{}?{}:{}".format(pdgSelection, CandVars.pt.precision.value(),genParticleTable.variables.pt.precision.value())
0271 process.genParticleTable.variables.pt.precision=cms.string(ptPrecision)
0272 phiPrecision="{} ? {} : {}".format(pdgSelection, CandVars.phi.precision.value(), genParticleTable.variables.phi.precision.value())
0273 process.genParticleTable.variables.phi.precision=cms.string(phiPrecision)
0274 etaPrecision="{} ? {} : {}".format(pdgSelection, CandVars.eta.precision.value(), genParticleTable.variables.eta.precision.value())
0275 process.genParticleTable.variables.eta.precision=cms.string(etaPrecision)
0276 return process
0277
0278 def nanoL1TrigObjCustomize(process):
0279 process.nanoTableTaskCommon.add(process.l1TablesTask)
0280 process = setL1NanoToReduced(process)
0281 return process
0282
0283 def nanoL1TrigObjCustomizeFull(process):
0284 process.nanoTableTaskCommon.add(process.l1TablesTask)
0285 return process