Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-08 23:09:52

0001 import FWCore.ParameterSet.Config as cms
0002 
0003 from PhysicsTools.NanoAOD.nano_eras_cff import *
0004 from PhysicsTools.NanoAOD.common_cff import *
0005 from PhysicsTools.NanoAOD.simplePATJetFlatTableProducer_cfi import simplePATJetFlatTableProducer
0006 
0007 from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import *
0008 # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
0009 #      (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above )
0010 jetCorrFactorsAK8 = patJetCorrFactors.clone(src='slimmedJetsAK8',
0011     levels = cms.vstring('L1FastJet',
0012         'L2Relative',
0013         'L3Absolute',
0014         'L2L3Residual'),
0015     payload = cms.string('AK8PFPuppi'),
0016     primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
0017 )
0018 
0019 from  PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cfi import *
0020 updatedJetsAK8 = updatedPatJets.clone(
0021     addBTagInfo=False,
0022     jetSource='slimmedJetsAK8',
0023     jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsAK8") ),
0024 )
0025 
0026 updatedJetsAK8WithUserData = cms.EDProducer("PATJetUserDataEmbedder",
0027     src = cms.InputTag("updatedJetsAK8"),
0028     userFloats = cms.PSet(),
0029     userInts = cms.PSet(),
0030 )
0031 
0032 finalJetsAK8 = cms.EDFilter("PATJetRefSelector",
0033     src = cms.InputTag("updatedJetsAK8WithUserData"),
0034     cut = cms.string("pt > 170")
0035 )
0036 
0037 
0038 lepInAK8JetVars = cms.EDProducer("LepInJetProducer",
0039     src = cms.InputTag("updatedJetsAK8WithUserData"),
0040     srcEle = cms.InputTag("finalElectrons"),
0041     srcMu = cms.InputTag("finalMuons")
0042 )
0043 
0044 fatJetTable = simplePATJetFlatTableProducer.clone(
0045     src = cms.InputTag("finalJetsAK8"),
0046     cut = cms.string(" pt > 170"), #probably already applied in miniaod
0047     name = cms.string("FatJet"),
0048     doc  = cms.string("slimmedJetsAK8, i.e. ak8 fat jets for boosted analysis"),
0049     variables = cms.PSet(P4Vars,
0050         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0051         rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
0052         tau1 = Var("userFloat('NjettinessAK8Puppi:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
0053         tau2 = Var("userFloat('NjettinessAK8Puppi:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
0054         tau3 = Var("userFloat('NjettinessAK8Puppi:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
0055         tau4 = Var("userFloat('NjettinessAK8Puppi:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
0056         n2b1 = Var("?hasUserFloat('nb1AK8PuppiSoftDrop:ecfN2')?userFloat('nb1AK8PuppiSoftDrop:ecfN2'):-99999.", float, doc="N2 with beta=1 (for jets with raw pT>250 GeV)", precision=10),
0057         n3b1 = Var("?hasUserFloat('nb1AK8PuppiSoftDrop:ecfN3')?userFloat('nb1AK8PuppiSoftDrop:ecfN3'):-99999.", float, doc="N3 with beta=1 (for jets with raw pT>250 GeV)", precision=10),
0058         msoftdrop = Var("groomedMass('SoftDropPuppi')",float, doc="Corrected soft drop mass with PUPPI",precision=10),
0059         particleNetWithMass_QCD = Var("bDiscriminator('pfParticleNetJetTags:probQCDbb')+bDiscriminator('pfParticleNetJetTags:probQCDcc')+bDiscriminator('pfParticleNetJetTags:probQCDb')+bDiscriminator('pfParticleNetJetTags:probQCDc')+bDiscriminator('pfParticleNetJetTags:probQCDothers')",float,doc="ParticleNet tagger (w/ mass) QCD(bb,cc,b,c,others) sum",precision=10),
0060         particleNetWithMass_TvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:TvsQCD')",float,doc="ParticleNet tagger (w/ mass) top vs QCD discriminator",precision=10),
0061         particleNetWithMass_WvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:WvsQCD')",float,doc="ParticleNet tagger (w/ mass) W vs QCD discriminator",precision=10),
0062         particleNetWithMass_ZvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:ZvsQCD')",float,doc="ParticleNet tagger (w/ mass) Z vs QCD discriminator",precision=10),
0063         particleNetWithMass_H4qvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:H4qvsQCD')",float,doc="ParticleNet tagger (w/ mass) H(->VV->qqqq) vs QCD discriminator",precision=10),
0064         particleNetWithMass_HbbvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:HbbvsQCD')",float,doc="ParticleNet tagger (w/mass) H(->bb) vs QCD discriminator",precision=10),
0065         particleNetWithMass_HccvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:HccvsQCD')",float,doc="ParticleNet tagger (w/mass) H(->cc) vs QCD discriminator",precision=10),
0066         particleNet_QCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD2hf')+bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD1hf')+bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD0hf')",float,doc="ParticleNet tagger QCD(0+1+2HF) sum",precision=10),
0067         particleNet_QCD2HF = Var("bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD2hf')",float,doc="ParticleNet tagger QCD 2 HF (b/c) score",precision=10),
0068         particleNet_QCD1HF = Var("bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD1hf')",float,doc="ParticleNet tagger QCD 1 HF (b/c) score",precision=10),
0069         particleNet_QCD0HF = Var("bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:probQCD0hf')",float,doc="ParticleNet tagger QCD 0 HF (b/c) score",precision=10),
0070         particleNet_massCorr = Var("bDiscriminator('pfParticleNetFromMiniAODAK8JetTags:masscorr')",float,doc="ParticleNet mass regression, relative correction to JEC-corrected jet mass (no softdrop)",precision=10),
0071         particleNet_XbbVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HbbvsQCD')",float,doc="ParticleNet X->bb vs. QCD score: Xbb/(Xbb+QCD)",precision=10),
0072         particleNet_XccVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HccvsQCD')",float,doc="ParticleNet X->cc vs. QCD score: Xcc/(Xcc+QCD)",precision=10),
0073         particleNet_XqqVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HqqvsQCD')",float,doc="ParticleNet X->qq (uds) vs. QCD score: Xqq/(Xqq+QCD)",precision=10),
0074         particleNet_XggVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HggvsQCD')",float,doc="ParticleNet X->gg vs. QCD score: Xgg/(Xgg+QCD)",precision=10),
0075         particleNet_XttVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HttvsQCD')",float,doc="ParticleNet X->tau_h tau_h vs. QCD score: Xtt/(Xtt+QCD)",precision=10),
0076         particleNet_XtmVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HtmvsQCD')",float,doc="ParticleNet X->mu tau_h vs. QCD score: Xtm/(Xtm+QCD)",precision=10),
0077         particleNet_XteVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:HtevsQCD')",float,doc="ParticleNet X->e tau_h vs. QCD score: Xte/(Xte+QCD)",precision=10),
0078         particleNet_WVsQCD = Var("bDiscriminator('pfParticleNetFromMiniAODAK8DiscriminatorsJetTags:WvsQCD')",float,doc="ParticleNet W->qq vs. QCD score: Xqq+Xcc/(Xqq+Xcc+QCD)",precision=10),
0079         particleNetLegacy_mass = Var("bDiscriminator('pfParticleNetMassRegressionJetTags:mass')",float,doc="ParticleNet Legacy Run-2 mass regression",precision=10),
0080         particleNetLegacy_Xbb = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXbb')",float,doc="Mass-decorrelated ParticleNet Legacy Run-2 tagger raw X->bb score. For X->bb vs QCD tagging, use Xbb/(Xbb+QCD)",precision=10),
0081         particleNetLegacy_Xcc = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXcc')",float,doc="Mass-decorrelated ParticleNet Legacy Run-2 tagger raw X->cc score. For X->cc vs QCD tagging, use Xcc/(Xcc+QCD)",precision=10),
0082         particleNetLegacy_Xqq = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXqq')",float,doc="Mass-decorrelated ParticleNet Legacy Run-2 tagger raw X->qq (uds) score. For X->qq vs QCD tagging, use Xqq/(Xqq+QCD). For W vs QCD tagging, use (Xcc+Xqq)/(Xcc+Xqq+QCD)",precision=10),
0083         particleNetLegacy_QCD = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDbb')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDcc')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDb')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDc')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDothers')",float,doc="Mass-decorrelated ParticleNet Legacy Run-2 tagger raw QCD score",precision=10),
0084         subJetIdx1 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>0?subjets('SoftDropPuppi')[0].key():-1", "int16",
0085             doc="index of first subjet"),
0086         subJetIdx2 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>1?subjets('SoftDropPuppi')[1].key():-1", "int16",
0087             doc="index of second subjet"),
0088         nConstituents = Var("numberOfDaughters()","uint8",doc="Number of particles in the jet"),
0089         chMultiplicity = Var("?isPFJet()?chargedMultiplicity():-1","int16",doc="(Puppi-weighted) Number of charged particles in the jet"),
0090         neMultiplicity = Var("?isPFJet()?neutralMultiplicity():-1","int16",doc="(Puppi-weighted) Number of neutral particles in the jet"),
0091         chHEF = Var("?isPFJet()?chargedHadronEnergyFraction():-1", float, doc="charged Hadron Energy Fraction", precision=10),
0092         neHEF = Var("?isPFJet()?neutralHadronEnergyFraction():-1", float, doc="neutral Hadron Energy Fraction", precision=10),
0093         chEmEF = Var("?isPFJet()?chargedEmEnergyFraction():-1", float, doc="charged Electromagnetic Energy Fraction", precision=10),
0094         neEmEF = Var("?isPFJet()?neutralEmEnergyFraction():-1", float, doc="neutral Electromagnetic Energy Fraction", precision=10),
0095         hfHEF = Var("?isPFJet()?HFHadronEnergyFraction():-1",float,doc="hadronic Energy Fraction in HF",precision=10),
0096         hfEmEF = Var("?isPFJet()?HFEMEnergyFraction():-1",float,doc="electromagnetic Energy Fraction in HF",precision=10),
0097         muEF = Var("?isPFJet()?muonEnergyFraction():-1", float, doc="muon Energy Fraction", precision=10),
0098     ),
0099     externalVariables = cms.PSet(
0100         lsf3 = ExtVar(cms.InputTag("lepInAK8JetVars:lsf3"),float, doc="Lepton Subjet Fraction (3 subjets)",precision=10),
0101         muonIdx3SJ = ExtVar(cms.InputTag("lepInAK8JetVars:muIdx3SJ"),"int16", doc="index of muon matched to jet"),
0102         electronIdx3SJ = ExtVar(cms.InputTag("lepInAK8JetVars:eleIdx3SJ"),"int16",doc="index of electron matched to jet"),
0103     )
0104 )
0105 
0106 run2_nanoAOD_ANY.toModify(
0107     fatJetTable.variables,
0108     btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
0109     # Remove for V9
0110     chMultiplicity = None,
0111     neMultiplicity = None,
0112     chHEF = None,
0113     neHEF = None,
0114     chEmEF = None,
0115     neEmEF = None,
0116     muEF = None
0117 )
0118 
0119 (run2_nanoAOD_106Xv2).toModify(
0120     fatJetTable.variables,
0121     # Restore taggers that were decommisionned for Run-3
0122     btagDeepB = Var("?(bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc="DeepCSV b+bb tag discriminator",precision=10),
0123     btagHbb = Var("bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",float,doc="Higgs to BB tagger discriminator",precision=10),
0124     btagDDBvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleBvLV2JetTags:probHbb')",float,doc="DeepDoubleX V2(mass-decorrelated) discriminator for H(Z)->bb vs QCD",precision=10),
0125     btagDDCvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvLV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs QCD",precision=10),
0126     btagDDCvBV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvBV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",precision=10),
0127     deepTag_TvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="DeepBoostedJet tagger top vs QCD discriminator",precision=10),
0128     deepTag_WvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="DeepBoostedJet tagger W vs QCD discriminator",precision=10),
0129     deepTag_ZvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
0130     deepTag_H = Var("bDiscriminator('pfDeepBoostedJetTags:probHbb')+bDiscriminator('pfDeepBoostedJetTags:probHcc')+bDiscriminator('pfDeepBoostedJetTags:probHqqqq')",float,doc="DeepBoostedJet tagger H(bb,cc,4q) sum",precision=10),
0131     deepTag_QCD = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDbb')+bDiscriminator('pfDeepBoostedJetTags:probQCDcc')+bDiscriminator('pfDeepBoostedJetTags:probQCDb')+bDiscriminator('pfDeepBoostedJetTags:probQCDc')+bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCD(bb,cc,b,c,others) sum",precision=10),
0132     deepTag_QCDothers = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCDothers value",precision=10),
0133     deepTagMD_TvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger top vs QCD discriminator",precision=10),
0134     deepTagMD_WvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger W vs QCD discriminator",precision=10),
0135     deepTagMD_ZvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
0136     deepTagMD_ZHbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->bb vs QCD discriminator",precision=10),
0137     deepTagMD_ZbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z->bb vs QCD discriminator",precision=10),
0138     deepTagMD_HbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:HbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->bb vs QCD discriminator",precision=10),
0139     deepTagMD_ZHccvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->cc vs QCD discriminator",precision=10),
0140     deepTagMD_H4qvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:H4qvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->4q vs QCD discriminator",precision=10),
0141     deepTagMD_bbvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->bb vs light flavour discriminator",precision=10),
0142     deepTagMD_ccvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->cc vs light flavour discriminator",precision=10),
0143 )
0144 
0145 ##############################################################
0146 ## DeepInfoAK8:Start
0147 ## - To be used in nanoAOD_customizeCommon() in nano_cff.py
0148 ###############################################################
0149 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
0150 def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNetMassLegacy, addParticleNet, jecPayload):
0151     _btagDiscriminators=[]
0152     if addDeepBTag:
0153         print("Updating process to run DeepCSV btag to AK8 jets")
0154         _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb']
0155     if addDeepBoostedJet:
0156         print("Updating process to run DeepBoostedJet on datasets before 103X")
0157         from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll as pfDeepBoostedJetTagsAll
0158         _btagDiscriminators += pfDeepBoostedJetTagsAll
0159     if addParticleNet:
0160         print("Updating process to run ParticleNet joint classification and mass regression")
0161         from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK8_cff import _pfParticleNetFromMiniAODAK8JetTagsAll as pfParticleNetFromMiniAODAK8JetTagsAll
0162         _btagDiscriminators += pfParticleNetFromMiniAODAK8JetTagsAll
0163     if addParticleNetMassLegacy:
0164         from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetMassRegressionOutputs
0165         _btagDiscriminators += _pfParticleNetMassRegressionOutputs
0166     if addDeepDoubleX:
0167         print("Updating process to run DeepDoubleX on datasets before 104X")
0168         _btagDiscriminators += ['pfDeepDoubleBvLJetTags:probHbb', \
0169             'pfDeepDoubleCvLJetTags:probHcc', \
0170             'pfDeepDoubleCvBJetTags:probHcc', \
0171             'pfMassIndependentDeepDoubleBvLJetTags:probHbb', 'pfMassIndependentDeepDoubleCvLJetTags:probHcc', 'pfMassIndependentDeepDoubleCvBJetTags:probHcc']
0172     if addDeepDoubleXV2:
0173         print("Updating process to run DeepDoubleXv2 on datasets before 11X")
0174         _btagDiscriminators += [
0175             'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
0176             'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
0177             'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc'
0178             ]
0179     if len(_btagDiscriminators)==0: return process
0180     print("Will recalculate the following discriminators on AK8 jets: "+", ".join(_btagDiscriminators))
0181     updateJetCollection(
0182        process,
0183        jetSource = cms.InputTag('slimmedJetsAK8'),
0184        pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
0185        svSource = cms.InputTag('slimmedSecondaryVertices'),
0186        rParam = 0.8,
0187        jetCorrections = (jecPayload.value(), cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
0188        btagDiscriminators = _btagDiscriminators,
0189        postfix='AK8WithDeepInfo',
0190        printWarning = False
0191     )
0192     process.jetCorrFactorsAK8.src="selectedUpdatedPatJetsAK8WithDeepInfo"
0193     process.updatedJetsAK8.jetSource="selectedUpdatedPatJetsAK8WithDeepInfo"
0194     return process
0195 
0196 nanoAOD_addDeepInfoAK8_switch = cms.PSet(
0197     nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
0198     nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(False),
0199     nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(False),
0200     nanoAOD_addDeepDoubleXV2_switch = cms.untracked.bool(False),
0201     nanoAOD_addParticleNetMassLegacy_switch = cms.untracked.bool(False),
0202     nanoAOD_addParticleNet_switch = cms.untracked.bool(False),
0203     jecPayload = cms.untracked.string('AK8PFPuppi')
0204 )
0205 
0206 
0207 # ParticleNet legacy jet tagger is already in 106Xv2 MINIAOD,
0208 # add ParticleNet legacy mass regression and new combined tagger + mass regression
0209 run2_nanoAOD_106Xv2.toModify(
0210     nanoAOD_addDeepInfoAK8_switch,
0211     nanoAOD_addParticleNetMassLegacy_switch = True,
0212     nanoAOD_addParticleNet_switch = True,
0213 )
0214 
0215 ################################################
0216 ## DeepInfoAK8:End
0217 #################################################
0218 
0219 subJetTable = simplePATJetFlatTableProducer.clone(
0220     src = cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked","SubJets"),
0221     name = cms.string("SubJet"),
0222     doc  = cms.string("slimmedJetsAK8PFPuppiSoftDropPacked::SubJets, i.e. soft-drop subjets for ak8 fat jets for boosted analysis"),
0223     variables = cms.PSet(P4Vars,
0224         btagDeepFlavB = Var("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')",float,doc="DeepJet b+bb+lepb tag discriminator",precision=10),
0225         btagUParTAK4B = Var("?bDiscriminator('pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfUnifiedParticleTransformerAK4DiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc="UnifiedParT b vs. udscg"),
0226         rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
0227         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0228         tau1 = Var("userFloat('NjettinessAK8Subjets:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
0229         tau2 = Var("userFloat('NjettinessAK8Subjets:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
0230         tau3 = Var("userFloat('NjettinessAK8Subjets:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
0231         tau4 = Var("userFloat('NjettinessAK8Subjets:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
0232         n2b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN2')", float, doc="N2 with beta=1", precision=10),
0233         n3b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN3')", float, doc="N3 with beta=1", precision=10),
0234     )
0235 )
0236 
0237 run2_nanoAOD_ANY.toModify(
0238     subJetTable.variables,
0239     btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10)
0240 )
0241 
0242 (run2_nanoAOD_106Xv2).toModify(
0243     subJetTable.variables,
0244     area = None,
0245 )
0246 
0247 run3_nanoAOD_pre142X.toModify(
0248     subJetTable.variables,
0249     btagDeepFlavB = None,
0250     btagUParTAK4B = None,
0251     btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
0252 )
0253 
0254 
0255 #jets are not as precise as muons
0256 fatJetTable.variables.pt.precision=10
0257 subJetTable.variables.pt.precision=10
0258 
0259 ##############################################################
0260 # AK8 constituents
0261 ###############################################################
0262 finalJetsAK8PFConstituents = cms.EDProducer("PatJetConstituentPtrSelector",
0263     src = fatJetTable.src,
0264     cut = cms.string("abs(eta) <= 2.5")
0265 )
0266 
0267 finalJetsPFConstituents = cms.EDProducer("PackedCandidatePtrMerger",
0268     src = cms.VInputTag(cms.InputTag("finalJetsAK8PFConstituents", "constituents")),
0269     skipNulls = cms.bool(True),
0270     warnOnSkip = cms.bool(True)
0271 )
0272 
0273 pfCandidatesTable = cms.EDProducer("SimplePATCandidateFlatTableProducer",
0274     src = cms.InputTag("finalJetsPFConstituents"),
0275     cut = cms.string(""),
0276     name = cms.string("PFCand"),
0277     doc = cms.string("PF candidate constituents of AK8 puppi jets (FatJet) with |eta| <= 2.5."),
0278     singleton = cms.bool(False),
0279     extension = cms.bool(False),
0280     variables = cms.PSet(
0281         pt = Var("pt * puppiWeight()", float, doc="Puppi-weighted pt", precision=10),
0282         mass = Var("mass * puppiWeight()", float, doc="Puppi-weighted mass", precision=10),
0283         eta = Var("eta", float, precision=12),
0284         phi = Var("phi", float, precision=12),
0285         pdgId  = Var("pdgId", int, doc="PF candidate type (+/-211 = ChgHad, 130 = NeuHad, 22 = Photon, +/-11 = Electron, +/-13 = Muon, 1 = HFHad, 2 = HFEM)")
0286     )
0287 )
0288 
0289 finalJetsAK8ConstituentsTable = cms.EDProducer("SimplePatJetConstituentTableProducer",
0290     name = cms.string(fatJetTable.name.value()+"PFCand"),
0291     candIdxName = cms.string("PFCandIdx"),
0292     candIdxDoc = cms.string("Index in the PFCand table"),
0293     jets = fatJetTable.src,
0294     candidates = pfCandidatesTable.src,
0295     jetCut = fatJetTable.cut
0296 )
0297 
0298 jetAK8UserDataTask = cms.Task()
0299 jetAK8Task = cms.Task(jetCorrFactorsAK8,updatedJetsAK8,jetAK8UserDataTask,updatedJetsAK8WithUserData,finalJetsAK8,finalJetsAK8PFConstituents,finalJetsPFConstituents)
0300 
0301 #after lepton collections have been run
0302 jetAK8LepTask = cms.Task(lepInAK8JetVars)
0303 
0304 jetAK8TablesTask = cms.Task(fatJetTable,subJetTable,pfCandidatesTable,finalJetsAK8ConstituentsTable)
0305