isData=options.isData, label='AK8PFPuppi', candidates='puppi') ca15CHSSequence = makeFatJets(process, isData=options.isData, label='CA15PFchs', candidates='pfCHS') ca15PuppiSequence = makeFatJets(process, isData=options.isData, label='CA15PFPuppi', candidates='puppi') from PandaProd.Producer.utils.setupBTag import initBTag, setupDoubleBTag initBTag(process, '', 'packedPFCandidates', 'offlineSlimmedPrimaryVertices') ak8CHSDoubleBTagSequence = setupDoubleBTag(process, 'packedPatJetsAK8PFchs', 'AK8PFchs', '', 'ak8') ak8PuppiDoubleBTagSequence = setupDoubleBTag(process, 'packedPatJetsAK8PFPuppi', 'AK8PFPuppi', '', 'ak8') ca15CHSDoubleBTagSequence = setupDoubleBTag(process, 'packedPatJetsCA15PFchs', 'CA15PFchs', '', 'ca15') ca15PuppiDoubleBTagSequence = setupDoubleBTag(process, 'packedPatJetsCA15PFPuppi', 'CA15PFPuppi', '', 'ca15') fatJetSequence = cms.Sequence(fatJetInitSequence + ak8CHSSequence + ak8PuppiSequence + ca15CHSSequence + ca15PuppiSequence + ak8CHSDoubleBTagSequence + ak8PuppiDoubleBTagSequence +
def makeJets(process, isData, label, candidates, suffix): """ Light-weight version of pat addJetCollection. @labels: e.g. 'AK4PFPuppi' """ sequence = cms.Sequence() addattr = AddAttr(process, sequence, suffix) ak4PFJets = addattr('ak4PFJets', ak4PFJetsPuppi.clone( src = candidates, doAreaFastjet = True ) ) jecLevels= ['L1FastJet', 'L2Relative', 'L3Absolute'] if isData: jecLevels.append('L2L3Residual') jetCorrFactors = addattr('jetCorrFactors', patJetCorrFactors.clone( src = ak4PFJets, payload = label, levels = jecLevels, primaryVertices = pvSource ) ) # btag should always use standard PF collection sequence += initBTag(process, '', pfSource, pvSource) sequence += setupBTag( process, jetCollection = ak4PFJets, suffix = suffix, vsuffix = '', muons = muons, electrons = electrons, tags = ['pfCombinedInclusiveSecondaryVertexV2BJetTags'] ) if not isData: genJetMatch = addattr('genJetMatch', patJetGenJetMatch.clone( src = ak4PFJets, maxDeltaR = 0.4, matched = genJets ) ) allPatJets = addattr('patJets', patJets.clone( jetSource = ak4PFJets, addJetCorrFactors = True, jetCorrFactorsSource = [jetCorrFactors], addBTagInfo = True, discriminatorSources = [cms.InputTag('pfCombinedInclusiveSecondaryVertexV2BJetTags' + suffix)], addAssociatedTracks = False, addJetCharge = False, addGenPartonMatch = False, addGenJetMatch = (not isData), getJetMCFlavour = False, addJetFlavourInfo = False ) ) if not isData: addattr.last.genJetMatch = genJetMatch selectedJets = addattr('selectedJets', selectedPatJets.clone( src = allPatJets, cut = 'pt > 15' ) ) addattr('slimmedJets', slimmedJets.clone( src = selectedJets, rekeyDaughters = '0' ) ) return sequence
def initFatJets(process, isData, labels): """ @labels: ['AK8', 'CA15', ...] """ ######################################## ## INITIAL SETUP ## ######################################## sequence = cms.Sequence() addattr = AddAttr(process, sequence) if not isData and not hasattr(process, 'packedGenParticlesForJetsNoNu'): genParticlesNoNu = addattr( 'packedGenParticlesForJetsNoNu', cms.EDFilter( "CandPtrSelector", src=cms.InputTag(finalStateGenParticles), cut=cms.string( "abs(pdgId) != 12 && abs(pdgId) != 14 && abs(pdgId) != 16") )) for label in labels: matches = re.match('(AK|CA)([0-9]+)$', label) if not matches: raise RuntimeError('Unknown algo label ' + label) # set up radius and algoName from the input label radius = float(matches.group(2)) * 0.1 if matches.group(1) == 'CA': algoName = 'CambridgeAachen' elif matches.group(1) == 'AK': algoName = 'AntiKt' # gen jets addattr( 'genJetsNoNu' + label, ak4GenJets.clone(jetAlgorithm=cms.string(algoName), rParam=cms.double(radius), src=genParticlesNoNu)) genJetsMod = addattr.last sdZcut, sdBeta = sdParams(radius) # gen jets soft drop for subjet gen matching addattr( 'genJetsNoNuSoftDrop' + label, genJetsMod.clone(R0=cms.double(radius), useSoftDrop=cms.bool(True), zcut=cms.double(sdZcut), beta=cms.double(sdBeta), writeCompound=cms.bool(True), useExplicitGhosts=cms.bool(True), jetCollInstanceName=cms.string("SubJets"))) # Charged hadron subtraction addattr( 'pfCHS', cms.EDFilter("CandPtrSelector", src=cms.InputTag(pfSource), cut=cms.string("fromPV"))) # Initialize btag inputs sequence += initBTag(process, '', pfSource, pvSource) return sequence
def makeJets(process, isData, label, candidates, suffix): """ Light-weight version of pat addJetCollection. @labels: e.g. 'AK4PFPuppi' """ sequence = cms.Sequence() addattr = AddAttr(process, sequence, suffix) jets = addattr('ak4PFJets', ak4PFJets.clone(src=candidates, doAreaFastjet=True)) jecLevels = ['L1FastJet', 'L2Relative', 'L3Absolute'] if isData: jecLevels.append('L2L3Residual') jetCorrFactors = addattr( 'jetCorrFactors', patJetCorrFactors.clone(src=jets, payload=label, levels=jecLevels, primaryVertices=pvSource)) # btag should always use standard PF collection sequence += initBTag(process, '', pfSource, pvSource) sequence += setupBTag(process, jetCollection=jets, suffix=suffix, vsuffix='', muons=muons, electrons=electrons, tags=[ 'pfCombinedInclusiveSecondaryVertexV2BJetTags', 'pfCombinedMVAV2BJetTags', 'pfDeepCSVJetTags', 'pfDeepCMVAJetTags' ]) qgTagger = addattr('QGTagger', QGTagger.clone(srcJets=jets)) if not isData: genJetMatch = addattr( 'genJetMatch', patJetGenJetMatch.clone(src=jets, maxDeltaR=0.4, matched=genJets)) allPatJets = addattr('patJets', patJets.clone( jetSource = jets, addJetCorrFactors = True, jetCorrFactorsSource = [jetCorrFactors], addBTagInfo = True, discriminatorSources = [ cms.InputTag('pfCombinedInclusiveSecondaryVertexV2BJetTags' + suffix), cms.InputTag('pfCombinedMVAV2BJetTags' + suffix), ] + \ sum([[cms.InputTag('pfDeepCSVJetTags' + suffix, 'prob' + prob), cms.InputTag('pfDeepCMVAJetTags' + suffix, 'prob' + prob)] # for prob in ['udsg', 'b', 'c', 'bb', 'cc']], for prob in ['udsg', 'b', 'c', 'bb']], []), addAssociatedTracks = False, addJetCharge = False, addGenPartonMatch = False, addGenJetMatch = (not isData), getJetMCFlavour = False, addJetFlavourInfo = False ) ) addattr.last.userData.userFloats.src = [ qgTagger.getModuleLabel() + ':qgLikelihood' ] addattr.last.userData.userFloats.labelPostfixesToStrip = cms.vstring( suffix) if not isData: addattr.last.genJetMatch = genJetMatch selectedJets = addattr( 'selectedJets', selectedPatJets.clone(src=allPatJets, cut='pt > 15')) addattr('slimmedJets', slimmedJets.clone(src=selectedJets, rekeyDaughters='0')) return sequence