File indexing completed on 2025-02-05 03:15:10
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
0050 run2_nanoAOD_ANY.toModify(
0051 linkedObjects, jets="finalJets"
0052 )
0053
0054 from PhysicsTools.NanoAOD.lhcInfoProducer_cfi import lhcInfoProducer
0055 lhcInfoTable = lhcInfoProducer.clone()
0056 (~run3_common).toModify(
0057 lhcInfoTable, useNewLHCInfo=False
0058 )
0059
0060 nanoTableTaskCommon = cms.Task(
0061 cms.Task(nanoMetadata),
0062 jetPuppiTask, jetPuppiForMETTask, jetAK8Task, jetConstituentsTask,
0063 extraFlagsProducersTask, muonTask, tauTask, boostedTauTask,
0064 electronTask , lowPtElectronTask, photonTask,
0065 vertexTask, isoTrackTask, jetAK8LepTask,
0066 softActivityTask,
0067 cms.Task(linkedObjects),
0068 jetPuppiTablesTask, jetAK8TablesTask, jetConstituentsTablesTask,
0069 muonTablesTask, fsrTablesTask, tauTablesTask, boostedTauTablesTask,
0070 electronTablesTask, lowPtElectronTablesTask, photonTablesTask,
0071 globalTablesTask, vertexTablesTask, metTablesTask, extraFlagsTableTask,
0072 isoTrackTablesTask,softActivityTablesTask
0073 )
0074
0075
0076 _nanoTableTaskCommonRun2 = nanoTableTaskCommon.copy()
0077 _nanoTableTaskCommonRun2.replace(jetPuppiTask, jetTask)
0078 _nanoTableTaskCommonRun2.replace(jetPuppiForMETTask, jetForMETTask)
0079 _nanoTableTaskCommonRun2.replace(jetPuppiTablesTask, jetTablesTask)
0080 run2_nanoAOD_ANY.toReplaceWith(
0081 nanoTableTaskCommon, _nanoTableTaskCommonRun2
0082 )
0083
0084 nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
0085
0086 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTablesTask)
0087 nanoSequenceOnlyData = cms.Sequence(cms.Sequence(protonTablesTask) + lhcInfoTable)
0088
0089 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim)
0090
0091 nanoTableTaskFS = cms.Task(
0092 genParticleTask, particleLevelTask, jetMCTask, muonMCTask, electronMCTask, lowPtElectronMCTask, photonMCTask,
0093 tauMCTask, boostedTauMCTask,
0094 metMCTable, ttbarCatMCProducersTask, globalTablesMCTask, ttbarCategoryTableTask,
0095 genWeightsTableTask, genVertexTablesTask, genParticleTablesTask, genProtonTablesTask, particleLevelTablesTask, tauSpinnerTableTask
0096 )
0097
0098 nanoSequenceFS = cms.Sequence(nanoSequenceCommon + cms.Sequence(nanoTableTaskFS))
0099
0100
0101 nanoSequenceMC = nanoSequenceFS.copy()
0102 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
0103
0104
0105 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
0106 def nanoAOD_addTauIds(process, idsToRun=[]):
0107 if idsToRun:
0108 updatedTauName = "slimmedTausUpdated"
0109 tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
0110 updatedTauName = updatedTauName,
0111 postfix = "ForNano",
0112 toKeep = idsToRun)
0113 tauIdEmbedder.runTauID()
0114 process.finalTaus.src = updatedTauName
0115
0116
0117 process.tauTask.add( process.rerunMvaIsolationTaskForNano, getattr(process, updatedTauName) )
0118
0119 return process
0120
0121 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
0122 if idsToRun:
0123 updatedBoostedTauName = "slimmedTausBoostedNewID"
0124 boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
0125 originalTauName = "slimmedTausBoosted",
0126 updatedTauName = updatedBoostedTauName,
0127 postfix = "BoostedForNano",
0128 toKeep = idsToRun)
0129 boostedTauIdEmbedder.runTauID()
0130 process.finalBoostedTaus.src = updatedBoostedTauName
0131
0132
0133 process.boostedTauTask.add( process.rerunMvaIsolationTaskBoostedForNano, getattr(process, updatedBoostedTauName))
0134
0135 return process
0136
0137 def nanoAOD_addUTagToTaus(process, addUTagInfo=False, usePUPPIjets=False):
0138
0139 if addUTagInfo:
0140 originalTauName = process.finalTaus.src.value()
0141
0142 if usePUPPIjets:
0143 jetCollection = "updatedJetsPuppi"
0144 TagName = "pfUnifiedParticleTransformerAK4JetTags"
0145 tag_prefix = "byUTagPUPPI"
0146 updatedTauName = originalTauName+'WithUTagPUPPI'
0147
0148 from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4JetTags_cfi import pfUnifiedParticleTransformerAK4JetTags
0149 Discriminators = [TagName+":"+tag for tag in pfUnifiedParticleTransformerAK4JetTags.flav_names.value()]
0150 else:
0151 jetCollection = "updatedJets"
0152 TagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTags"
0153 tag_prefix = "byUTagCHS"
0154 updatedTauName = originalTauName+'WithUTagCHS'
0155
0156 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import pfParticleNetFromMiniAODAK4CHSCentralJetTags
0157 Discriminators = [TagName+":"+tag for tag in pfParticleNetFromMiniAODAK4CHSCentralJetTags.flav_names.value()]
0158
0159
0160 from PhysicsTools.PatAlgos.patTauHybridProducer_cfi import patTauHybridProducer
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.finalTaus.src = updatedTauName
0178
0179
0180
0181 process.tauTask.add(process.jetTask, getattr(process, updatedTauName))
0182
0183 return process
0184
0185 from PhysicsTools.SelectorUtils.tools.vid_id_tools import *
0186 def nanoAOD_activateVID(process):
0187
0188 switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD,electronTask)
0189 for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
0190 setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
0191
0192 process.electronTask.add( process.egmGsfElectronIDTask )
0193
0194 switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD,photonTask)
0195 for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
0196 setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
0197
0198 process.photonTask.add( process.egmPhotonIDTask )
0199
0200 return process
0201
0202 def nanoAOD_customizeCommon(process):
0203
0204 process = nanoAOD_activateVID(process)
0205
0206 run2_nanoAOD_106Xv2.toModify(
0207 nanoAOD_addDeepInfoAK4CHS_switch, nanoAOD_addParticleNet_switch=True,
0208 nanoAOD_addRobustParTAK4Tag_switch=False,
0209 nanoAOD_addUnifiedParTAK4Tag_switch=True,
0210 )
0211
0212
0213 process = nanoAOD_addDeepInfoAK4(process,
0214 addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
0215 addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch,
0216 addUnifiedParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addUnifiedParTAK4Tag_switch
0217 )
0218
0219
0220 process = nanoAOD_addDeepInfoAK4CHS(process,
0221 addDeepBTag=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepBTag_switch,
0222 addDeepFlavour=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addDeepFlavourTag_switch,
0223 addParticleNet=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addParticleNet_switch,
0224 addRobustParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addRobustParTAK4Tag_switch,
0225 addUnifiedParTAK4=nanoAOD_addDeepInfoAK4CHS_switch.nanoAOD_addUnifiedParTAK4Tag_switch
0226 )
0227
0228
0229 process = nanoAOD_addDeepInfoAK8(process,
0230 addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
0231 addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
0232 addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
0233 addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
0234 addParticleNetMassLegacy=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetMassLegacy_switch,
0235 addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
0236 addGlobalParT=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addGlobalParT_switch,
0237 jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload
0238 )
0239
0240 nanoAOD_tau_switch = cms.PSet(
0241 idsToAdd = cms.vstring(),
0242 addUParTInfo = cms.bool(False),
0243 addPNet = cms.bool(False)
0244 )
0245 (run2_nanoAOD_106Xv2).toModify(
0246 nanoAOD_tau_switch, idsToAdd = ["deepTau2018v2p5"]
0247 ).toModify(
0248 process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value())
0249 )
0250
0251
0252
0253
0254 (run2_nanoAOD_106Xv2).toModify(
0255 nanoAOD_tau_switch, addPNet = True
0256 )
0257
0258
0259 run3_nanoAOD_pre142X.toModify(
0260 nanoAOD_tau_switch, addPNet = True, addUParTInfo = True
0261 )
0262
0263
0264 nanoAOD_addUTagToTaus(process,
0265 addUTagInfo = nanoAOD_tau_switch.addPNet.value(),
0266 usePUPPIjets = False
0267 )
0268
0269
0270 nanoAOD_addUTagToTaus(process,
0271 addUTagInfo = nanoAOD_tau_switch.addUParTInfo.value(),
0272 usePUPPIjets = True
0273 )
0274
0275 nanoAOD_boostedTau_switch = cms.PSet(
0276 idsToAdd = cms.vstring()
0277 )
0278 run2_nanoAOD_106Xv2.toModify(
0279 nanoAOD_boostedTau_switch, idsToAdd = ["mvaIso", "mvaIsoNewDM", "mvaIsoDR0p3", "againstEle", "boostedDeepTauRunIIv2p0"]
0280 ).toModify(
0281 process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value())
0282 )
0283 run3_nanoAOD_pre142X.toModify(
0284 nanoAOD_boostedTau_switch, idsToAdd = ["boostedDeepTauRunIIv2p0"]
0285 ).toModify(
0286 process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value())
0287 )
0288
0289
0290 from PhysicsTools.NanoAOD.leptonTimeLifeInfo_common_cff import addTimeLifeInfoBase
0291 process = addTimeLifeInfoBase(process)
0292
0293 return process
0294
0295
0296 def nanoWmassGenCustomize(process):
0297 pdgSelection="?(abs(pdgId) == 11|| abs(pdgId)==13 || abs(pdgId)==15 ||abs(pdgId)== 12 || abs(pdgId)== 14 || abs(pdgId)== 16|| abs(pdgId)== 24|| pdgId== 23)"
0298
0299 ptPrecision="{}?{}:{}".format(pdgSelection, CandVars.pt.precision.value(),genParticleTable.variables.pt.precision.value())
0300 process.genParticleTable.variables.pt.precision=cms.string(ptPrecision)
0301 phiPrecision="{} ? {} : {}".format(pdgSelection, CandVars.phi.precision.value(), genParticleTable.variables.phi.precision.value())
0302 process.genParticleTable.variables.phi.precision=cms.string(phiPrecision)
0303 etaPrecision="{} ? {} : {}".format(pdgSelection, CandVars.eta.precision.value(), genParticleTable.variables.eta.precision.value())
0304 process.genParticleTable.variables.eta.precision=cms.string(etaPrecision)
0305 return process
0306