def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetSequenceName=""): """ Setup modules to calculate PF jet ID """ isPUPPIJet = True if "Puppi" in jetName else False looseJetId = "looseJetId{}".format(jetName) setattr(proc, looseJetId, proc.looseJetId.clone( src = jetSrc, filterParams=proc.looseJetId.filterParams.clone( version ="WINTER16" ), ) ) tightJetId = "tightJetId{}".format(jetName) setattr(proc, tightJetId, proc.tightJetId.clone( src = jetSrc, filterParams=proc.tightJetId.filterParams.clone( version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") ), ) ) tightJetIdLepVeto = "tightJetIdLepVeto{}".format(jetName) setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone( src = jetSrc, filterParams=proc.tightJetIdLepVeto.filterParams.clone( version = "SUMMER18{}".format("PUPPI" if isPUPPIJet else "") ), ) ) run2_jme_2016.toModify(getattr(proc, tightJetId) .filterParams, version = "WINTER16" ) run2_jme_2016.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version = "WINTER16" ) run2_jme_2017.toModify(getattr(proc, tightJetId) .filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) run2_jme_2017.toModify(getattr(proc, tightJetIdLepVeto) .filterParams, version = "WINTER17{}".format("PUPPI" if isPUPPIJet else "")) # # Save variables as userInts in each jet # patJetWithUserData = "{}WithUserData".format(jetSrc) getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId) getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto) run2_jme_2016.toModify(getattr(proc, patJetWithUserData).userInts, looseId = cms.InputTag(looseJetId)) # # Specfiy variables in the jetTable to save in NanoAOD # getattr(proc, jetTableName).variables.jetId = Var("userInt('tightId')*2+4*userInt('tightIdLepVeto')",int,doc="Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto") run2_jme_2016.toModify(getattr(proc, jetTableName).variables, jetId = Var("userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int, doc="Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto")) getattr(proc,jetSequenceName).insert(getattr(proc,jetSequenceName).index(getattr(proc, jetSrc))+1, getattr(proc, tightJetId)) getattr(proc,jetSequenceName).insert(getattr(proc,jetSequenceName).index(getattr(proc, tightJetId))+1, getattr(proc, tightJetIdLepVeto)) setattr(proc,"_"+jetSequenceName+"_2016", getattr(proc,jetSequenceName).copy()) getattr(proc,"_"+jetSequenceName+"_2016").insert(getattr(proc, "_"+jetSequenceName+"_2016").index(getattr(proc, tightJetId)), getattr(proc, looseJetId)) run2_jme_2016.toReplaceWith(getattr(proc,jetSequenceName), getattr(proc, "_"+jetSequenceName+"_2016")) return proc
def setupAK15(process, runOnMC=False, path=None, runParticleNetMD=True): # recluster Puppi jets bTagDiscriminators = [ 'pfJetProbabilityBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probbb', ] subjetBTagDiscriminators = [ 'pfJetProbabilityBJetTags', 'pfCombinedInclusiveSecondaryVertexV2BJetTags', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probbb', ] JETCorrLevels = ['L2Relative', 'L3Absolute', 'L2L3Residual'] from PhysicsTools.PFNano.jetToolbox_cff import jetToolbox jetToolbox(process, 'ak15', 'dummySeqAK15', 'noOutput', PUMethod='Puppi', JETCorrPayload='AK8PFPuppi', JETCorrLevels=JETCorrLevels, Cut='pt > 160.0 && abs(rapidity()) < 2.4', runOnMC=runOnMC, addNsub=True, maxTau=3, addSoftDrop=True, addSoftDropSubjets=True, subJETCorrPayload='AK4PFPuppi', subJETCorrLevels=JETCorrLevels, bTagDiscriminators=bTagDiscriminators, subjetBTagDiscriminators=subjetBTagDiscriminators) if runOnMC: process.ak15GenJetsNoNu.jetPtMin = 100 process.ak15GenJetsNoNuSoftDrop.jetPtMin = 100 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsProbs as pfParticleNetJetTagsProbs from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfMassDecorrelatedParticleNetJetTagsProbs as pfMassDecorrelatedParticleNetJetTagsProbs bTagDiscriminators += pfParticleNetJetTagsProbs if runParticleNetMD: bTagDiscriminators += pfMassDecorrelatedParticleNetJetTagsProbs #from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsProbs, _pfMassDecorrelatedDeepBoostedJetTagsProbs, _pfDeepBoostedJetTagsMetaDiscrs, _pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs #bTagDiscriminators += _pfDeepBoostedJetTagsProbs + _pfMassDecorrelatedDeepBoostedJetTagsProbs + _pfDeepBoostedJetTagsMetaDiscrs + _pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs updateJetCollection( process, jetSource=cms.InputTag('packedPatJetsAK15PFPuppiSoftDrop'), rParam=1.5, jetCorrections=('AK8PFPuppi', cms.vstring(JETCorrLevels), 'None'), btagDiscriminators=bTagDiscriminators, postfix='AK15ParticleNet', ) from RecoBTag.ONNXRuntime.pfParticleNet_cff import pfMassDecorrelatedParticleNetJetTags if runParticleNetMD: process.pfParticleNetTagInfosAK15ParticleNet.jet_radius = 1.5 process.pfMassDecorrelatedParticleNetJetTagsAK15ParticleNet = pfMassDecorrelatedParticleNetJetTags.clone( src=process.pfMassDecorrelatedParticleNetJetTagsAK15ParticleNet. src, preprocess_json= 'PhysicsTools/PFNano/data/ParticleNet-MD/ak15/preprocess.json', model_path= 'PhysicsTools/PFNano/data/ParticleNet-MD/ak15/particle-net.onnx', ) # src srcJets = cms.InputTag('selectedUpdatedPatJetsAK15ParticleNet') # jetID process.looseJetIdAK15Puppi = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('WINTER16'), quality=cms.string('LOOSE'), ), src=srcJets) process.tightJetIdAK15Puppi = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18PUPPI'), quality=cms.string('TIGHT'), ), src=srcJets) process.tightJetIdLepVetoAK15Puppi = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18PUPPI'), quality=cms.string('TIGHTLEPVETO'), ), src=srcJets) run2_jme_2016.toModify(process.tightJetIdAK15Puppi.filterParams, version="WINTER16") run2_jme_2016.toModify(process.tightJetIdLepVetoAK15Puppi.filterParams, version="WINTER16") run2_jme_2017.toModify(process.tightJetIdAK15Puppi.filterParams, version="WINTER17PUPPI") run2_jme_2017.toModify(process.tightJetIdLepVetoAK15Puppi.filterParams, version="WINTER17PUPPI") process.ak15WithUserData = cms.EDProducer( "PATJetUserDataEmbedder", src=srcJets, userFloats=cms.PSet(), userInts=cms.PSet( tightId=cms.InputTag("tightJetIdAK15Puppi"), tightIdLepVeto=cms.InputTag("tightJetIdLepVetoAK15Puppi"), ), ) run2_jme_2016.toModify( process.ak15WithUserData.userInts, looseId=cms.InputTag("looseJetIdAK15Puppi"), tightIdLepVeto=None, ) process.ak15Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("ak15WithUserData"), name=cms.string("FatJetAK15"), # AK15Puppi cut=cms.string(""), doc=cms.string("ak15 puppi jets"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool(False), # this is the main table for the jets variables=cms.PSet( P4Vars, jetId=Var( "userInt('tightId')*2+4*userInt('tightIdLepVeto')", int, doc= "Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto" ), area=Var("jetArea()", float, doc="jet catchment area, for JECs", precision=10), rawFactor=Var("1.-jecFactor('Uncorrected')", float, doc="1 - Factor to get back to raw pT", precision=6), nPFConstituents=Var("numberOfDaughters()", int, doc="Number of PF candidate constituents"), tau1=Var("userFloat('NjettinessAK15Puppi:tau1')", float, doc="Nsubjettiness (1 axis)", precision=10), tau2=Var("userFloat('NjettinessAK15Puppi:tau2')", float, doc="Nsubjettiness (2 axis)", precision=10), tau3=Var("userFloat('NjettinessAK15Puppi:tau3')", float, doc="Nsubjettiness (3 axis)", precision=10), msoftdrop=Var("groomedMass()", float, doc="Corrected soft drop mass with PUPPI", precision=10), btagCSVV2=Var( "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc= "pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10), btagDeepB=Var( "bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')", float, doc="DeepCSV b+bb tag discriminator", precision=10), btagJP=Var( "bDiscriminator('pfJetProbabilityBJetTags')", float, doc="pfJetProbabilityBJetTags b-tag discriminator (aka JP)", precision=10), nBHadrons=Var("jetFlavourInfo().getbHadrons().size()", int, doc="number of b-hadrons"), nCHadrons=Var("jetFlavourInfo().getcHadrons().size()", int, doc="number of c-hadrons"), subJetIdx1=Var( "?nSubjetCollections()>0 && subjets().size()>0?subjets()[0].key():-1", int, doc="index of first subjet"), subJetIdx2=Var( "?nSubjetCollections()>0 && subjets().size()>1?subjets()[1].key():-1", int, doc="index of second subjet"), )) run2_jme_2016.toModify( process.ak15Table.variables, jetId=Var("userInt('tightId')*2+userInt('looseId')", int, doc="Jet ID flags bit1 is loose, bit2 is tight")) process.ak15Table.variables.pt.precision = 10 # add mass-decorelated taggers for prob in pfParticleNetJetTagsProbs: name = 'ParticleNet_' + prob.split(':')[1] setattr( process.ak15Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) if runParticleNetMD: for prob in pfMassDecorrelatedParticleNetJetTagsProbs: name = 'ParticleNetMD_' + prob.split(':')[1] name = name.replace('QCDothers', 'QCD') # FIXME setattr( process.ak15Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) process.ak15SubJetTable = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("selectedPatJetsAK15PFPuppiSoftDropPacked", "SubJets"), cut=cms.string(""), name=cms.string("FatJetAK15SubJet"), # AK15PuppiSubJet doc=cms.string("ak15 puppi subjets"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool(False), # this is the main table for the jets variables=cms.PSet( P4Vars, area=Var("jetArea()", float, doc="jet catchment area, for JECs", precision=10), rawFactor=Var("1.-jecFactor('Uncorrected')", float, doc="1 - Factor to get back to raw pT", precision=6), btagDeepB=Var( "bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')", float, doc="DeepCSV b+bb tag discriminator", precision=10), btagCSVV2=Var( "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc= " pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10), btagJP=Var( "bDiscriminator('pfJetProbabilityBJetTags')", float, doc="pfJetProbabilityBJetTags b-tag discriminator (aka JP)", precision=10), nBHadrons=Var("jetFlavourInfo().getbHadrons().size()", int, doc="number of b-hadrons"), nCHadrons=Var("jetFlavourInfo().getcHadrons().size()", int, doc="number of c-hadrons"), )) process.ak15SubJetTable.variables.pt.precision = 10 process.ak15Task = cms.Task( process.tightJetIdAK15Puppi, process.tightJetIdLepVetoAK15Puppi, process.ak15WithUserData, process.ak15Table, process.ak15SubJetTable, ) if runOnMC: process.genJetAK15Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("ak15GenJetsNoNu"), cut=cms.string("pt > 100."), name=cms.string("GenJetAK15"), doc=cms.string("AK15 GenJets made with visible genparticles"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool( False), # this is the main table for the genjets variables=cms.PSet(P4Vars, )) process.genJetAK15Table.variables.pt.precision = 10 process.genSubJetAK15Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("ak15GenJetsNoNuSoftDrop", "SubJets"), cut=cms.string(""), name=cms.string("GenSubJetAK15"), doc=cms.string("AK15 Gen-SubJets made with visible genparticles"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool( False), # this is the main table for the genjets variables=cms.PSet(P4Vars, )) process.genSubJetAK15Table.variables.pt.precision = 10 process.ak15Task.add(process.genJetAK15Table) process.ak15Task.add(process.genSubJetAK15Table) ###### hack to avoid circular dependency ###### process.jetMC.remove(process.patJetPartons) process.ak15Task.add(process.patJetPartons) ############################################### _ak15Task_2016 = process.ak15Task.copy() _ak15Task_2016.replace(process.tightJetIdLepVetoAK15Puppi, process.looseJetIdAK15Puppi) run2_jme_2016.toReplaceWith(process.ak15Task, _ak15Task_2016) if path is None: process.schedule.associate(process.ak15Task) else: getattr(process, path).associate(process.ak15Task)
src=cms.InputTag("updatedJets")) tightJetId = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18'), quality=cms.string('TIGHT'), ), src=cms.InputTag("updatedJets")) tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18'), quality=cms.string('TIGHTLEPVETO'), ), src=cms.InputTag("updatedJets")) run2_jme_2016.toModify(tightJetId.filterParams, version="WINTER16") run2_jme_2016.toModify(tightJetIdLepVeto.filterParams, version="WINTER16") run2_jme_2017.toModify(tightJetId.filterParams, version="WINTER17") run2_jme_2017.toModify(tightJetIdLepVeto.filterParams, version="WINTER17") looseJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('WINTER16'), quality=cms.string('LOOSE'), ), src=cms.InputTag("updatedJetsAK8")) tightJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18PUPPI'), quality=cms.string('TIGHT'), ), src=cms.InputTag("updatedJetsAK8")) tightJetIdLepVetoAK8 = cms.EDProducer("PatJetIDValueMapProducer",
def setupCustomizedAK8(process, runOnMC=False, path=None): # recluster Puppi jets bTagDiscriminators = [ 'pfCombinedInclusiveSecondaryVertexV2BJetTags', 'pfBoostedDoubleSecondaryVertexAK8BJetTags', ] subjetBTagDiscriminators = [ 'pfCombinedInclusiveSecondaryVertexV2BJetTags', 'pfDeepCSVJetTags:probb', 'pfDeepCSVJetTags:probbb', ] JETCorrLevels = ['L2Relative', 'L3Absolute', 'L2L3Residual'] from PhysicsTools.NanoTuples.jetToolbox_cff import jetToolbox jetToolbox(process, 'ak8', 'dummySeqAK8', 'noOutput', PUMethod='Puppi', JETCorrPayload='AK8PFPuppi', JETCorrLevels=JETCorrLevels, Cut='pt > 170.0 && abs(rapidity()) < 2.4', runOnMC=runOnMC, addNsub=True, maxTau=3, addSoftDrop=True, addSoftDropSubjets=True, subJETCorrPayload='AK4PFPuppi', subJETCorrLevels=JETCorrLevels, bTagDiscriminators=bTagDiscriminators, subjetBTagDiscriminators=subjetBTagDiscriminators) if runOnMC: process.ak8GenJetsNoNu.jetPtMin = 100 process.ak8GenJetsNoNuSoftDrop.jetPtMin = 100 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsProbs, _pfMassDecorrelatedDeepBoostedJetTagsProbs from RecoBTag.MXNet.pfParticleNet_cff import _pfParticleNetJetTagsProbs, _pfMassDecorrelatedParticleNetJetTagsProbs updateJetCollection( process, jetSource=cms.InputTag('packedPatJetsAK8PFPuppiSoftDrop'), rParam=0.8, jetCorrections=('AK8PFPuppi', cms.vstring(JETCorrLevels), 'None'), btagDiscriminators=bTagDiscriminators + _pfDeepBoostedJetTagsProbs + _pfMassDecorrelatedDeepBoostedJetTagsProbs + _pfParticleNetJetTagsProbs + _pfMassDecorrelatedParticleNetJetTagsProbs, postfix='AK8WithPuppiDaughters', ) # src srcJets = cms.InputTag('selectedUpdatedPatJetsAK8WithPuppiDaughters') # jetID process.looseJetIdCustomAK8 = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('WINTER16'), quality=cms.string('LOOSE'), ), src=srcJets) process.tightJetIdCustomAK8 = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18PUPPI'), quality=cms.string('TIGHT'), ), src=srcJets) process.tightJetIdLepVetoCustomAK8 = cms.EDProducer( "PatJetIDValueMapProducer", filterParams=cms.PSet( version=cms.string('SUMMER18PUPPI'), quality=cms.string('TIGHTLEPVETO'), ), src=srcJets) run2_jme_2016.toModify(process.tightJetIdCustomAK8.filterParams, version="WINTER16") run2_jme_2016.toModify(process.tightJetIdLepVetoCustomAK8.filterParams, version="WINTER16") run2_jme_2017.toModify(process.tightJetIdCustomAK8.filterParams, version="WINTER17PUPPI") run2_jme_2017.toModify(process.tightJetIdLepVetoCustomAK8.filterParams, version="WINTER17PUPPI") process.customAK8WithUserData = cms.EDProducer( "PATJetUserDataEmbedder", src=srcJets, userFloats=cms.PSet(), userInts=cms.PSet( tightId=cms.InputTag("tightJetIdCustomAK8"), tightIdLepVeto=cms.InputTag("tightJetIdLepVetoCustomAK8"), ), ) run2_jme_2016.toModify( process.customAK8WithUserData.userInts, looseId=cms.InputTag("looseJetIdCustomAK8"), tightIdLepVeto=None, ) process.customAK8Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("customAK8WithUserData"), name=cms.string("CustomAK8Puppi"), cut=cms.string(""), doc=cms.string("reclustered ak8 puppi jets"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool(False), # this is the main table for the jets variables=cms.PSet( P4Vars, jetId=Var( "userInt('tightId')*2+4*userInt('tightIdLepVeto')", int, doc= "Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto" ), area=Var("jetArea()", float, doc="jet catchment area, for JECs", precision=10), rawFactor=Var("1.-jecFactor('Uncorrected')", float, doc="1 - Factor to get back to raw pT", precision=6), nPFConstituents=Var("numberOfDaughters()", int, doc="Number of PF candidate constituents"), tau1=Var("userFloat('NjettinessAK8Puppi:tau1')", float, doc="Nsubjettiness (1 axis)", precision=10), tau2=Var("userFloat('NjettinessAK8Puppi:tau2')", float, doc="Nsubjettiness (2 axis)", precision=10), tau3=Var("userFloat('NjettinessAK8Puppi:tau3')", float, doc="Nsubjettiness (3 axis)", precision=10), msoftdrop=Var("groomedMass()", float, doc="Corrected soft drop mass with PUPPI", precision=10), btagCSVV2=Var( "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc= " pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10), btagHbb=Var( "bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')", float, doc="Higgs to BB tagger discriminator", precision=10), nBHadrons=Var("jetFlavourInfo().getbHadrons().size()", int, doc="number of b-hadrons"), nCHadrons=Var("jetFlavourInfo().getcHadrons().size()", int, doc="number of c-hadrons"), subJetIdx1=Var( "?nSubjetCollections()>0 && subjets().size()>0?subjets()[0].key():-1", int, doc="index of first subjet"), subJetIdx2=Var( "?nSubjetCollections()>0 && subjets().size()>1?subjets()[1].key():-1", int, doc="index of second subjet"), )) run2_jme_2016.toModify( process.customAK8Table.variables, jetId=Var("userInt('tightId')*2+userInt('looseId')", int, doc="Jet ID flags bit1 is loose, bit2 is tight")) process.customAK8Table.variables.pt.precision = 10 # add DeepAK8 scores: nominal for prob in _pfDeepBoostedJetTagsProbs: name = 'DeepAK8_' + prob.split(':')[1] setattr( process.customAK8Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) # add DeepAK8 scores: mass decorrelated for prob in _pfMassDecorrelatedDeepBoostedJetTagsProbs: name = 'DeepAK8MD_' + prob.split(':')[1] setattr( process.customAK8Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) # add ParticleNet nominal taggers for prob in _pfParticleNetJetTagsProbs: name = 'ParticleNet_' + prob.split(':')[1] setattr( process.customAK8Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) # add ParticleNet mass-decorelated taggers for prob in _pfMassDecorrelatedParticleNetJetTagsProbs: name = 'ParticleNetMD_' + prob.split(':')[1] setattr( process.customAK8Table.variables, name, Var("bDiscriminator('%s')" % prob, float, doc=prob, precision=-1)) process.customAK8SubJetTable = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("selectedPatJetsAK8PFPuppiSoftDropPacked", "SubJets"), cut=cms.string(""), name=cms.string("CustomAK8PuppiSubJet"), doc=cms.string("reculstered ak8 puppi subjets"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool(False), # this is the main table for the jets variables=cms.PSet( P4Vars, area=Var("jetArea()", float, doc="jet catchment area, for JECs", precision=10), rawFactor=Var("1.-jecFactor('Uncorrected')", float, doc="1 - Factor to get back to raw pT", precision=6), btagDeepB=Var( "bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')", float, doc="DeepCSV b+bb tag discriminator", precision=10), btagCSVV2=Var( "bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')", float, doc= " pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)", precision=10), nBHadrons=Var("jetFlavourInfo().getbHadrons().size()", int, doc="number of b-hadrons"), nCHadrons=Var("jetFlavourInfo().getcHadrons().size()", int, doc="number of c-hadrons"), )) process.customAK8SubJetTable.variables.pt.precision = 10 process.customizedAK8Task = cms.Task(process.tightJetIdCustomAK8, process.tightJetIdLepVetoCustomAK8, process.customAK8WithUserData, process.customAK8Table, process.customAK8SubJetTable) if runOnMC: process.customGenJetAK8Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("ak8GenJetsNoNu"), cut=cms.string("pt > 100."), name=cms.string("CustomGenJetAK8"), doc=cms.string("AK8 GenJets made with visible genparticles"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool( False), # this is the main table for the genjets variables=cms.PSet(P4Vars, )) process.customGenJetAK8Table.variables.pt.precision = 10 process.customGenSubJetAK8Table = cms.EDProducer( "SimpleCandidateFlatTableProducer", src=cms.InputTag("ak8GenJetsNoNuSoftDrop", "SubJets"), cut=cms.string(""), name=cms.string("CustomGenSubJetAK8"), doc=cms.string("AK8 Gen-SubJets made with visible genparticles"), singleton=cms.bool(False), # the number of entries is variable extension=cms.bool( False), # this is the main table for the genjets variables=cms.PSet(P4Vars, )) process.customGenSubJetAK8Table.variables.pt.precision = 10 process.customizedAK8Task.add(process.customGenJetAK8Table) process.customizedAK8Task.add(process.customGenSubJetAK8Table) _customizedAK8Task_80X = process.customizedAK8Task.copy() _customizedAK8Task_80X.replace(process.tightJetIdLepVetoCustomAK8, process.looseJetIdCustomAK8) run2_jme_2016.toReplaceWith(process.customizedAK8Task, _customizedAK8Task_80X) if path is None: process.schedule.associate(process.customizedAK8Task) else: getattr(process, path).associate(process.customizedAK8Task)
def addRecoJetCollection( self, proc, jet, inputCollection="", genJetsCollection="", minPt=5., bTagDiscriminators=None, JETCorrLevels=None, ): print( "jetCollectionTools::RecoJetAdder::addRecoJetCollection: Adding Reco Jet Collection: {}" .format(jet)) currentTasks = [] if inputCollection and inputCollection not in [ "slimmedJets", "slimmedJetsAK8", "slimmedJetsPuppi", "slimmedCaloJets", ]: raise RuntimeError("Invalid input collection: %s" % inputCollection) if bTagDiscriminators is None: bTagDiscriminators = self.bTagDiscriminators if JETCorrLevels is None: JETCorrLevels = self.JETCorrLevels # # Decide which jet collection we're dealing with # recoJetInfo = RecoJetInfo(jet, inputCollection) jetLower = recoJetInfo.jetLower jetUpper = recoJetInfo.jetUpper tagName = recoJetInfo.jetTagName if inputCollection == "slimmedJets": assert (jetLower == "ak4pfchs") elif inputCollection == "slimmedJetsAK8": assert (jetLower == "ak8pfpuppi") elif inputCollection == "slimmedJetsPuppi": assert (jetLower == "ak4pfpuppi") elif inputCollection == "slimmedCaloJets": assert (jetLower == "ak4calo") #======================================================= # # If jet collection in MiniAOD is not # specified, build the jet collection. # #======================================================== if not inputCollection or recoJetInfo.doCalo: print( "jetCollectionTools::RecoJetAdder::addRecoJetCollection: inputCollection not specified. Building recojet collection now" ) #======================================================= # # Prepare the inputs to jet clustering # #======================================================== # # Set up PF candidates # pfCand = self.pfLabel # # Setup PU method for PF candidates # if recoJetInfo.jetPUMethod not in ["", "cs"]: pfCand += recoJetInfo.jetPUMethod # # # if pfCand not in self.prerequisites: # # Skip if no PU Method or CS specified # if recoJetInfo.jetPUMethod in ["", "cs"]: pass # # CHS # elif recoJetInfo.jetPUMethod == "chs": setattr( proc, pfCand, cms.EDFilter( "CandPtrSelector", src=cms.InputTag(self.pfLabel), cut=cms.string("fromPV"), )) self.prerequisites.append(pfCand) # # PUPPI # elif recoJetInfo.jetPUMethod == "puppi": setattr( proc, pfCand, puppi.clone( candName=self.pfLabel, vertexName=self.pvLabel, )) self.prerequisites.append(pfCand) # # Softkiller # elif recoJetInfo.jetPUMethod == "sk": setattr( proc, pfCand, softKiller.clone( PFCandidates=self.pfLabel, rParam=recoJetInfo.jetSizeNr, )) self.prerequisites.append(pfCand) else: raise RuntimeError( "Currently unsupported PU method: '%s'" % recoJetInfo.jetPUMethod) #============================================ # # Create the recojet collection # #============================================ if not recoJetInfo.doCalo: jetCollection = '{}Collection'.format(tagName) if jetCollection in self.main: raise ValueError("Step '%s' already implemented" % jetCollection) setattr( proc, jetCollection, ak4PFJetsCS.clone( src=pfCand, doAreaFastjet=True, jetPtMin=minPt, jetAlgorithm=supportedJetAlgos[recoJetInfo.jetAlgo], rParam=recoJetInfo.jetSizeNr, useConstituentSubtraction=recoJetInfo.doCS, csRParam=0.4 if recoJetInfo.doCS else -1., csRho_EtaMax=PFJetParameters.Rho_EtaMax if recoJetInfo.doCS else -1., useExplicitGhosts=recoJetInfo.doCS or recoJetInfo.jetPUMethod == "sk", )) currentTasks.append(jetCollection) else: jetCollection = inputCollection # # PATify # if recoJetInfo.jetPUMethod == "puppi": jetCorrLabel = "Puppi" elif recoJetInfo.jetPUMethod in ["cs", "sk"]: jetCorrLabel = "chs" else: jetCorrLabel = recoJetInfo.jetPUMethod # # Jet correction # jetCorrections = ( "{}{}{}{}".format( recoJetInfo.jetAlgo.upper(), recoJetInfo.jetSize, "Calo" if recoJetInfo.doCalo else recoJetInfo.jetReco.upper(), jetCorrLabel), JETCorrLevels, "None", ) addJetCollection( proc, labelName=tagName, jetSource=cms.InputTag(jetCollection), algo=recoJetInfo.jetAlgo, rParam=recoJetInfo.jetSizeNr, pvSource=cms.InputTag(self.pvLabel), pfCandidates=cms.InputTag(self.pfLabel), svSource=cms.InputTag(self.svLabel), muSource=cms.InputTag(self.muLabel), elSource=cms.InputTag(self.elLabel), btagDiscriminators=bTagDiscriminators if not recoJetInfo.doCalo else ["None"], jetCorrections=jetCorrections, genJetCollection=cms.InputTag(genJetsCollection), genParticles=cms.InputTag(self.gpLabel), ) getJetMCFlavour = not recoJetInfo.doCalo and recoJetInfo.jetPUMethod != "cs" if not self.runOnMC: #Remove modules for Gen-level object matching delattr(proc, 'patJetGenJetMatch{}'.format(tagName)) delattr(proc, 'patJetPartonMatch{}'.format(tagName)) getJetMCFlavour = False setattr(getattr(proc, "patJets{}".format(tagName)), "getJetMCFlavour", cms.bool(getJetMCFlavour)) setattr(getattr(proc, "patJetCorrFactors{}".format(tagName)), "payload", cms.string(recoJetInfo.jetCorrPayload)) selJet = "selectedPatJets{}".format(tagName) else: selJet = inputCollection if not recoJetInfo.skipUserData: # # # jercVar = "jercVars{}".format(tagName) if jercVar in self.main: raise ValueError("Step '%s' already implemented" % jercVar) setattr(proc, jercVar, proc.jercVars.clone(srcJet=selJet)) currentTasks.append(jercVar) # # JetID Loose # looseJetId = "looseJetId{}".format(tagName) if looseJetId in self.main: raise ValueError("Step '%s' already implemented" % looseJetId) setattr( proc, looseJetId, proc.looseJetId.clone( src=selJet, filterParams=proc.looseJetId.filterParams.clone( version="WINTER16"), )) currentTasks.append(looseJetId) # # JetID Tight # tightJetId = "tightJetId{}".format(tagName) if tightJetId in self.main: raise ValueError("Step '%s' already implemented" % tightJetId) setattr( proc, tightJetId, proc.tightJetId.clone( src=selJet, filterParams=proc.tightJetId.filterParams.clone( version="SUMMER18{}".format( "PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")), )) tightJetIdObj = getattr(proc, tightJetId) run2_jme_2016.toModify(tightJetIdObj.filterParams, version="WINTER16") run2_jme_2017.toModify( tightJetIdObj.filterParams, version='WINTER17{}'.format( "PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")) currentTasks.append(tightJetId) # # JetID TightLepVeto # tightJetIdLepVeto = "tightJetIdLepVeto{}".format(tagName) if tightJetIdLepVeto in self.main: raise ValueError("Step '%s' already implemented" % tightJetIdLepVeto) setattr( proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone( src=selJet, filterParams=proc.tightJetIdLepVeto.filterParams.clone( version="SUMMER18{}".format( "PUPPI" if recoJetInfo.jetPUMethod == "puppi" else "")), )) tightJetIdLepVetoObj = getattr(proc, tightJetIdLepVeto) run2_jme_2016.toModify(tightJetIdLepVetoObj.filterParams, version="WINTER16") run2_jme_2017.toModify( tightJetIdLepVetoObj.filterParams, version='WINTER17{}'.format( "PUPPI" if recoJetInfo.jetPUMethod == "puppi" else ""), ) currentTasks.append(tightJetIdLepVeto) # # # selectedPatJetsWithUserData = "{}WithUserData".format(selJet) if selectedPatJetsWithUserData in self.main: raise ValueError("Step '%s' already implemented" % selectedPatJetsWithUserData) setattr( proc, selectedPatJetsWithUserData, cms.EDProducer( "PATJetUserDataEmbedder", src=cms.InputTag(selJet), userFloats=cms.PSet( jercCHPUF=cms.InputTag( "{}:chargedHadronPUEnergyFraction".format( jercVar)), jercCHF=cms.InputTag( "{}:chargedHadronCHSEnergyFraction".format( jercVar)), ), userInts=cms.PSet( tightId=cms.InputTag(tightJetId), tightIdLepVeto=cms.InputTag(tightJetIdLepVeto), ), )) selectedPatJetsWithUserDataObj = getattr( proc, selectedPatJetsWithUserData) run2_jme_2016.toModify( selectedPatJetsWithUserDataObj.userInts, looseId=cms.InputTag(looseJetId), ) currentTasks.append(selectedPatJetsWithUserData) else: selectedPatJetsWithUserData = "selectedPatJets{}".format(tagName) # # Not sure why we can't re-use patJetCorrFactors* created by addJetCollection() # (even cloning doesn't work) Let's just create our own # jetCorrFactors = "jetCorrFactors{}".format(tagName) if jetCorrFactors in self.main: raise ValueError("Step '%s' already implemented" % jetCorrFactors) setattr( proc, jetCorrFactors, patJetCorrFactors.clone( src=selectedPatJetsWithUserData, levels=JETCorrLevels, primaryVertices=self.pvLabel, payload=recoJetInfo.jetCorrPayload, rho="fixedGridRhoFastjetAll{}".format( "Calo" if recoJetInfo.doCalo else ""), )) currentTasks.append(jetCorrFactors) updatedJets = "updatedJets{}".format(tagName) if updatedJets in self.main: raise ValueError("Step '%s' already implemented" % updatedJets) setattr( proc, updatedJets, updatedPatJets.clone( addBTagInfo=False, jetSource=selectedPatJetsWithUserData, jetCorrFactorsSource=[jetCorrFactors], )) currentTasks.append(updatedJets) self.main.extend(currentTasks) return recoJetInfo
filterParams=cms.PSet( version = cms.string('SUMMER18'), quality = cms.string('TIGHT'), ), src = cms.InputTag("updatedJets") ) tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version = cms.string('SUMMER18'), quality = cms.string('TIGHTLEPVETO'), ), src = cms.InputTag("updatedJets") ) run2_jme_2016.toModify( tightJetId.filterParams, version = "WINTER16" ) run2_jme_2016.toModify( tightJetIdLepVeto.filterParams, version = "WINTER16" ) run2_jme_2017.toModify( tightJetId.filterParams, version = "WINTER17" ) run2_jme_2017.toModify( tightJetIdLepVeto.filterParams, version = "WINTER17" ) looseJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version = cms.string('WINTER16'), quality = cms.string('LOOSE'), ), src = cms.InputTag("updatedJetsAK8") ) tightJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( version = cms.string('SUMMER18PUPPI'), quality = cms.string('TIGHT'), ),