Back to home page

Project CMSSW displayed by LXR

 
 

    


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 # Switch to AK4 CHS jets for Run-2
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,  # must be after all the leptons
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 # Replace AK4 Puppi with AK4 CHS for Run-2
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 # GenVertex only stored in newer MiniAOD
0101 nanoSequenceMC = nanoSequenceFS.copy()
0102 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
0103 
0104 # modifier which adds new tauIDs
0105 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
0106 def nanoAOD_addTauIds(process, idsToRun=[]):
0107     if idsToRun: #no-empty list of tauIDs to run
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         #remember to adjust the selection and tables with added IDs
0116 
0117         process.tauTask.add( process.rerunMvaIsolationTaskForNano, getattr(process, updatedTauName) )
0118 
0119     return process
0120 
0121 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
0122     if idsToRun: #no-empty list of tauIDs to run
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         #remember to adjust the selection and tables with added IDs
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: # option to use PUPPI jets   
0143             jetCollection = "updatedJetsPuppi"
0144             TagName = "pfUnifiedParticleTransformerAK4JetTags"
0145             tag_prefix = "byUTagPUPPI"
0146             updatedTauName = originalTauName+'WithUTagPUPPI'
0147             # Unified ParT Tagger used for PUPPI jets
0148             from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4JetTags_cfi import pfUnifiedParticleTransformerAK4JetTags
0149             Discriminators = [TagName+":"+tag for tag in pfUnifiedParticleTransformerAK4JetTags.flav_names.value()]
0150         else: # use CHS jets by default
0151             jetCollection = "updatedJets"
0152             TagName = "pfParticleNetFromMiniAODAK4CHSCentralJetTags"
0153             tag_prefix = "byUTagCHS"
0154             updatedTauName = originalTauName+'WithUTagCHS'
0155             # PNet tagger used for CHS jets
0156             from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import pfParticleNetFromMiniAODAK4CHSCentralJetTags
0157             Discriminators = [TagName+":"+tag for tag in pfParticleNetFromMiniAODAK4CHSCentralJetTags.flav_names.value()]
0158 
0159         # Define "hybridTau" producer
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         #remember to adjust the selection and tables with added IDs
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) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
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     # This function is defined in jetsAK4_Puppi_cff.py
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     # This function is defined in jetsAK4_CHS_cff.py
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     # This function is defined in jetsAK8_cff.py
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     # Add Unified Tagger for CHS jets (PNet) for Run 2 era,
0252     # but don't add Unified Tagger for PUPPI jets (as different PUPPI tune
0253     # and base jet algorithm)
0254     (run2_nanoAOD_106Xv2).toModify(
0255         nanoAOD_tau_switch, addPNet = True
0256     )
0257     # Add Unified Taggers for Run 3 pre 142X (pre v15) era (Unified taggers 
0258     # are already added to slimmedTaus in miniAOD for newer eras)
0259     run3_nanoAOD_pre142X.toModify(
0260         nanoAOD_tau_switch, addPNet = True, addUParTInfo = True
0261     )
0262     
0263     # Add Unified Tagger For CHS Jets (PNet 2023)
0264     nanoAOD_addUTagToTaus(process,
0265                           addUTagInfo = nanoAOD_tau_switch.addPNet.value(),
0266                           usePUPPIjets = False
0267     )
0268 
0269     # Add Unified Tagger For PUPPI Jets (UParT 2024)
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     # Add lepton time-life info
0290     from PhysicsTools.NanoAOD.leptonTimeLifeInfo_common_cff import addTimeLifeInfoBase
0291     process = addTimeLifeInfoBase(process)
0292 
0293     return process
0294 
0295 ###increasing the precision of selected GenParticles.
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     # Keep precision same as default RECO for selected particles
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