Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-07-24 04:45:06

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())
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.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     if postfix=='':
0026       # Avoid recomputing the PUPPI collections that are present in AOD
0027       _rerun_puppijets_task = task.copy()
0028       _rerun_puppijets_task.add(getattr(process,'ak8PFJetsPuppi'),
0029                                 getattr(process,'ak8PFJetsPuppiConstituents'),
0030                                 getattr(process,'ak8PFJetsPuppiSoftDrop'),
0031                                 getattr(process,'ak8PFJetsPuppiSoftDropMass'))
0032       (_run2_miniAOD_ANY | pA_2016 ).toReplaceWith(task, _rerun_puppijets_task)
0033       (_run2_miniAOD_ANY | pA_2016 ).toModify(getattr(process,'ak8PFJetsPuppiConstituents'+postfix),
0034         cut = cms.string('pt > 170.0 && abs(rapidity()) < 2.4'))
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 
0099     for e in [pp_on_XeXe_2017]:
0100         e.toModify(getattr(process,'nb1AK8PuppiSoftDrop'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0101         e.toModify(getattr(process,'nb2AK8PuppiSoftDrop'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0102 
0103     from RecoJets.JetProducers.nJettinessAdder_cfi import Njettiness
0104     addToProcessAndTask('NjettinessAK8Subjets'+postfix, Njettiness.clone(), process, task)
0105     getattr(process,"NjettinessAK8Subjets"+postfix).src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")
0106     getattr(process,"patJetsAK8PFPuppiSoftDrop").userData.userFloats.src += ['nb1AK8PuppiSoftDrop'+postfix+':ecfN2','nb1AK8PuppiSoftDrop'+postfix+':ecfN3']
0107     getattr(process,"patJetsAK8PFPuppiSoftDrop").userData.userFloats.src += ['nb2AK8PuppiSoftDrop'+postfix+':ecfN2','nb2AK8PuppiSoftDrop'+postfix+':ecfN3']
0108     addToProcessAndTask('nb1AK8PuppiSoftDropSubjets'+postfix, process.ecfNbeta1.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")), process, task)
0109     addToProcessAndTask('nb2AK8PuppiSoftDropSubjets'+postfix, process.ecfNbeta2.clone(src = cms.InputTag("ak8PFJetsPuppiSoftDrop"+postfix, "SubJets")), process, task)
0110     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['nb1AK8PuppiSoftDropSubjets'+postfix+':ecfN2','nb1AK8PuppiSoftDropSubjets'+postfix+':ecfN3']
0111     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['nb2AK8PuppiSoftDropSubjets'+postfix+':ecfN2','nb2AK8PuppiSoftDropSubjets'+postfix+':ecfN3']
0112     getattr(process,"patJetsAK8PFPuppiSoftDropSubjets"+postfix).userData.userFloats.src += ['NjettinessAK8Subjets'+postfix+':tau1','NjettinessAK8Subjets'+postfix+':tau2','NjettinessAK8Subjets'+postfix+':tau3','NjettinessAK8Subjets'+postfix+':tau4']
0113 
0114     for e in [pp_on_XeXe_2017]:
0115         e.toModify(getattr(process,'nb1AK8PuppiSoftDropSubjets'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0116         e.toModify(getattr(process,'nb2AK8PuppiSoftDropSubjets'+postfix), cuts = ['pt > 999999', 'pt > 999999', 'pt > 999999'] )
0117 
0118         
0119     # Patify AK8 PF PUPPI
0120     addJetCollection(process, postfix=postfix, labelName = 'AK8Puppi',
0121                      jetSource = cms.InputTag('ak8PFJetsPuppi'+postfix),
0122                      algo= 'AK', rParam = 0.8,
0123                      jetCorrections = ('AK8PFPuppi', cms.vstring(['L2Relative', 'L3Absolute']), 'None'),
0124                      btagDiscriminators = None,
0125                      genJetCollection = cms.InputTag('slimmedGenJetsAK8')
0126                      )
0127     getattr(process,"patJetsAK8Puppi"+postfix).userData.userFloats.src = [] # start with empty list of user floats
0128     getattr(process,"selectedPatJetsAK8Puppi"+postfix).cut = cms.string("pt > 100")
0129     getattr(process,"selectedPatJetsAK8Puppi"+postfix).cutLoose = cms.string("pt > 30")
0130     getattr(process,"selectedPatJetsAK8Puppi"+postfix).nLoose = cms.uint32(3)
0131 
0132     from RecoJets.JetAssociationProducers.j2tParametersVX_cfi import j2tParametersVX
0133     addToProcessAndTask('ak8PFJetsPuppiTracksAssociatorAtVertex'+postfix, cms.EDProducer("JetTracksAssociatorAtVertex",
0134                                       j2tParametersVX.clone( coneSize = cms.double(0.8) ),
0135                                       jets = cms.InputTag("ak8PFJetsPuppi") ),
0136                         process, task)
0137     addToProcessAndTask('patJetAK8PuppiCharge'+postfix, cms.EDProducer("JetChargeProducer",
0138                                      src = cms.InputTag("ak8PFJetsPuppiTracksAssociatorAtVertex"),
0139                                      var = cms.string('Pt'),
0140                                      exp = cms.double(1.0) ), 
0141                         process, task)
0142 
0143     ## now add AK8 groomed masses and ECF
0144     getattr(process,"patJetsAK8Puppi"+postfix).userData.userFloats.src += ['ak8PFJetsPuppiSoftDropMass'+postfix]
0145     getattr(process,"patJetsAK8Puppi"+postfix).addTagInfos = cms.bool(False)
0146 
0147 
0148     # add PUPPI Njetiness    
0149     addToProcessAndTask('NjettinessAK8Puppi'+postfix, Njettiness.clone(), process, task)
0150     getattr(process,"NjettinessAK8Puppi"+postfix).src = cms.InputTag("ak8PFJetsPuppi"+postfix)
0151     getattr(process,"patJetsAK8Puppi").userData.userFloats.src += ['NjettinessAK8Puppi'+postfix+':tau1','NjettinessAK8Puppi'+postfix+':tau2','NjettinessAK8Puppi'+postfix+':tau3','NjettinessAK8Puppi'+postfix+':tau4']
0152 
0153     
0154     addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropSubjets"+postfix,
0155                         cms.EDProducer("PATJetSlimmer",
0156                              src = cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropSubjets"),
0157                              packedPFCandidates = cms.InputTag("packedPFCandidates"),
0158                              dropJetVars = cms.string("1"),
0159                              dropDaughters = cms.string("0"),
0160                              rekeyDaughters = cms.string("1"),
0161                              dropTrackRefs = cms.string("1"),
0162                              dropSpecific = cms.string("1"),
0163                              dropTagInfos = cms.string("1"),
0164                              modifyJets = cms.bool(True),
0165                              mixedDaughters = cms.bool(False),
0166                              modifierConfig = cms.PSet( modifications = cms.VPSet() )
0167                                        ),
0168                         process, task)
0169 
0170     
0171     ## Establish references between PATified fat jets and subjets using the BoostedJetMerger
0172     addToProcessAndTask("slimmedJetsAK8PFPuppiSoftDropPacked"+postfix,
0173                         cms.EDProducer("BoostedJetMerger",
0174                                jetSrc=cms.InputTag("selectedPatJetsAK8PFPuppiSoftDrop"),
0175                                subjetSrc=cms.InputTag("slimmedJetsAK8PFPuppiSoftDropSubjets")
0176                                        ),
0177                         process, task )
0178 
0179     
0180     addToProcessAndTask("packedPatJetsAK8"+postfix, cms.EDProducer("JetSubstructurePacker",
0181                                            jetSrc = cms.InputTag("selectedPatJetsAK8Puppi"+postfix),
0182                                            distMax = cms.double(0.8),
0183                                            algoTags = cms.VInputTag(
0184                                                cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked"+postfix)
0185                                            ),
0186                                            algoLabels = cms.vstring(
0187                                                'SoftDropPuppi'
0188                                            ),
0189                                           fixDaughters = cms.bool(True),
0190                                           packedPFCandidates = cms.InputTag("packedPFCandidates"+postfix),
0191                                                                    ),
0192                         process, task)
0193 
0194     # switch off daughter re-keying since it's done in the JetSubstructurePacker (and can't be done afterwards)
0195     process.slimmedJetsAK8.rekeyDaughters = "0"
0196     # Reconfigure the slimmedAK8 jet information to keep 
0197     process.slimmedJetsAK8.dropDaughters = cms.string("pt < 170")
0198     process.slimmedJetsAK8.dropSpecific = cms.string("pt < 170")
0199     process.slimmedJetsAK8.dropTagInfos = cms.string("pt < 170")