Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:16:23

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