Back to home page

Project CMSSW displayed by LXR

 
 

    


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 # Switch to AK4 CHS jets for Run-2
0050 run2_nanoAOD_ANY.toModify(
0051     linkedObjects, jets="finalJets"
0052 )
0053 
0054 # boosted taus don't exist in 122X MINI
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,  # must be after all the leptons
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 # Replace AK4 Puppi with AK4 CHS for Run-2
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 # GenVertex only stored in newer MiniAOD
0102 nanoSequenceMC = nanoSequenceFS.copy()
0103 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
0104 
0105 # modifier which adds new tauIDs (currently only deepTauId2017v2p1 is being added)
0106 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
0107 def nanoAOD_addTauIds(process, idsToRun=[]):
0108     if idsToRun: #no-empty list of tauIDs to run
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         #remember to adjust the selection and tables with added IDs
0117 
0118         process.tauTask.add( process.rerunMvaIsolationTaskForNano , process.patTauMVAIDsTask )
0119 
0120     return process
0121 
0122 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
0123     if idsToRun: #no-empty list of tauIDs to run
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         #remember to adjust the selection and tables with added IDs
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         # Define "hybridTau" producer
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         # run PNet for CHS AK4 jets if requested
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         #remember to adjust the selection and tables with added IDs
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) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
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     # This function is defined in jetsAK4_Puppi_cff.py
0210     process = nanoAOD_addDeepInfoAK4(process,
0211         addParticleNet=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addParticleNet_switch,
0212         addRobustParTAK4=nanoAOD_addDeepInfoAK4_switch.nanoAOD_addRobustParTAK4Tag_switch
0213     )
0214 
0215     # This function is defined in jetsAK4_CHS_cff.py
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     # This function is defined in jetsAK8_cff.py
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     # Add PNet info to taus
0245     # enable rerun of PNet for CHS jets for early run3 eras
0246     # (it is rerun for run2 within jet tasks while is not needed for newer
0247     # run3 eras as it is present in miniAOD)
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 ###increasing the precision of selected GenParticles.
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     # Keep precision same as default RECO for selected particles
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