Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:58:06

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.simpleCandidateFlatTableProducer_cfi import simpleCandidateFlatTableProducer
0006 
0007 ##################### User floats producers, selectors ##########################
0008 
0009 from  PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import *
0010 # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
0011 #      (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above )
0012 jetCorrFactorsNano = patJetCorrFactors.clone(src='slimmedJets',
0013     levels = cms.vstring('L1FastJet',
0014         'L2Relative',
0015         'L3Absolute',
0016         'L2L3Residual'),
0017     primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
0018 )
0019 
0020 from  PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cfi import *
0021 updatedJets = updatedPatJets.clone(
0022     addBTagInfo=False,
0023     jetSource='slimmedJets',
0024     jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsNano") ),
0025 )
0026 
0027 #
0028 # JetID
0029 #
0030 looseJetId = cms.EDProducer("PatJetIDValueMapProducer",
0031     filterParams=cms.PSet(
0032         version = cms.string('WINTER16'),
0033         quality = cms.string('LOOSE'),
0034     ),
0035     src = cms.InputTag("updatedJets")
0036 )
0037 tightJetId = cms.EDProducer("PatJetIDValueMapProducer",
0038     filterParams=cms.PSet(
0039         version = cms.string('RUN3WINTER22CHS'),
0040         quality = cms.string('TIGHT'),
0041     ),
0042     src = cms.InputTag("updatedJets")
0043 )
0044 tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer",
0045     filterParams=cms.PSet(
0046         version = cms.string('RUN3WINTER22CHS'),
0047         quality = cms.string('TIGHTLEPVETO'),
0048     ),
0049     src = cms.InputTag("updatedJets")
0050 )
0051 run2_jme_2016.toModify(
0052     tightJetId.filterParams, version = "RUN2UL16CHS"
0053 ).toModify(
0054     tightJetIdLepVeto.filterParams, version = "RUN2UL16CHS"
0055 )
0056 
0057 (run2_jme_2017 | run2_jme_2018).toModify(
0058     tightJetId.filterParams, version = "RUN2ULCHS"
0059 ).toModify(
0060     tightJetIdLepVeto.filterParams, version = "RUN2ULCHS"
0061 )
0062 
0063 run3_jme_Winter22runsBCDEprompt.toModify(
0064     tightJetId.filterParams, version = "RUN3WINTER22CHSrunsBCDEprompt"
0065 ).toModify(
0066     tightJetIdLepVeto.filterParams, version = "RUN3WINTER22CHSrunsBCDEprompt"
0067 )
0068 
0069 bJetVars = cms.EDProducer("JetRegressionVarProducer",
0070     pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
0071     src = cms.InputTag("updatedJets"),
0072     svsrc = cms.InputTag("slimmedSecondaryVertices"),
0073 )
0074 
0075 jercVars = cms.EDProducer("BetaStarPackedCandidateVarProducer",
0076     srcJet = cms.InputTag("updatedJets"),
0077     srcPF = cms.InputTag("packedPFCandidates"),
0078     maxDR = cms.double(0.4)
0079 )
0080 
0081 updatedJetsWithUserData = cms.EDProducer("PATJetUserDataEmbedder",
0082     src = cms.InputTag("updatedJets"),
0083     userFloats = cms.PSet(
0084         leadTrackPt = cms.InputTag("bJetVars:leadTrackPt"),
0085         leptonPtRelv0 = cms.InputTag("bJetVars:leptonPtRelv0"),
0086         leptonPtRelInvv0 = cms.InputTag("bJetVars:leptonPtRelInvv0"),
0087         leptonDeltaR = cms.InputTag("bJetVars:leptonDeltaR"),
0088         vtxPt = cms.InputTag("bJetVars:vtxPt"),
0089         vtxMass = cms.InputTag("bJetVars:vtxMass"),
0090         vtx3dL = cms.InputTag("bJetVars:vtx3dL"),
0091         vtx3deL = cms.InputTag("bJetVars:vtx3deL"),
0092         ptD = cms.InputTag("bJetVars:ptD"),
0093         qgl = cms.InputTag('qgtagger:qgLikelihood'),
0094         puIdNanoDisc = cms.InputTag('pileupJetIdNano:fullDiscriminant'),
0095         chFPV0EF = cms.InputTag("jercVars:chargedFromPV0EnergyFraction"),
0096     ),
0097     userInts = cms.PSet(
0098         tightId = cms.InputTag("tightJetId"),
0099         tightIdLepVeto = cms.InputTag("tightJetIdLepVeto"),
0100         vtxNtrk = cms.InputTag("bJetVars:vtxNtrk"),
0101         leptonPdgId = cms.InputTag("bJetVars:leptonPdgId"),
0102         puIdNanoId = cms.InputTag('pileupJetIdNano:fullId'),
0103     ),
0104 )
0105 
0106 
0107 finalJets = cms.EDFilter("PATJetRefSelector",
0108     src = cms.InputTag("updatedJetsWithUserData"),
0109     cut = cms.string("pt > 15")
0110 )
0111 
0112 
0113 ##################### Tables for final output and docs ##########################
0114 
0115 
0116 jetTable = simpleCandidateFlatTableProducer.clone(
0117     src = cms.InputTag("linkedObjects","jets"),
0118     name = cms.string("Jet"),
0119     doc  = cms.string("slimmedJets, i.e. ak4 PFJets CHS with JECs applied, after basic selection (" + finalJets.cut.value()+")"),
0120     externalVariables = cms.PSet(
0121         bRegCorr = ExtVar(cms.InputTag("bjetNN:corr"),float, doc="pt correction for b-jet energy regression",precision=10),
0122         bRegRes = ExtVar(cms.InputTag("bjetNN:res"),float, doc="res on pt corrected with b-jet regression",precision=6),
0123         cRegCorr = ExtVar(cms.InputTag("cjetNN:corr"),float, doc="pt correction for c-jet energy regression",precision=10),
0124         cRegRes = ExtVar(cms.InputTag("cjetNN:res"),float, doc="res on pt corrected with c-jet regression",precision=6),
0125     ),
0126     variables = cms.PSet(P4Vars,
0127         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0128         nMuons = Var("?hasOverlaps('muons')?overlaps('muons').size():0", "uint8", doc="number of muons in the jet"),
0129         muonIdx1 = Var("?overlaps('muons').size()>0?overlaps('muons')[0].key():-1", "int16", doc="index of first matching muon"),
0130         muonIdx2 = Var("?overlaps('muons').size()>1?overlaps('muons')[1].key():-1", "int16", doc="index of second matching muon"),
0131         electronIdx1 = Var("?overlaps('electrons').size()>0?overlaps('electrons')[0].key():-1", "int16", doc="index of first matching electron"),
0132         electronIdx2 = Var("?overlaps('electrons').size()>1?overlaps('electrons')[1].key():-1", "int16", doc="index of second matching electron"),
0133         nElectrons = Var("?hasOverlaps('electrons')?overlaps('electrons').size():0", "uint8", doc="number of electrons in the jet"),
0134         svIdx1 = Var("?overlaps('vertices').size()>0?overlaps('vertices')[0].key():-1", "int16", doc="index of first matching secondary vertex"),
0135         svIdx2 = Var("?overlaps('vertices').size()>1?overlaps('vertices')[1].key():-1", "int16", doc="index of second matching secondary vertex"),
0136         nSVs = Var("?hasOverlaps('vertices')?overlaps('vertices').size():0", "uint8", doc="number of secondary vertices in the jet"),
0137         btagDeepFlavB = Var("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')",float,doc="DeepJet b+bb+lepb tag discriminator",precision=10),
0138         btagRobustParTAK4B = Var("bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb')",
0139                                  float,
0140                                  doc="RobustParTAK4 b+bb+lepb tag discriminator",
0141                                  precision=10),
0142         btagDeepFlavCvL = Var("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1",float,doc="DeepJet c vs uds+g discriminator",precision=10),
0143         btagDeepFlavCvB = Var("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1",float,doc="DeepJet c vs b+bb+lepb discriminator",precision=10),
0144         btagDeepFlavQG = Var("?(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1",float,doc="DeepJet g vs uds discriminator",precision=10),
0145         btagRobustParTAK4CvL = Var("?(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')+bDiscriminator('pfParticleTransformerAK4JetTags:probg'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probc')/(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')+bDiscriminator('pfParticleTransformerAK4JetTags:probg')):-1",
0146                                    float,
0147                                    doc="RobustParTAK4 c vs uds+g discriminator",
0148                                    precision=10),
0149         btagRobustParTAK4CvB = Var("?(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probc')/(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb')):-1",
0150                                    float,
0151                                    doc="RobustParTAK4 c vs b+bb+lepb discriminator",
0152                                    precision=10),
0153         btagRobustParTAK4QG = Var("?(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probg')/(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')):-1",
0154                                   float,
0155                                   doc="RobustParTAK4 g vs uds discriminator",
0156                                   precision=10),
0157         btagPNetB = Var("?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc="ParticleNet b vs. udscg"),
0158         btagPNetCvL = Var("?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL'):-1",float,precision=10,doc="ParticleNet c vs. udsg"),
0159         btagPNetCvB = Var("?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB'):-1",float,precision=10,doc="ParticleNet c vs. b"),
0160         btagPNetQvG = Var("?abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:QvsG'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardDiscriminatorsJetTags:QvsG')",float,precision=10,doc="ParticleNet q (udsbc) vs. g"),
0161         btagPNetTauVJet = Var("?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet'):-1",float,precision=10,doc="ParticleNet tau vs. jet"),
0162         PNetRegPtRawCorr = Var("?abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptcorr'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptcorr')",float,precision=10,doc="ParticleNet universal flavor-aware visible pT regression (no neutrinos), correction relative to raw jet pT"),
0163         PNetRegPtRawCorrNeutrino = Var("?abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptnu'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptnu')",float,precision=10,doc="ParticleNet universal flavor-aware pT regression neutrino correction, relative to visible. To apply full regression, multiply raw jet pT by both PNetRegPtRawCorr and PNetRegPtRawCorrNeutrino."),
0164         PNetRegPtRawRes = Var("?abs(eta())<2.5?0.5*(bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptreshigh')-bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptreslow')):0.5*(bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptreshigh')-bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptreslow'))",float,precision=10,doc="ParticleNet universal flavor-aware jet pT resolution estimator, (q84 - q16)/2"),
0165         puIdDisc = Var("userFloat('puIdNanoDisc')", float,doc="Pileup ID discriminant with 106X (2018) training",precision=10),
0166         puId = Var("userInt('puIdNanoId')", "uint8", doc="Pileup ID flags with 106X (2018) training"),
0167         jetId = Var("userInt('tightId')*2+4*userInt('tightIdLepVeto')", "uint8", doc="Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto"),
0168         qgl = Var("?userFloat('qgl')>0?userFloat('qgl'):-1",float,doc="Quark vs Gluon likelihood discriminator",precision=10),
0169         hfsigmaEtaEta = Var("userFloat('hfJetShowerShape:sigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10),
0170         hfsigmaPhiPhi = Var("userFloat('hfJetShowerShape:sigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10),
0171         hfcentralEtaStripSize = Var("userInt('hfJetShowerShape:centralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable) "),
0172         hfadjacentEtaStripsSize = Var("userInt('hfJetShowerShape:adjacentEtaStripsSize')", int, doc="eta size of the strips next to the central tower strip in HF (noise discriminating variable) "),
0173         nConstituents = Var("numberOfDaughters()","uint8",doc="Number of particles in the jet"),
0174         chMultiplicity = Var("chargedMultiplicity()","uint8",doc="Number of charged particles in the jet"),
0175         neMultiplicity = Var("neutralMultiplicity()","uint8",doc="Number of neutral particles in the jet"),
0176         rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
0177         chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6),
0178         neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6),
0179         chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6),
0180         neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6),
0181         hfHEF = Var("HFHadronEnergyFraction()",float,doc="hadronic Energy Fraction in HF",precision= 6),
0182         hfEmEF = Var("HFEMEnergyFraction()",float,doc="electromagnetic Energy Fraction in HF",precision= 6),
0183         muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6),
0184         chFPV0EF = Var("userFloat('chFPV0EF')", float, doc="charged fromPV==0 Energy Fraction (energy excluded from CHS jets). Previously called betastar.", precision= 6),
0185     )
0186 )
0187 
0188 #jets are not as precise as muons
0189 jetTable.variables.pt.precision=10
0190 
0191 ### Era dependent customization
0192 (run2_jme_2016 & ~tracker_apv_vfp30_2016 ).toModify(
0193     jetTable.variables.puIdDisc, doc="Pileup ID discriminant with 106X (2016) training"
0194 ).toModify(
0195     jetTable.variables.puId, doc="Pileup ID flags with 106X (2016) training"
0196 )
0197 (run2_jme_2016 & tracker_apv_vfp30_2016 ).toModify(
0198     jetTable.variables.puIdDisc, doc="Pileup ID discriminant with 106X (2016APV) training"
0199 ).toModify(
0200     jetTable.variables.puId,  doc="Pileup ID flags with 106X (2016APV) training"
0201 )
0202 run2_jme_2017.toModify(
0203     jetTable.variables.puIdDisc, doc="Pileup ID discriminant with 106X (2017) training"
0204 ).toModify(
0205     jetTable.variables.puId, doc="Pileup ID flags with 106X (2017) training"
0206 )
0207 
0208 run2_nanoAOD_ANY.toModify(
0209     jetTable.variables,
0210     btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
0211     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),
0212     btagDeepCvL = Var("?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc="DeepCSV c vs udsg discriminator",precision=10),
0213     btagDeepCvB = Var("?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc="DeepCSV c vs b+bb discriminator",precision=10),
0214     # Remove for V9
0215     chMultiplicity = None,
0216     neMultiplicity = None,
0217     hfHEF = None,
0218     hfEmEF = None
0219 )
0220 
0221 (run3_nanoAOD_122 | run3_nanoAOD_124).toModify(
0222     jetTable.variables,
0223     # New ParticleNet trainings are not available in MiniAOD until Run3 13X
0224     btagPNetB = None,
0225     btagPNetCvL = None,
0226     btagPNetCvB = None,
0227     btagPNetQvG = None,
0228     btagPNetTauVJet = None,
0229     PNetRegPtRawCorr = None,
0230     PNetRegPtRawCorrNeutrino = None,
0231     PNetRegPtRawRes = None,
0232     # Remove for V11 and earlier Run3 versions
0233     chMultiplicity = None,
0234     neMultiplicity = None,
0235     hfHEF = None,
0236     hfEmEF = None
0237 )
0238 
0239 bjetNN = cms.EDProducer("BJetEnergyRegressionMVA",
0240     backend = cms.string("ONNX"),
0241     batch_eval = cms.bool(True),
0242     src = cms.InputTag("linkedObjects","jets"),
0243     pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
0244     svsrc = cms.InputTag("slimmedSecondaryVertices"),
0245     rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
0246 
0247     weightFile =  cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2018.onnx"),
0248     name = cms.string("JetRegNN"),
0249     isClassifier = cms.bool(False),
0250     variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR","Jet_neHEF",
0251                                   "Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL",
0252                                   "Jet_numDaughters_pt03","Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy",
0253                                   "Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy",
0254                                   "Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy",
0255                                   "Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy",
0256                                   "Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy",
0257                                   "Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy",
0258                                   "Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy",
0259                                   "Jet_chHEF","Jet_chEmEF","Jet_leptonPtRelInv","isEle","isMu","isOther","Jet_mass","Jet_ptd"]),
0260     variables = cms.PSet(
0261     Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
0262     Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
0263     Jet_eta = cms.string("eta"),
0264     Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
0265     Jet_ptd = cms.string("userFloat('ptD')"),
0266     Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
0267     Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
0268     Jet_vtxMass = cms.string("userFloat('vtxMass')"),
0269     Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
0270     Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
0271     Jet_vtxPt = cms.string("userFloat('vtxPt')"),
0272     Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
0273     Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
0274     Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
0275     Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
0276     Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
0277     Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
0278     Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
0279     isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
0280     isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
0281     isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
0282     ),
0283      inputTensorName = cms.string("ffwd_inp:0"),
0284      outputTensorName = cms.string("ffwd_out/BiasAdd:0"),
0285      outputNames = cms.vstring(["corr","res"]),
0286      outputFormulas = cms.vstring(["at(0)*0.27912887930870056+1.0545977354049683","0.5*(at(2)-at(1))*0.27912887930870056"]),
0287 )
0288 
0289 cjetNN = cms.EDProducer("BJetEnergyRegressionMVA",
0290     backend = cms.string("ONNX"),
0291     batch_eval = cms.bool(True),
0292 
0293     src = cms.InputTag("linkedObjects","jets"),
0294     pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
0295     svsrc = cms.InputTag("slimmedSecondaryVertices"),
0296     rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
0297 
0298     weightFile =  cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2018.onnx"),
0299     name = cms.string("JetRegNN"),
0300     isClassifier = cms.bool(False),
0301     variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR",
0302                                   "Jet_neHEF","Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL",
0303                                   "Jet_numDaughters_pt03","Jet_chEmEF","Jet_chHEF", "Jet_ptd","Jet_mass",
0304                                   "Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy",
0305                                   "Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy",
0306                                   "Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy",
0307                                   "Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy",
0308                                   "Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy",
0309                                   "Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy",
0310                                   "Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy"]),
0311     variables = cms.PSet(
0312     Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
0313     Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
0314     Jet_eta = cms.string("eta"),
0315     Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
0316     Jet_ptd = cms.string("userFloat('ptD')"),
0317     Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
0318     Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
0319     Jet_vtxMass = cms.string("userFloat('vtxMass')"),
0320     Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
0321     Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
0322     Jet_vtxPt = cms.string("userFloat('vtxPt')"),
0323     Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
0324     Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
0325     Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
0326     Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
0327     Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
0328     Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
0329     Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
0330     isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
0331     isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
0332     isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
0333     ),
0334     inputTensorName = cms.string("ffwd_inp:0"),
0335     outputTensorName = cms.string("ffwd_out/BiasAdd:0"),
0336     outputNames = cms.vstring(["corr","res"]),
0337     outputFormulas = cms.vstring(["at(0)*0.24325256049633026+0.993854820728302","0.5*(at(2)-at(1))*0.24325256049633026"]),
0338 )
0339 
0340 
0341 run2_jme_2016.toModify(
0342     bjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2016.onnx")
0343 ).toModify(
0344     bjetNN,outputFormulas = cms.vstring(["at(0)*0.31976690888404846+1.047176718711853","0.5*(at(2)-at(1))*0.31976690888404846"])
0345 ).toModify(
0346     cjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2016.onnx")
0347 ).toModify(
0348     cjetNN, outputFormulas = cms.vstring(["at(0)*0.28862622380256653+0.9908722639083862","0.5*(at(2)-at(1))*0.28862622380256653"])
0349 )
0350 
0351 run2_jme_2017.toModify(
0352     bjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2017.onnx")
0353 ).toModify(
0354     bjetNN,outputFormulas = cms.vstring(["at(0)*0.28225210309028625+1.055067777633667","0.5*(at(2)-at(1))*0.28225210309028625"])
0355 ).toModify(
0356     cjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2017.onnx")
0357 ).toModify(
0358     cjetNN, outputFormulas = cms.vstring(["at(0)*0.24718524515628815+0.9927206635475159","0.5*(at(2)-at(1))*0.24718524515628815"])
0359 )
0360 
0361 
0362 #
0363 # Quark-Gluon Likelihood (QGL)
0364 #
0365 from RecoJets.JetProducers.QGTagger_cfi import  QGTagger
0366 qgtagger=QGTagger.clone(srcJets="updatedJets",srcVertexCollection="offlineSlimmedPrimaryVertices")
0367 
0368 #
0369 # PileUp ID
0370 #
0371 from RecoJets.JetProducers.PileupJetID_cfi import pileupJetId, _chsalgos_94x, _chsalgos_102x, _chsalgos_106X_UL16, _chsalgos_106X_UL16APV, _chsalgos_106X_UL17, _chsalgos_106X_UL18
0372 pileupJetIdNano=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_106X_UL18),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices")
0373 run2_jme_2017.toModify(
0374     pileupJetIdNano, algos = _chsalgos_106X_UL17
0375 )
0376 (run2_jme_2016 & ~tracker_apv_vfp30_2016 ).toModify(
0377     pileupJetIdNano, algos = _chsalgos_106X_UL16
0378 )
0379 (run2_jme_2016 & tracker_apv_vfp30_2016 ).toModify(
0380     pileupJetIdNano, algos = _chsalgos_106X_UL16APV
0381 )
0382 
0383 ##############################################################
0384 ## DeepInfoAK4CHS:Start
0385 ## - To be used in nanoAOD_customizeCommon() in nano_cff.py
0386 ###############################################################
0387 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
0388 def nanoAOD_addDeepInfoAK4CHS(process,addDeepBTag,addDeepFlavour,addParticleNet,addRobustParTAK4=False):
0389     _btagDiscriminators=[]
0390     if addDeepBTag:
0391         print("Updating process to run DeepCSV btag")
0392         _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc']
0393     if addDeepFlavour:
0394         print("Updating process to run DeepFlavour btag")
0395         _btagDiscriminators += ['pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb','pfDeepFlavourJetTags:probc']
0396     if addParticleNet:
0397         print("Updating process to run ParticleNetAK4")
0398         from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import _pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll as pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll
0399         from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import _pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll as pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll
0400         _btagDiscriminators += pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll
0401         _btagDiscriminators += pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll
0402     if addRobustParTAK4:
0403         print("Updating process to run RobustParTAK4")
0404         from RecoBTag.ONNXRuntime.pfParticleTransformerAK4_cff import _pfParticleTransformerAK4JetTagsAll as pfParticleTransformerAK4JetTagsAll
0405         _btagDiscriminators += pfParticleTransformerAK4JetTagsAll
0406 
0407     if len(_btagDiscriminators)==0: return process
0408     print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
0409     updateJetCollection(
0410         process,
0411         jetSource = cms.InputTag('slimmedJets'),
0412         jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
0413         btagDiscriminators = _btagDiscriminators,
0414         postfix = 'WithDeepInfo',
0415     )
0416     process.load("Configuration.StandardSequences.MagneticField_cff")
0417     process.jetCorrFactorsNano.src="selectedUpdatedPatJetsWithDeepInfo"
0418     process.updatedJets.jetSource="selectedUpdatedPatJetsWithDeepInfo"
0419     return process
0420 
0421 nanoAOD_addDeepInfoAK4CHS_switch = cms.PSet(
0422     nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
0423     nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(False),
0424     nanoAOD_addParticleNet_switch = cms.untracked.bool(False),
0425     nanoAOD_addRobustParTAK4Tag_switch = cms.untracked.bool(False)
0426 )
0427 
0428 ################################################
0429 ## DeepInfoAK4CHS:End
0430 #################################################
0431 
0432 #
0433 # ML-based FastSim refinement
0434 #
0435 from Configuration.Eras.Modifier_fastSim_cff import fastSim
0436 def nanoAOD_refineFastSim_bTagDeepFlav(process):
0437 
0438     fastSim.toModify( process.jetTable.variables,
0439       btagDeepFlavBunrefined = process.jetTable.variables.btagDeepFlavB.clone(),
0440       btagDeepFlavCvBunrefined = process.jetTable.variables.btagDeepFlavCvB.clone(),
0441       btagDeepFlavCvLunrefined = process.jetTable.variables.btagDeepFlavCvL.clone(),
0442       btagDeepFlavQGunrefined = process.jetTable.variables.btagDeepFlavQG.clone(),
0443     )
0444 
0445     fastSim.toModify( process.jetTable.variables,
0446       btagDeepFlavB = None,
0447       btagDeepFlavCvB = None,
0448       btagDeepFlavCvL = None,
0449       btagDeepFlavQG = None,
0450     )
0451 
0452     fastSim.toModify( process.jetTable.externalVariables,
0453       btagDeepFlavB = ExtVar(cms.InputTag("btagDeepFlavRefineNN:btagDeepFlavBrefined"), float, doc="DeepJet b+bb+lepb tag discriminator", precision=10),
0454       btagDeepFlavCvB = ExtVar(cms.InputTag("btagDeepFlavRefineNN:btagDeepFlavCvBrefined"), float, doc="DeepJet c vs b+bb+lepb discriminator", precision=10),
0455       btagDeepFlavCvL = ExtVar(cms.InputTag("btagDeepFlavRefineNN:btagDeepFlavCvLrefined"), float, doc="DeepJet c vs uds+g discriminator", precision=10),
0456       btagDeepFlavQG = ExtVar(cms.InputTag("btagDeepFlavRefineNN:btagDeepFlavQGrefined"), float, doc="DeepJet g vs uds discriminator", precision=10),
0457     )
0458 
0459     process.btagDeepFlavRefineNN= cms.EDProducer("JetBaseMVAValueMapProducer",
0460         backend = cms.string("ONNX"),
0461         batch_eval = cms.bool(True),
0462         disableONNXGraphOpt = cms.bool(True),
0463 
0464         src = cms.InputTag("linkedObjects","jets"),
0465 
0466         weightFile=cms.FileInPath("PhysicsTools/NanoAOD/data/btagDeepFlavRefineNN_CHS.onnx"),
0467         name = cms.string("btagDeepFlavRefineNN"),
0468 
0469         isClassifier = cms.bool(False),
0470         variablesOrder = cms.vstring(["GenJet_pt","GenJet_eta","Jet_hadronFlavour",
0471                                       "Jet_btagDeepFlavB","Jet_btagDeepFlavCvB","Jet_btagDeepFlavCvL","Jet_btagDeepFlavQG"]),
0472         variables = cms.PSet(
0473         GenJet_pt = cms.string("?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().pt():pt"),
0474         GenJet_eta = cms.string("?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().eta():eta"),
0475         Jet_hadronFlavour = cms.string("hadronFlavour()"),
0476         Jet_btagDeepFlavB = cms.string("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')"),
0477         Jet_btagDeepFlavCvB = cms.string("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1"),
0478         Jet_btagDeepFlavCvL = cms.string("?(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1"),
0479         Jet_btagDeepFlavQG = cms.string("?(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1"),
0480         ),
0481          inputTensorName = cms.string("input"),
0482          outputTensorName = cms.string("output"),
0483          outputNames = cms.vstring(["btagDeepFlavBrefined","btagDeepFlavCvBrefined","btagDeepFlavCvLrefined","btagDeepFlavQGrefined"]),
0484          outputFormulas = cms.vstring(["at(0)","at(1)","at(2)","at(3)"]),
0485     )
0486 
0487     fastSim.toModify(process.jetTablesTask, process.jetTablesTask.add(process.btagDeepFlavRefineNN))
0488 
0489     return process
0490 
0491 
0492 ################################################################################
0493 # JETS FOR MET type1
0494 ################################################################################
0495 basicJetsForMetForT1METNano = cms.EDProducer("PATJetCleanerForType1MET",
0496     src = updatedJetsWithUserData.src,
0497     jetCorrEtaMax = cms.double(9.9),
0498     jetCorrLabel = cms.InputTag("L3Absolute"),
0499     jetCorrLabelRes = cms.InputTag("L2L3Residual"),
0500     offsetCorrLabel = cms.InputTag("L1FastJet"),
0501     skipEM = cms.bool(False),
0502     skipEMfractionThreshold = cms.double(0.9),
0503     skipMuonSelection = cms.string('isGlobalMuon | isStandAloneMuon'),
0504     skipMuons = cms.bool(True),
0505     type1JetPtThreshold = cms.double(0.0),
0506     calcMuonSubtrRawPtAsValueMap = cms.bool(True)
0507 )
0508 
0509 updatedJetsWithUserData.userFloats.muonSubtrRawPt = cms.InputTag("basicJetsForMetForT1METNano:MuonSubtrRawPt")
0510 
0511 corrT1METJetTable = simpleCandidateFlatTableProducer.clone(
0512     src = finalJets.src,
0513     cut = cms.string("pt<15 && abs(eta)<9.9"),
0514     name = cms.string("CorrT1METJet"),
0515     doc  = cms.string("Additional low-pt ak4 CHS jets for Type-1 MET re-correction"),
0516     variables = cms.PSet(
0517         rawPt = Var("pt()*jecFactor('Uncorrected')",float,precision=10),
0518         eta  = Var("eta",  float,precision=12),
0519         phi = Var("phi", float, precision=12),
0520         area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
0521     )
0522 )
0523 
0524 corrT1METJetTable.variables.muonSubtrFactor = Var("1-userFloat('muonSubtrRawPt')/(pt()*jecFactor('Uncorrected'))",float,doc="1-(muon-subtracted raw pt)/(raw pt)",precision=6)
0525 jetTable.variables.muonSubtrFactor = Var("1-userFloat('muonSubtrRawPt')/(pt()*jecFactor('Uncorrected'))",float,doc="1-(muon-subtracted raw pt)/(raw pt)",precision=6)
0526 
0527 jetForMETTask =  cms.Task(basicJetsForMetForT1METNano,corrT1METJetTable)
0528 
0529 #before cross linking
0530 jetUserDataTask = cms.Task(bJetVars,qgtagger,jercVars,tightJetId,tightJetIdLepVeto,pileupJetIdNano)
0531 
0532 #before cross linking
0533 jetTask = cms.Task(jetCorrFactorsNano,updatedJets,jetUserDataTask,updatedJetsWithUserData,finalJets)
0534 
0535 #after cross linkining
0536 jetTablesTask = cms.Task(bjetNN,cjetNN,jetTable)