Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-14 23:36:35

0001 import FWCore.ParameterSet.Config as cms
0002 
0003 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
0004 
0005 def applySubstructure( process, postfix="" ) :
0006 
0007     task = getPatAlgosToolsTask(process)
0008 
0009     from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection
0010     from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
0011 
0012     from PhysicsTools.PatAlgos.producersLayer1.jetProducer_cfi import _patJets as patJetsDefault
0013 
0014     # Configure the RECO jets
0015     from RecoJets.JetProducers.ak8PFJets_cfi import ak8PFJetsPuppi, ak8PFJetsPuppiSoftDrop, ak8PFJetsPuppiConstituents
0016     setattr(process,'ak8PFJetsPuppi'+postfix,ak8PFJetsPuppi.clone())
0017     setattr(process,'ak8PFJetsPuppiConstituents'+postfix, ak8PFJetsPuppiConstituents.clone())
0018     setattr(process,'ak8PFJetsPuppiSoftDrop'+postfix, ak8PFJetsPuppiSoftDrop.clone( src = 'ak8PFJetsPuppiConstituents'+postfix+':constituents' ))
0019     from RecoJets.JetProducers.ak8PFJetsPuppi_groomingValueMaps_cfi import ak8PFJetsPuppiSoftDropMass
0020     setattr(process,'ak8PFJetsPuppiSoftDropMass'+postfix, ak8PFJetsPuppiSoftDropMass.clone())
0021 
0022     from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL
0023     _run2_miniAOD_ANY = (run2_miniAOD_UL)
0024     from Configuration.Eras.Modifier_pA_2016_cff import pA_2016
0025     # Avoid recomputing the PUPPI collections that are present in AOD
0026     _rerun_puppijets_task = task.copy()
0027     _rerun_puppijets_task.add(getattr(process,'ak8PFJetsPuppi'+postfix),
0028                               getattr(process,'ak8PFJetsPuppiConstituents'+postfix),
0029                               getattr(process,'ak8PFJetsPuppiSoftDrop'+postfix),
0030                               getattr(process,'ak8PFJetsPuppiSoftDropMass'+postfix))
0031     (_run2_miniAOD_ANY | pA_2016 ).toReplaceWith(task, _rerun_puppijets_task)
0032 
0033     from RecoJets.JetProducers.ak8GenJets_cfi import ak8GenJets, ak8GenJetsSoftDrop, ak8GenJetsConstituents
0034     addToProcessAndTask('ak8GenJetsNoNuConstituents'+postfix, ak8GenJetsConstituents.clone(src='ak8GenJetsNoNu'), process, task )
0035     addToProcessAndTask('ak8GenJetsNoNuSoftDrop'+postfix,ak8GenJetsSoftDrop.clone(src=cms.InputTag('ak8GenJetsNoNuConstituents'+postfix, 'constituents')),process,task)
0036     addToProcessAndTask('slimmedGenJetsAK8SoftDropSubJets'+postfix,
0037       cms.EDProducer("PATGenJetSlimmer",
0038       src = cms.InputTag("ak8GenJetsNoNuSoftDrop"+postfix, "SubJets"),
0039       packedGenParticles = cms.InputTag("packedGenParticles"),
0040       cut = cms.string(""),
0041       cutLoose = cms.string(""),
0042       nLoose = cms.uint32(0),
0043       clearDaughters = cms.bool(False), #False means rekeying
0044       dropSpecific = cms.bool(True),  # Save space
0045     ), process, task )
0046 
0047     ## PATify puppi soft drop fat jets
0048     addJetCollection(
0049       process,
0050       labelName = 'AK8PFPuppiSoftDrop'+postfix,
0051       jetSource = cms.InputTag('ak8PFJetsPuppiSoftDrop'+postfix),
0052       btagDiscriminators = ['None'],
0053       genJetCollection = cms.InputTag('slimmedGenJetsAK8'), 
0054       jetCorrections = ('AK8PFPuppi', ['L2Relative', 'L3Absolute'], 'None'),
0055       getJetMCFlavour = False # jet flavor disabled
0056     )
0057 
0058     ## PATify soft drop subjets
0059     addJetCollection(
0060       process,
0061       labelName = 'AK8PFPuppiSoftDropSubjets'+postfix,
0062       jetSource = cms.InputTag('ak8PFJetsPuppiSoftDrop'+postfix,'SubJets'),
0063       algo = 'ak',  # needed for subjet flavor clustering
0064       rParam = 0.8, # needed for subjet flavor clustering
0065       jetCorrections = ('AK4PFPuppi', ['L2Relative', 'L3Absolute'], 'None'),
0066       explicitJTA = True,  # needed for subjet b tagging
0067       svClustering = True, # needed for subjet b tagging
0068       genJetCollection = cms.InputTag('slimmedGenJetsAK8SoftDropSubJets'),
0069       fatJets=cms.InputTag('ak8PFJetsPuppi'),             # needed for subjet flavor clustering
0070       groomedFatJets=cms.InputTag('ak8PFJetsPuppiSoftDrop') # needed for subjet flavor clustering
0071     )
0072 
0073     # add groomed ECFs and N-subjettiness to soft dropped pat::Jets for fat jets and subjets
0074     process.load('RecoJets.JetProducers.ECF_cff')
0075     addToProcessAndTask('nb1AK8PuppiSoftDrop'+postfix, process.ecfNbeta1.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix), cuts = cms.vstring('', '', 'pt > 250')), process, task)
0076     addToProcessAndTask('nb2AK8PuppiSoftDrop'+postfix, process.ecfNbeta2.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix), cuts = cms.vstring('', '', 'pt > 250')), process, task)
0077 
0078     #too slow now ==> disable
0079     from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017
0080 
0081     for e in [pp_on_XeXe_2017]:
0082         e.toModify(getattr(process,'nb1AK8PuppiSoftDrop'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0083         e.toModify(getattr(process,'nb2AK8PuppiSoftDrop'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0084 
0085     from RecoJets.JetProducers.nJettinessAdder_cfi import Njettiness
0086     addToProcessAndTask('NjettinessAK8Subjets'+postfix, Njettiness.clone(), process, task)
0087     getattr(process,"NjettinessAK8Subjets"+postfix).src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")
0088     getattr(process,"patJetsAK8PFPuppiSoftDrop").userData.userFloats.src += ['nb1AK8PuppiSoftDrop'+postfix+':ecfN2','nb1AK8PuppiSoftDrop'+postfix+':ecfN3']
0089     getattr(process,"patJetsAK8PFPuppiSoftDrop").userData.userFloats.src += ['nb2AK8PuppiSoftDrop'+postfix+':ecfN2','nb2AK8PuppiSoftDrop'+postfix+':ecfN3']
0090     addToProcessAndTask('nb1AK8PuppiSoftDropSubjets'+postfix, process.ecfNbeta1.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")), process, task)
0091     addToProcessAndTask('nb2AK8PuppiSoftDropSubjets'+postfix, process.ecfNbeta2.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")), process, task)
0092     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['nb1AK8PuppiSoftDropSubjets'+postfix+':ecfN2','nb1AK8PuppiSoftDropSubjets'+postfix+':ecfN3']
0093     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['nb2AK8PuppiSoftDropSubjets'+postfix+':ecfN2','nb2AK8PuppiSoftDropSubjets'+postfix+':ecfN3']
0094     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['NjettinessAK8Subjets'+postfix+':tau1','NjettinessAK8Subjets'+postfix+':tau2','NjettinessAK8Subjets'+postfix+':tau3','NjettinessAK8Subjets'+postfix+':tau4']
0095 
0096     for e in [pp_on_XeXe_2017]:
0097         e.toModify(getattr(process,'nb1AK8PuppiSoftDropSubjets'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0098         e.toModify(getattr(process,'nb2AK8PuppiSoftDropSubjets'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0099 
0100 
0101     # Patify AK8 PF PUPPI
0102     addJetCollection(process, labelName = 'AK8Puppi'+postfix,
0103       jetSource = cms.InputTag('ak8PFJetsPuppi'+postfix),
0104       algo= 'AK', rParam = 0.8,
0105       jetCorrections = ('AK8PFPuppi', cms.vstring(['L2Relative', 'L3Absolute']), 'None'),
0106       btagDiscriminators = None,
0107       genJetCollection = cms.InputTag('slimmedGenJetsAK8')
0108     )
0109     getattr(process,"patJetsAK8Puppi"+postfix).userData.userFloats.src = [] # start with empty list of user floats
0110     getattr(process,"selectedPatJetsAK8Puppi"+postfix).cut = cms.string("pt > 100")
0111     getattr(process,"selectedPatJetsAK8Puppi"+postfix).cutLoose = cms.string("pt > 30")
0112     getattr(process,"selectedPatJetsAK8Puppi"+postfix).nLoose = cms.uint32(3)
0113 
0114     from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import j2tParametersVX
0115     addToProcessAndTask('ak8PFJetsPuppiTracksAssociatorAtVertex'+postfix, cms.EDProducer("JetTracksAssociatorAtVertex",
0116                                       j2tParametersVX.clone( coneSize = cms.double(0.8) ),
0117                                       jets = cms.InputTag("ak8PFJetsPuppi") ),
0118                         process, task)
0119     addToProcessAndTask('patJetAK8PuppiCharge'+postfix, cms.EDProducer("JetChargeProducer",
0120                                      src = cms.InputTag("ak8PFJetsPuppiTracksAssociatorAtVertex"),
0121                                      var = cms.string('Pt'),
0122                                      exp = cms.double(1.0) ), 
0123                         process, task)
0124 
0125     ## now add AK8 groomed masses and ECF
0126     getattr(process,"patJetsAK8Puppi"+postfix).userData.userFloats.src += ['ak8PFJetsPuppiSoftDropMass'+postfix]
0127     getattr(process,"patJetsAK8Puppi"+postfix).addTagInfos = cms.bool(False)
0128 
0129 
0130     # add PUPPI Njetiness
0131     addToProcessAndTask('NjettinessAK8Puppi'+postfix, Njettiness.clone(), process, task)
0132     getattr(process,"NjettinessAK8Puppi"+postfix).src = cms.InputTag("ak8PFJetsPuppi"+postfix)
0133     getattr(process,"patJetsAK8Puppi").userData.userFloats.src += ['NjettinessAK8Puppi'+postfix+':tau1','NjettinessAK8Puppi'+postfix+':tau2','NjettinessAK8Puppi'+postfix+':tau3','NjettinessAK8Puppi'+postfix+':tau4']
0134 
0135     # slim subjet collection
0136     addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropSubjetsNoDeepTags"+postfix, cms.EDProducer("PATJetSlimmer",
0137         src = cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropSubjets"),
0138         packedPFCandidates = cms.InputTag("packedPFCandidates"),
0139         dropJetVars = cms.string("1"),
0140         dropDaughters = cms.string("0"),
0141         rekeyDaughters = cms.string("1"),
0142         dropTrackRefs = cms.string("1"),
0143         dropSpecific = cms.string("1"),
0144         dropTagInfos = cms.string("1"),
0145         modifyJets = cms.bool(True),
0146         mixedDaughters = cms.bool(False),
0147         modifierConfig = cms.PSet( modifications = cms.VPSet() )
0148       ), process, task
0149     )
0150 
0151     # Setup DeepJet and UParT taggers for subjet
0152     from RecoBTag.ONNXRuntime.pfUnifiedParticleTransformerAK4_cff import _pfUnifiedParticleTransformerAK4JetTagsAll as pfUnifiedParticleTransformerAK4JetTagsAll
0153     _btagDiscriminatorsSubjets = cms.PSet(
0154       names=cms.vstring(
0155         'pfDeepFlavourJetTags:probb',
0156         'pfDeepFlavourJetTags:probbb',
0157         'pfDeepFlavourJetTags:problepb',
0158         'pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll',
0159         'pfUnifiedParticleTransformerAK4JetTags:ptcorr',
0160         'pfUnifiedParticleTransformerAK4JetTags:ptnu',
0161         'pfUnifiedParticleTransformerAK4JetTags:ptreshigh',
0162         'pfUnifiedParticleTransformerAK4JetTags:ptreslow',
0163         'pfUnifiedParticleTransformerAK4V1JetTags:ptcorr',
0164         'pfUnifiedParticleTransformerAK4V1JetTags:ptnu',
0165         'pfUnifiedParticleTransformerAK4V1JetTags:ptreshigh',
0166         'pfUnifiedParticleTransformerAK4V1JetTags:ptreslow',
0167       )
0168     )
0169     updateJetCollection(
0170       process,
0171       labelName = 'AK8PFPuppiSoftDropSubjets',
0172       postfix = 'SlimmedDeepFlavour'+postfix,
0173       jetSource = cms.InputTag('slimmedJetsAK8PFPuppiSoftDropSubjetsNoDeepTags'),
0174       # updateJetCollection defaults to MiniAOD inputs but
0175       # here it is made explicit (as in training or MINIAOD redoing)
0176       pfCandidates = cms.InputTag('packedPFCandidates'),
0177       pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
0178       svSource = cms.InputTag('slimmedSecondaryVertices'),
0179       muSource = cms.InputTag('slimmedMuons'),
0180       elSource = cms.InputTag('slimmedElectrons'),
0181       jetCorrections = ('AK4PFPuppi', ['L2Relative', 'L3Absolute'], 'None'),
0182       printWarning = False,
0183       btagDiscriminators = _btagDiscriminatorsSubjets.names.value(),
0184     )
0185 
0186     ## Establish references between PATified fat jets and subjets using the BoostedJetMerger
0187     addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropPacked"+postfix, cms.EDProducer("BoostedJetMerger",
0188         jetSrc=cms.InputTag("selectedPatJetsAK8PFPuppiSoftDrop"+postfix),
0189         subjetSrc=cms.InputTag("selectedUpdatedPatJetsAK8PFPuppiSoftDropSubjetsSlimmedDeepFlavour"+postfix)
0190       ), process, task
0191     )
0192 
0193     addToProcessAndTask("packedPatJetsAK8"+postfix, cms.EDProducer("JetSubstructurePacker",
0194         jetSrc = cms.InputTag("selectedPatJetsAK8Puppi"+postfix),
0195         distMax = cms.double(0.8),
0196         algoTags = cms.VInputTag(
0197           cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked"+postfix)
0198         ),
0199         algoLabels = cms.vstring(
0200           'SoftDropPuppi'
0201         ),
0202         fixDaughters = cms.bool(True),
0203         packedPFCandidates = cms.InputTag("packedPFCandidates"),
0204       ), process, task
0205     )
0206 
0207     # switch off daughter re-keying since it's done in the JetSubstructurePacker (and can't be done afterwards)
0208     process.slimmedJetsAK8.rekeyDaughters = "0"
0209     # Reconfigure the slimmedAK8 jet information to keep
0210     process.slimmedJetsAK8.dropDaughters = cms.string("pt < 170")
0211     process.slimmedJetsAK8.dropSpecific = cms.string("pt < 170")
0212     process.slimmedJetsAK8.dropTagInfos = cms.string("pt < 170")