CMS 3D CMS Logo

Functions | Variables
custom_jme_cff Namespace Reference

Functions

def AddBTaggingScores (proc, jetTableName="")
 
def AddDeepJetGluonLQuarkScores (proc, jetTableName="")
 
def AddJetID (proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
 
def AddNewAK8CHSJets (proc, recoJA, runOnMC)
 
def AddNewAK8GenJetsForJEC (proc, genJA)
 
def AddNewAK8PuppiJetsForJEC (proc, recoJA, runOnMC)
 
def AddNewGenJets (proc, genJetInfo)
 
def AddNewPatJets (proc, recoJetInfo, runOnMC)
 
def AddParticleNetAK4Scores (proc, jetTableName="")
 
def AddPileUpJetIDVars (proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
 
def AddQGLTaggerVars (proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
 
def AddRobustParTAK4Scores (proc, jetTableName="")
 
def AddUnifiedParTAK4Scores (proc, jetTableName="")
 
def AddVariablesForAK4GenJets (proc)
 
def AddVariablesForAK8GenJets (proc)
 
def AddVariablesForAK8PuppiJets (proc)
 
def ModifyAK4JetMCTable (proc)
 
def PrepJMECustomNanoAOD (process)
 
def ReclusterAK4CHSJets (proc, recoJA, runOnMC)
 
def ReclusterAK4GenJets (proc, genJA)
 
def ReclusterAK4PuppiJets (proc, recoJA, runOnMC)
 
def RemoveAllJetPtCuts (proc)
 
def SaveGenJets (proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)
 
def SavePatJets (proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)
 

Variables

 area
 
 bTagCSVV2
 
 btagDDX
 
 btagDDXV2
 
 btagDeepB
 
 bTagDeepCSV
 
 btagDeepCvB
 
 btagDeepCvL
 
 btagDeepFlavB
 
 btagDeepFlavC
 
 btagDeepFlavCvB
 
 btagDeepFlavCvL
 
 btagDeepFlavG
 
 btagDeepFlavQG
 
 btagDeepFlavUDS
 
 bTagDeepJet
 
 bTagDiscriminatorsForAK4
 
 btagHbb
 
 btagRobustParTAK4B
 
 btagRobustParTAK4C
 
 btagRobustParTAK4CvB
 
 btagRobustParTAK4CvL
 
 btagRobustParTAK4G
 
 btagRobustParTAK4QG
 
 btagRobustParTAK4UDS
 
 btagUParTAK4B
 
 btagUParTAK4CvB
 
 btagUParTAK4CvL
 
 btagUParTAK4QvG
 
 btagUParTAK4TauVJet
 
 BTAGVARS
 
 CALOJETVARS
 
 chEmEF
 
 chHadMultiplicity
 
 chHEF
 
 config_genjets
 
 config_recojets
 
 DEEPJETVARS
 
 doc
 
 elMultiplicity
 
 emf
 
 float
 
 foo
 
 genJetIdx
 
 GENJETVARS
 
 hadronFlavour
 
 hfEmEF
 
 hfEMMultiplicity
 
 hfHadMultiplicity
 
 hfHEF
 
 muEF
 
 muMultiplicity
 
 nanoInfo_genjets
 
 nanoInfo_recojets
 
 nConstituents
 
 neEmEF
 
 neHadMultiplicity
 
 neHEF
 
 nElectrons
 
 nMuons
 
 particleNetAK4_B
 
 particleNetAK4_CvsB
 
 particleNetAK4_CvsL
 
 particleNetAK4_G
 
 particleNetAK4_puIdDisc
 
 particleNetAK4_QvsG
 
 PARTICLENETAK4VARS
 
 partonFlavour
 
 PFJETVARS
 
 phoMultiplicity
 
 precision
 
 puId_beta
 
 puId_dR2Mean
 
 puId_frac01
 
 puId_frac02
 
 puId_frac03
 
 puId_frac04
 
 puId_jetR
 
 puId_jetRchg
 
 puId_majW
 
 puId_minW
 
 puId_nCharged
 
 puId_ptD
 
 puId_pull
 
 PUIDVARS
 
 qgl_axis2
 
 qgl_mult
 
 qgl_ptD
 
 QGLVARS
 
 rawFactor
 
 ROBUSTPARTAK4VARS
 
 UNIFIEDPARTAK4VARS
 
 UParTAK4RegPtRawCorr
 
 UParTAK4RegPtRawCorrNeutrino
 
 UParTAK4RegPtRawRes
 

Function Documentation

◆ AddBTaggingScores()

def custom_jme_cff.AddBTaggingScores (   proc,
  jetTableName = "" 
)
Store b-tagging scores from various algortihm

Definition at line 409 of file custom_jme_cff.py.

References common_cff.Var().

Referenced by SavePatJets().

409 def AddBTaggingScores(proc, jetTableName=""):
410  """
411  Store b-tagging scores from various algortihm
412  """
413 
414  getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
415  getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
416  getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
417 
418  run2_nanoAOD_ANY.toModify(
419  getattr(proc, jetTableName).variables,
420  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
421  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),
422  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),
423  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)
424  )
425 
426  return proc
427 
def AddBTaggingScores(proc, jetTableName="")
def Var(expr, valtype, doc=None, precision=-1, lazyEval=False)
Definition: common_cff.py:17

◆ AddDeepJetGluonLQuarkScores()

def custom_jme_cff.AddDeepJetGluonLQuarkScores (   proc,
  jetTableName = "" 
)
Store DeepJet raw score in jetTable for gluon and light quark

Definition at line 428 of file custom_jme_cff.py.

Referenced by SavePatJets().

428 def AddDeepJetGluonLQuarkScores(proc, jetTableName=""):
429  """
430  Store DeepJet raw score in jetTable for gluon and light quark
431  """
432 
433  getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
434  getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
435  getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
436 
437  return proc
438 
def AddDeepJetGluonLQuarkScores(proc, jetTableName="")

◆ AddJetID()

def custom_jme_cff.AddJetID (   proc,
  jetName = "",
  jetSrc = "",
  jetTableName = "",
  jetTaskName = "" 
)
Setup modules to calculate PF jet ID

Definition at line 235 of file custom_jme_cff.py.

References PVValHelper.add(), and common_cff.Var().

Referenced by SavePatJets().

235 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
236  """
237  Setup modules to calculate PF jet ID
238  """
239 
240  isPUPPIJet = True if "PUPPI" in jetName.upper() else False
241 
242  looseJetId = "looseJetId{}".format(jetName)
243  setattr(proc, looseJetId, proc.looseJetId.clone(
244  src = jetSrc,
245  filterParams = proc.looseJetId.filterParams.clone(
246  version = "WINTER16"
247  ),
248  )
249  )
250 
251  tightJetId = "tightJetId{}".format(jetName)
252  setattr(proc, tightJetId, proc.tightJetId.clone(
253  src = jetSrc,
254  filterParams = proc.tightJetId.filterParams.clone(
255  version = "RUN3WINTER22{}".format("PUPPI" if isPUPPIJet else "CHS")
256  ),
257  )
258  )
259 
260  tightJetIdLepVeto = "tightJetIdLepVeto{}".format(jetName)
261  setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
262  src = jetSrc,
263  filterParams = proc.tightJetIdLepVeto.filterParams.clone(
264  version = "RUN3WINTER22{}".format("PUPPI" if isPUPPIJet else "CHS")
265  ),
266  )
267  )
268 
269  run3_jme_Winter22runsBCDEprompt.toModify(
270  getattr(proc, tightJetId).filterParams, version = "RUN3WINTER22{}runsBCDEprompt".format("PUPPI" if isPUPPIJet else "CHS")
271  ).toModify(
272  getattr(proc, tightJetIdLepVeto).filterParams, version = "RUN3WINTER22{}runsBCDEprompt".format("PUPPI" if isPUPPIJet else "CHS")
273  )
274 
275  (run2_jme_2017 | run2_jme_2018 | run3_nanoAOD_122 | run3_nanoAOD_124).toModify(
276  getattr(proc, tightJetId).filterParams, version = "RUN2UL{}".format("PUPPI" if isPUPPIJet else "CHS")
277  ).toModify(
278  getattr(proc, tightJetIdLepVeto).filterParams, version = "RUN2UL{}".format("PUPPI" if isPUPPIJet else "CHS")
279  )
280 
281  run2_jme_2016.toModify(
282  getattr(proc, tightJetId).filterParams, version = "RUN2UL16{}".format("PUPPI" if isPUPPIJet else "CHS")
283  ).toModify(
284  getattr(proc, tightJetIdLepVeto).filterParams, version = "RUN2UL16{}".format("PUPPI" if isPUPPIJet else "CHS")
285  )
286 
287  #
288  # Save variables as userInts in each jet
289  #
290  patJetWithUserData = "{}WithUserData".format(jetSrc)
291  getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
292  getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
293 
294  #
295  # Specfiy variables in the jetTable to save in NanoAOD
296  #
297  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")
298 
299  getattr(proc,jetTaskName).add(getattr(proc, tightJetId))
300  getattr(proc,jetTaskName).add(getattr(proc, tightJetIdLepVeto))
301 
302  return proc
303 
def Var(expr, valtype, doc=None, precision=-1, lazyEval=False)
Definition: common_cff.py:17
def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
void add(std::map< std::string, TH1 *> &h, TH1 *hist)

◆ AddNewAK8CHSJets()

def custom_jme_cff.AddNewAK8CHSJets (   proc,
  recoJA,
  runOnMC 
)
Store an AK8 CHS jet collection for JEC studies.

Definition at line 1038 of file custom_jme_cff.py.

References print(), and SavePatJets().

1038 def AddNewAK8CHSJets(proc, recoJA, runOnMC):
1039  """
1040  Store an AK8 CHS jet collection for JEC studies.
1041  """
1042  print("custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies")
1043 
1044  #
1045  # Recluster AK8 CHS jets
1046  #
1047  cfg = {
1048  "jet" : "ak8pfchs",
1049  "inputCollection" : "",
1050  "genJetsCollection": "AK8GenJetsNoNu",
1051  "minPtFastjet" : 0., # Remove any pt threshold at the jet clustering stage.
1052  }
1053  recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1054 
1055  jetName = recoJetInfo.jetUpper
1056  payload = recoJetInfo.jetCorrPayload
1057 
1058  patJetFinalColl = recoJetInfo.patJetFinalCollection
1059  jetTablePrefix = "FatJetCHS"
1060  jetTableDoc = "AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored."
1061  ptcut = 15
1062 
1063  SavePatJets(proc,
1064  jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=True,
1065  doCalo=False, ptcut=ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=runOnMC
1066  )
1067 
1068  return proc
1069 
def AddNewAK8CHSJets(proc, recoJA, runOnMC)
def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ AddNewAK8GenJetsForJEC()

def custom_jme_cff.AddNewAK8GenJetsForJEC (   proc,
  genJA 
)
Make a separate AK8 Gen jet collection for JEC studies.

Definition at line 1205 of file custom_jme_cff.py.

References print(), and SaveGenJets().

Referenced by PrepJMECustomNanoAOD().

1205 def AddNewAK8GenJetsForJEC(proc, genJA):
1206  """
1207  Make a separate AK8 Gen jet collection for JEC studies.
1208  """
1209  print("custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies")
1210 
1211  #
1212  # Recluster AK8 Gen jet
1213  #
1214  cfg = {
1215  "jet" : "ak8gen",
1216  "minPtFastjet" : 10.
1217  }
1218  genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1219 
1220  genJetName = genJetInfo.jetUpper
1221  genJetAlgo = genJetInfo.jetAlgo
1222  genJetSize = genJetInfo.jetSize
1223  genJetSizeNr = genJetInfo.jetSizeNr
1224  genJetFinalColl = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu")
1225  genJetTablePrefix = "GenJetAK8ForJEC"
1226  genJetTableDoc = "AK8 Gen jets (made with visible genparticles) with pt > 10 GeV. Reclustered for JEC studies."
1227 
1228  SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)
1229 
1230  return proc
1231 
def AddNewAK8GenJetsForJEC(proc, genJA)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)

◆ AddNewAK8PuppiJetsForJEC()

def custom_jme_cff.AddNewAK8PuppiJetsForJEC (   proc,
  recoJA,
  runOnMC 
)
Store a separate AK8 Puppi jet collection for JEC studies.
Only minimal info are stored

Definition at line 1005 of file custom_jme_cff.py.

References print(), and SavePatJets().

Referenced by PrepJMECustomNanoAOD().

1005 def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC):
1006  """
1007  Store a separate AK8 Puppi jet collection for JEC studies.
1008  Only minimal info are stored
1009  """
1010  print("custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies")
1011 
1012  #
1013  # Recluster AK8 Puppi jets
1014  #
1015  cfg = {
1016  "jet" : "ak8pfpuppi",
1017  "inputCollection" : "",
1018  "genJetsCollection": "AK8GenJetsNoNu",
1019  "minPtFastjet" : 0., # Remove any pt threshold at the jet clustering stage.
1020  }
1021  recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1022 
1023  jetName = recoJetInfo.jetUpper
1024  payload = recoJetInfo.jetCorrPayload
1025 
1026  patJetFinalColl = recoJetInfo.patJetFinalCollection
1027  jetTablePrefix = "FatJetForJEC"
1028  jetTableDoc = "AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored."
1029  ptcut = 15
1030 
1031  SavePatJets(proc,
1032  jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=True,
1033  doCalo=False, ptcut=ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=runOnMC
1034  )
1035 
1036  return proc
1037 
def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC)

◆ AddNewGenJets()

def custom_jme_cff.AddNewGenJets (   proc,
  genJetInfo 
)
Add genJet into custom nanoAOD

Definition at line 1104 of file custom_jme_cff.py.

References SaveGenJets().

Referenced by PrepJMECustomNanoAOD().

1104 def AddNewGenJets(proc, genJetInfo):
1105  """
1106  Add genJet into custom nanoAOD
1107  """
1108 
1109  genJetName = genJetInfo.jetUpper
1110  genJetAlgo = genJetInfo.jetAlgo
1111  genJetSize = genJetInfo.jetSize
1112  genJetSizeNr = genJetInfo.jetSizeNr
1113  genJetFinalColl = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu")
1114  genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet]["name"]
1115  genJetTableDoc = nanoInfo_genjets[genJetInfo.jet]["doc"]
1116 
1117  SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)
1118 
1119  return proc
1120 
def AddNewGenJets(proc, genJetInfo)
def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)

◆ AddNewPatJets()

def custom_jme_cff.AddNewPatJets (   proc,
  recoJetInfo,
  runOnMC 
)
Add patJet into custom nanoAOD

Definition at line 479 of file custom_jme_cff.py.

References SavePatJets().

Referenced by PrepJMECustomNanoAOD().

479 def AddNewPatJets(proc, recoJetInfo, runOnMC):
480  """
481  Add patJet into custom nanoAOD
482  """
483 
484  jetName = recoJetInfo.jetUpper
485  payload = recoJetInfo.jetCorrPayload
486  doPF = recoJetInfo.doPF
487  doCalo = recoJetInfo.doCalo
488  patJetFinalColl = recoJetInfo.patJetFinalCollection
489 
490  nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
491  jetTablePrefix = nanoInfoForJet["name"]
492  jetTableDoc = nanoInfoForJet["doc"]
493  ptcut = nanoInfoForJet["ptcut"] if "ptcut" in nanoInfoForJet else 8
494  doPUIDVar = nanoInfoForJet["doPUIDVar"] if "doPUIDVar" in nanoInfoForJet else False
495  doQGL = nanoInfoForJet["doQGL"] if "doQGL" in nanoInfoForJet else False
496  doBTag = nanoInfoForJet["doBTag"] if "doBTag" in nanoInfoForJet else False
497 
498  SavePatJets(proc,
499  jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
500  ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
501  )
502 
503  return proc
504 
def AddNewPatJets(proc, recoJetInfo, runOnMC)
def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)

◆ AddParticleNetAK4Scores()

def custom_jme_cff.AddParticleNetAK4Scores (   proc,
  jetTableName = "" 
)
Store ParticleNetAK4 scores in jetTable

Definition at line 465 of file custom_jme_cff.py.

Referenced by SavePatJets().

465 def AddParticleNetAK4Scores(proc, jetTableName=""):
466  """
467  Store ParticleNetAK4 scores in jetTable
468  """
469 
470  getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
471  getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
472  getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
473  getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
474  getattr(proc, jetTableName).variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
475  getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
476 
477  return proc
478 
def AddParticleNetAK4Scores(proc, jetTableName="")

◆ AddPileUpJetIDVars()

def custom_jme_cff.AddPileUpJetIDVars (   proc,
  jetName = "",
  jetSrc = "",
  jetTableName = "",
  jetTaskName = "" 
)
Setup modules to calculate pileup jet ID input variables for PF jet

Definition at line 304 of file custom_jme_cff.py.

References PVValHelper.add().

Referenced by ReclusterAK4PuppiJets(), and SavePatJets().

304 def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
305  """
306  Setup modules to calculate pileup jet ID input variables for PF jet
307  """
308 
309  #
310  # Calculate pileup jet ID variables
311  #
312  puJetIdVarsCalculator = "puJetIdCalculator{}".format(jetName)
313  setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
314  jets = jetSrc,
315  vertexes = "offlineSlimmedPrimaryVertices",
316  inputIsCorrected = True,
317  applyJec = False,
318  srcConstituentWeights = "packedpuppi" if "PUPPI" in jetName.upper() else ""
319  )
320  )
321  getattr(proc,jetTaskName).add(getattr(proc, puJetIdVarsCalculator))
322 
323  #
324  # Get the variables
325  #
326  puJetIDVar = "puJetIDVar{}".format(jetName)
327  setattr(proc, puJetIDVar, cms.EDProducer("PileupJetIDVarProducer",
328  srcJet = cms.InputTag(jetSrc),
329  srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
330  )
331  )
332  getattr(proc,jetTaskName).add(getattr(proc, puJetIDVar))
333 
334  #
335  # Save variables as userFloats and userInts for each jet
336  #
337  patJetWithUserData = "{}WithUserData".format(jetSrc)
338  getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag("{}:dR2Mean".format(puJetIDVar))
339  getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag("{}:majW".format(puJetIDVar))
340  getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag("{}:minW".format(puJetIDVar))
341  getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag("{}:frac01".format(puJetIDVar))
342  getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag("{}:frac02".format(puJetIDVar))
343  getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag("{}:frac03".format(puJetIDVar))
344  getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag("{}:frac04".format(puJetIDVar))
345  getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag("{}:ptD".format(puJetIDVar))
346  getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag("{}:beta".format(puJetIDVar))
347  getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag("{}:pull".format(puJetIDVar))
348  getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag("{}:jetR".format(puJetIDVar))
349  getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag("{}:jetRchg".format(puJetIDVar))
350  getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag("{}:nCharged".format(puJetIDVar))
351 
352  #
353  # Specfiy variables in the jet table to save in NanoAOD
354  #
355  getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
356  getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
357  getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
358  getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
359  getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
360  getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
361  getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
362  getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
363  getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
364  getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
365  getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
366  getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
367  getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
368 
369  return proc
370 
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")

◆ AddQGLTaggerVars()

def custom_jme_cff.AddQGLTaggerVars (   proc,
  jetName = "",
  jetSrc = "",
  jetTableName = "",
  jetTaskName = "",
  calculateQGLVars = False 
)
Schedule the QGTagger module to calculate input variables to the QG likelihood

Definition at line 371 of file custom_jme_cff.py.

References PVValHelper.add().

Referenced by ReclusterAK4PuppiJets(), and SavePatJets().

371 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False):
372  """
373  Schedule the QGTagger module to calculate input variables to the QG likelihood
374  """
375 
376  isPUPPIJet = True if "PUPPI" in jetName.upper() else False
377 
378  QGLTagger="qgtagger{}".format(jetName)
379  patJetWithUserData="{}WithUserData".format(jetSrc)
380 
381  if calculateQGLVars:
382  setattr(proc, QGLTagger, qgtagger.clone(
383  srcJets = jetSrc,
384  computeLikelihood = False,
385  )
386  )
387  if isPUPPIJet:
388  getattr(proc,QGLTagger).srcConstituentWeights = cms.InputTag("packedpuppi")
389 
390  #
391  # Save variables as userFloats and userInts for each jet
392  #
393  getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+":axis2")
394  getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+":ptD")
395  getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+":mult")
396 
397  #
398  # Specfiy variables in the jet table to save in NanoAOD
399  #
400  getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
401  getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
402  getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
403 
404  if calculateQGLVars:
405  getattr(proc,jetTaskName).add(getattr(proc, QGLTagger))
406 
407  return proc
408 
def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
void add(std::map< std::string, TH1 *> &h, TH1 *hist)

◆ AddRobustParTAK4Scores()

def custom_jme_cff.AddRobustParTAK4Scores (   proc,
  jetTableName = "" 
)
Store RobustParTAK4 scores in jetTable

Definition at line 439 of file custom_jme_cff.py.

Referenced by SavePatJets().

439 def AddRobustParTAK4Scores(proc, jetTableName=""):
440  """
441  Store RobustParTAK4 scores in jetTable
442  """
443 
444  getattr(proc, jetTableName).variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
445  getattr(proc, jetTableName).variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
446  getattr(proc, jetTableName).variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
447 
448  return proc
449 
def AddRobustParTAK4Scores(proc, jetTableName="")

◆ AddUnifiedParTAK4Scores()

def custom_jme_cff.AddUnifiedParTAK4Scores (   proc,
  jetTableName = "" 
)
Store RobustParTAK4 scores in jetTable

Definition at line 450 of file custom_jme_cff.py.

Referenced by SavePatJets().

450 def AddUnifiedParTAK4Scores(proc, jetTableName=""):
451  """
452  Store RobustParTAK4 scores in jetTable
453  """
454 
455  getattr(proc, jetTableName).variables.btagUParTAK4B = UNIFIEDPARTAK4VARS.btagUParTAK4B
456  getattr(proc, jetTableName).variables.btagUParTAK4CvL = UNIFIEDPARTAK4VARS.btagUParTAK4CvL
457  getattr(proc, jetTableName).variables.btagUParTAK4CvB = UNIFIEDPARTAK4VARS.btagUParTAK4CvB
458  getattr(proc, jetTableName).variables.btagUParTAK4TauVJet = UNIFIEDPARTAK4VARS.btagUParTAK4TauVJet
459  getattr(proc, jetTableName).variables.UParTAK4RegPtRawCorr = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawCorr
460  getattr(proc, jetTableName).variables.UParTAK4RegPtRawCorrNeutrino = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawCorrNeutrino
461  getattr(proc, jetTableName).variables.UParTAK4RegPtRawRes = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawRes
462 
463  return proc
464 
def AddUnifiedParTAK4Scores(proc, jetTableName="")

◆ AddVariablesForAK4GenJets()

def custom_jme_cff.AddVariablesForAK4GenJets (   proc)

Definition at line 1232 of file custom_jme_cff.py.

Referenced by PrepJMECustomNanoAOD().

1232 def AddVariablesForAK4GenJets(proc):
1233  proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
1234  return proc
1235 
def AddVariablesForAK4GenJets(proc)

◆ AddVariablesForAK8GenJets()

def custom_jme_cff.AddVariablesForAK8GenJets (   proc)

Definition at line 1236 of file custom_jme_cff.py.

Referenced by PrepJMECustomNanoAOD().

1236 def AddVariablesForAK8GenJets(proc):
1237  proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
1238  return proc
1239 
def AddVariablesForAK8GenJets(proc)

◆ AddVariablesForAK8PuppiJets()

def custom_jme_cff.AddVariablesForAK8PuppiJets (   proc)
Add more variables for AK8 PFPUPPI jets

Definition at line 1070 of file custom_jme_cff.py.

References common_cff.Var().

Referenced by PrepJMECustomNanoAOD().

1070 def AddVariablesForAK8PuppiJets(proc):
1071  """
1072  Add more variables for AK8 PFPUPPI jets
1073  """
1074 
1075  proc.fatJetTable.variables.rawFactor.precision = 10
1076 
1077  #
1078  # These variables are not stored for AK8PFPUPPI (slimmedJetsAK8)
1079  # in MiniAOD if their pt < 170 GeV. Hence the conditional fill.
1080  #
1081  proc.fatJetTable.variables.chHEF = Var("?isPFJet()?chargedHadronEnergyFraction():-1", float, doc="charged Hadron Energy Fraction", precision = 6)
1082  proc.fatJetTable.variables.neHEF = Var("?isPFJet()?neutralHadronEnergyFraction():-1", float, doc="neutral Hadron Energy Fraction", precision = 6)
1083  proc.fatJetTable.variables.chEmEF = Var("?isPFJet()?chargedEmEnergyFraction():-1", float, doc="charged Electromagnetic Energy Fraction", precision = 6)
1084  proc.fatJetTable.variables.neEmEF = Var("?isPFJet()?neutralEmEnergyFraction():-1", float, doc="neutral Electromagnetic Energy Fraction", precision = 6)
1085  proc.fatJetTable.variables.muEF = Var("?isPFJet()?muonEnergyFraction():-1", float, doc="muon Energy Fraction", precision = 6)
1086  proc.fatJetTable.variables.hfHEF = Var("?isPFJet()?HFHadronEnergyFraction():-1", float, doc="energy fraction in forward hadronic calorimeter", precision = 6)
1087  proc.fatJetTable.variables.hfEmEF = Var("?isPFJet()?HFEMEnergyFraction():-1", float, doc="energy fraction in forward EM calorimeter", precision = 6)
1088  proc.fatJetTable.variables.chHadMultiplicity = Var("?isPFJet()?chargedHadronMultiplicity():-1","int16", doc="(Puppi-weighted) number of charged hadrons in the jet")
1089  proc.fatJetTable.variables.neHadMultiplicity = Var("?isPFJet()?neutralHadronMultiplicity():-1","int16", doc="(Puppi-weighted) number of neutral hadrons in the jet")
1090  proc.fatJetTable.variables.hfHadMultiplicity = Var("?isPFJet()?HFHadronMultiplicity():-1", "int16", doc="(Puppi-weighted) number of HF Hadrons in the jet")
1091  proc.fatJetTable.variables.hfEMMultiplicity = Var("?isPFJet()?HFEMMultiplicity():-1", "int16", doc="(Puppi-weighted) number of HF EMs in the jet")
1092  proc.fatJetTable.variables.muMultiplicity = Var("?isPFJet()?muonMultiplicity():-1", "int16", doc="(Puppi-weighted) number of muons in the jet")
1093  proc.fatJetTable.variables.elMultiplicity = Var("?isPFJet()?electronMultiplicity():-1", "int16", doc="(Puppi-weighted) number of electrons in the jet")
1094  proc.fatJetTable.variables.phoMultiplicity = Var("?isPFJet()?photonMultiplicity():-1", "int16", doc="(Puppi-weighted) number of photons in the jet")
1095 
1096  return proc
1097 #******************************************
1098 #
1099 #
1100 # Gen Jets related functions
1101 #
1102 #
1103 #******************************************
def Var(expr, valtype, doc=None, precision=-1, lazyEval=False)
Definition: common_cff.py:17
def AddVariablesForAK8PuppiJets(proc)

◆ ModifyAK4JetMCTable()

def custom_jme_cff.ModifyAK4JetMCTable (   proc)

Definition at line 1240 of file custom_jme_cff.py.

Referenced by PrepJMECustomNanoAOD().

1240 def ModifyAK4JetMCTable(proc):
1241  # Remove the genjet pt selection when saving the genJetIdx, which is
1242  # the default in main Nano
1243  proc.jetMCTable.variables.genJetIdx = PFJETVARS.genJetIdx
1244  return proc
1245 
1246 #===========================================================================
1247 #
1248 # Misc. functions
1249 #
1250 #===========================================================================
def ModifyAK4JetMCTable(proc)

◆ PrepJMECustomNanoAOD()

def custom_jme_cff.PrepJMECustomNanoAOD (   process)

Definition at line 1271 of file custom_jme_cff.py.

References AddNewAK8GenJetsForJEC(), AddNewAK8PuppiJetsForJEC(), AddNewGenJets(), AddNewPatJets(), AddVariablesForAK4GenJets(), AddVariablesForAK8GenJets(), AddVariablesForAK8PuppiJets(), ModifyAK4JetMCTable(), ReclusterAK4CHSJets(), ReclusterAK4GenJets(), ReclusterAK4PuppiJets(), and RemoveAllJetPtCuts().

1271 def PrepJMECustomNanoAOD(process):
1272 
1273  runOnMC=True
1274  if hasattr(process,"NANOEDMAODoutput") or hasattr(process,"NANOAODoutput"):
1275  runOnMC = False
1276 
1279  process = RemoveAllJetPtCuts(process)
1280 
1281 
1286  genJA = GenJetAdder()
1287  if runOnMC:
1288 
1291  process = AddVariablesForAK8GenJets(process)
1292 
1295  process = AddNewAK8GenJetsForJEC(process, genJA)
1296 
1299  process = ModifyAK4JetMCTable(process)
1300 
1303  process = ReclusterAK4GenJets(process, genJA)
1304  process = AddVariablesForAK4GenJets(process)
1305 
1308  for jetConfig in config_genjets:
1309  cfg = { k : v for k, v in jetConfig.items() if k != "enabled"}
1310  genJetInfo = genJA.addGenJetCollection(process, **cfg)
1311  AddNewGenJets(process, genJetInfo)
1312 
1313 
1318  recoJA = RecoJetAdder(runOnMC=runOnMC)
1319 
1322  process = AddVariablesForAK8PuppiJets(process)
1323 
1326  process = AddNewAK8PuppiJetsForJEC(process, recoJA, runOnMC)
1327 
1330  process = ReclusterAK4CHSJets(process, recoJA, runOnMC)
1331 
1334  process = ReclusterAK4PuppiJets(process, recoJA, runOnMC)
1335 
1338  for jetConfig in config_recojets:
1339  cfg = { k : v for k, v in jetConfig.items() if k != "enabled"}
1340  recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
1341  AddNewPatJets(process, recoJetInfo, runOnMC)
1342 
1343 
1348  def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
1349  if addAK4CHSJetTasks:
1350  proc.nanoTableTaskCommon.add(proc.jetTask)
1351  proc.nanoTableTaskCommon.add(proc.jetTablesTask)
1352  proc.nanoTableTaskCommon.add(proc.jetForMETTask)
1353  if addAK4PuppiJetTasks:
1354  proc.nanoTableTaskCommon.add(proc.jetPuppiTask)
1355  proc.nanoTableTaskCommon.add(proc.jetPuppiTablesTask)
1356  proc.nanoTableTaskCommon.add(proc.jetPuppiForMETTask)
1357  return proc
1358 
1359  jmeNano_addAK4JetTasks_switch = cms.PSet(
1360  jmeNano_addAK4CHS_switch = cms.untracked.bool(True),
1361  jmeNano_addAK4Puppi_switch = cms.untracked.bool(False)
1362  )
1363  run2_nanoAOD_ANY.toModify(jmeNano_addAK4JetTasks_switch,
1364  jmeNano_addAK4CHS_switch = False,
1365  jmeNano_addAK4Puppi_switch = True
1366  )
1367  process = addAK4JetTasks(process,
1368  addAK4CHSJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4CHS_switch,
1369  addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4Puppi_switch,
1370  )
1371 
1372 
1375  if runOnMC:
1376  process.puTable.savePtHatMax = True
1377 
1378 
1381  if runOnMC:
1382  process.genWeightsTable.keepAllPSWeights = True
1383 
1384  return process
1385 
def ReclusterAK4CHSJets(proc, recoJA, runOnMC)
def RemoveAllJetPtCuts(proc)
def AddNewPatJets(proc, recoJetInfo, runOnMC)
def ModifyAK4JetMCTable(proc)
def ReclusterAK4GenJets(proc, genJA)
def AddNewAK8GenJetsForJEC(proc, genJA)
def ReclusterAK4PuppiJets(proc, recoJA, runOnMC)
def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC)
def AddNewGenJets(proc, genJetInfo)
def AddVariablesForAK4GenJets(proc)
def AddVariablesForAK8PuppiJets(proc)
def AddVariablesForAK8GenJets(proc)
def PrepJMECustomNanoAOD(process)

◆ ReclusterAK4CHSJets()

def custom_jme_cff.ReclusterAK4CHSJets (   proc,
  recoJA,
  runOnMC 
)
Recluster AK4 CHS jets and replace slimmedJets that is used as default to
save AK4 CHS jets in NanoAODs (for Run-2).

Definition at line 816 of file custom_jme_cff.py.

References print(), and common_cff.Var().

Referenced by PrepJMECustomNanoAOD().

816 def ReclusterAK4CHSJets(proc, recoJA, runOnMC):
817  """
818  Recluster AK4 CHS jets and replace slimmedJets that is used as default to
819  save AK4 CHS jets in NanoAODs (for Run-2).
820  """
821  print("custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
822 
823  from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import _pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll
824  from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff import _pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll
825 
826  bTagDiscriminatorsForAK4CHS = cms.PSet(
827  foo = cms.vstring(_pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll+_pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll)
828  )
829  bTagDiscriminatorsForAK4CHS = bTagDiscriminatorsForAK4CHS.foo.value()
830 
831  #
832  # Recluster AK4 CHS jets
833  #
834  cfg = {
835  "jet" : "ak4pfchs",
836  "inputCollection" : "",
837  "genJetsCollection": "AK4GenJetsNoNu",
838  "bTagDiscriminators": bTagDiscriminatorsForAK4CHS,
839  "minPtFastjet" : 0.,
840  }
841  recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
842 
843  jetName = recoJetInfo.jetUpper
844  patJetFinalColl = recoJetInfo.patJetFinalCollection
845 
846  #
847  # Change the input jet source for jetCorrFactorsNano
848  # and updatedJets
849  #
850  proc.jetCorrFactorsNano.src=patJetFinalColl
851  proc.updatedJets.jetSource=patJetFinalColl
852 
853  #
854  # Change pt cut
855  #
856  finalJetsCut = ""
857  if runOnMC:
858  finalJetsCut = "(pt >= 10) || ((pt < 10) && (genJetFwdRef().backRef().isNonnull()))"
859  else:
860  finalJetsCut = "(pt >= 10)"
861 
862  proc.finalJets.cut = finalJetsCut
863  #
864  # Add a minimum pt cut for corrT1METJets.
865  #
866  proc.corrT1METJetTable.cut = "pt>=10 && pt<15 && abs(eta)<9.9"
867 
868  #
869  # Jet table cut
870  #
871  jetTableCut = "" # must not have any cut at the jetTable for AK4 CHS as it has been cross-cleaned
872  proc.jetTable.src = cms.InputTag("finalJets")
873  proc.jetTable.cut = jetTableCut
874  proc.jetMCTable.cut = jetTableCut
875  proc.jetTable.name = "JetCHS"
876 
877  #
878  # For Run-2 eras, the main AK4 jet collection in NanoAOD is the CHS collection
879  #
880  run2_nanoAOD_ANY.toModify(
881  proc.jetTable,
882  src = cms.InputTag("linkedObjects","jets"),
883  name = "Jet"
884  )
885 
886  #
887  # Jet table documentation
888  #
889  jetTableDoc = "AK4 PF CHS jets with JECs applied. Jets with pt >= 10 GeV are stored."
890  if runOnMC:
891  jetTableDoc += "For jets with pt < 10 GeV, only those matched to AK4 Gen jets are stored."
892  proc.jetTable.doc = jetTableDoc
893 
894  proc.jetTable.variables.rawFactor.precision = 10
895 
896  #
897  # Add variables
898  #
899  proc.jetTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
900  proc.jetTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
901  proc.jetTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
902  proc.jetTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
903  proc.jetTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
904  proc.jetTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
905  proc.jetTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
906 
907  #
908  # Add charged energy fraction from other primary vertices
909  #
910  proc.updatedJetsWithUserData.userFloats.chFPV1EF = cms.InputTag("jercVars:chargedFromPV1EnergyFraction")
911  proc.updatedJetsWithUserData.userFloats.chFPV2EF = cms.InputTag("jercVars:chargedFromPV2EnergyFraction")
912  proc.updatedJetsWithUserData.userFloats.chFPV3EF = cms.InputTag("jercVars:chargedFromPV3EnergyFraction")
913  proc.jetTable.variables.chFPV1EF = Var("userFloat('chFPV1EF')", float, doc="charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
914  proc.jetTable.variables.chFPV2EF = Var("userFloat('chFPV2EF')", float, doc="charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
915  proc.jetTable.variables.chFPV3EF = Var("userFloat('chFPV3EF')", float, doc="charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
916 
917  #
918  # Remove these tagger branches since for CHS, we just want to store
919  # one tagger only.
920  #
921  for varNames in proc.jetTable.variables.parameterNames_():
922  if "btagDeepFlav" in varNames or "btagRobustParT" in varNames or "btagUParT" in varNames:
923  delattr(proc.jetTable.variables, varNames)
924 
925  proc.jetTable.variables.btagPNetB = Var("?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc="ParticleNet b vs. udscg")
926  proc.jetTable.variables.btagPNetCvL = Var("?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL'):-1",float,precision=10,doc="ParticleNet c vs. udsg")
927  proc.jetTable.variables.btagPNetCvB = Var("?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB'):-1",float,precision=10,doc="ParticleNet c vs. b")
928  proc.jetTable.variables.btagPNetQvG = Var("?pt>15 && abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:QvsG'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardDiscriminatorsJetTags:QvsG')",float,precision=10,doc="ParticleNet q (udsbc) vs. g")
929  proc.jetTable.variables.btagPNetTauVJet = Var("?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet'):-1",float,precision=10,doc="ParticleNet tau vs. jet")
930  proc.jetTable.variables.PNetRegPtRawCorr = Var("?pt>15 && 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")
931  proc.jetTable.variables.PNetRegPtRawCorrNeutrino = Var("?pt>15 && 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.")
932  proc.jetTable.variables.PNetRegPtRawRes = Var("?pt>15 && 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")
933 
934 
935  #Adding hf shower shape producer to the jet sequence. By default this producer is not automatically rerun at the NANOAOD step
936  #The following lines make sure it is.
937  hfJetShowerShapeforCustomNanoAOD = "hfJetShowerShapeforCustomNanoAOD"
938  setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShape.clone(jets="updatedJets", vertices="offlineSlimmedPrimaryVertices") )
939  proc.jetUserDataTask.add(getattr(proc, hfJetShowerShapeforCustomNanoAOD))
940  proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag('hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
941  proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag('hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
942  proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag('hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
943  proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag('hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
944  proc.jetTable.variables.hfsigmaEtaEta = Var("userFloat('hfsigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
945  proc.jetTable.variables.hfsigmaPhiPhi = Var("userFloat('hfsigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
946  proc.jetTable.variables.hfcentralEtaStripSize = Var("userInt('hfcentralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable) ")
947  proc.jetTable.variables.hfadjacentEtaStripsSize = Var("userInt('hfadjacentEtaStripsSize')", int, doc="eta size of the strips next to the central tower strip in HF (noise discriminating variable) ")
948 
949  #
950  # Since AK4 Puppi jet is the main AK4 jet collection for Run-3, disable
951  # b-jets/c-jets NN-based mass regression for AK4 CHS.
952  #
953  (~run2_nanoAOD_ANY).toReplaceWith(
954  proc.jetUserDataTask,
955  proc.jetUserDataTask.copyAndExclude([proc.bJetVars])
956  ).toReplaceWith(
957  proc.jetTablesTask,
958  proc.jetTablesTask.copyAndExclude([proc.bjetNN, proc.cjetNN])
959  ).toModify(proc.updatedJetsWithUserData.userFloats,
960  leadTrackPt = None,
961  leptonPtRelv0 = None,
962  leptonPtRelInvv0 = None,
963  leptonDeltaR = None,
964  vtxPt = None,
965  vtxMass = None,
966  vtx3dL = None,
967  vtx3deL = None,
968  ptD = None,
969  ).toModify(
970  proc.updatedJetsWithUserData.userInts,
971  vtxNtrk = None,
972  leptonPdgId = None
973  ).toModify(
974  proc.jetTable, externalVariables = cms.PSet()
975  ).toReplaceWith(
976  #
977  # For Run-3, don't need to save the low pt AK4 CHS jet table for MET
978  #
979  proc.jetForMETTask,
980  proc.jetForMETTask.copyAndExclude([proc.corrT1METJetTable])
981  )
982 
983  #
984  # Save MC-only jet variables in jet table
985  #
986  if runOnMC:
987  jetMCTableName = "jet{}MCTable".format(jetName)
988  setattr(proc, jetMCTableName, proc.jetMCTable.clone(
989  src = proc.jetTable.src,
990  name = proc.jetTable.name
991  )
992  )
993  getattr(proc,jetMCTableName).variables.genJetIdx = PFJETVARS.genJetIdx
994 
995  jetMCTableTaskName = "jet{}MCTablesTask".format(jetName)
996  setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
997 
998  (~run2_nanoAOD_ANY).toReplaceWith(
999  proc.nanoTableTaskFS,
1000  proc.nanoTableTaskFS.copyAndAdd(getattr(proc,jetMCTableTaskName))
1001  )
1002 
1003  return proc
1004 
def ReclusterAK4CHSJets(proc, recoJA, runOnMC)
def Var(expr, valtype, doc=None, precision=-1, lazyEval=False)
Definition: common_cff.py:17
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ ReclusterAK4GenJets()

def custom_jme_cff.ReclusterAK4GenJets (   proc,
  genJA 
)
Recluster AK4 Gen jets and replace
slimmedGenJets that is used as default
to save AK4 Gen jets in NanoAODs.

Definition at line 1164 of file custom_jme_cff.py.

References print().

Referenced by PrepJMECustomNanoAOD().

1164 def ReclusterAK4GenJets(proc, genJA):
1165  """
1166  Recluster AK4 Gen jets and replace
1167  slimmedGenJets that is used as default
1168  to save AK4 Gen jets in NanoAODs.
1169  """
1170  print("custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
1171 
1172  #
1173  # Recluster AK4 Gen jet
1174  #
1175  cfg = {
1176  "jet" : "ak4gen",
1177  "minPtFastjet" : 5.
1178  }
1179  genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1180 
1181  genJetName = genJetInfo.jetUpper
1182  genJetAlgo = genJetInfo.jetAlgo
1183  genJetSize = genJetInfo.jetSize
1184  genJetSizeNr = genJetInfo.jetSizeNr
1185  selectedGenJets = "{}{}{}".format(genJetAlgo.upper(), genJetSize, "GenJetsNoNu")
1186 
1187  #
1188  # Change jet source to the newly clustered jet collection. Set very low pt cut for jets
1189  # to be stored in the GenJet Table
1190  #
1191  proc.genJetTable.src = selectedGenJets
1192  proc.genJetTable.cut = "" # No cut specified here. Save all gen jets after clustering
1193  proc.genJetTable.doc = "AK4 Gen jets (made with visible genparticles) with pt > 5 GeV"
1194 
1195  genJetFlavourAssociationName = "genJet{}FlavourAssociation".format(genJetName)
1196  setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1197  jets = proc.genJetTable.src,
1198  jetAlgorithm = supportedJetAlgos[genJetAlgo],
1199  rParam = genJetSizeNr,
1200  )
1201  )
1202  proc.jetMCTask.add(getattr(proc, genJetFlavourAssociationName))
1203  return proc
1204 
def ReclusterAK4GenJets(proc, genJA)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ ReclusterAK4PuppiJets()

def custom_jme_cff.ReclusterAK4PuppiJets (   proc,
  recoJA,
  runOnMC 
)
Recluster AK4 Puppi jets and replace slimmedJetsPuppi
that is used as default to save AK4 Puppi jets in NanoAODs.

Definition at line 650 of file custom_jme_cff.py.

References AddPileUpJetIDVars(), AddQGLTaggerVars(), and print().

Referenced by PrepJMECustomNanoAOD().

650 def ReclusterAK4PuppiJets(proc, recoJA, runOnMC):
651  """
652  Recluster AK4 Puppi jets and replace slimmedJetsPuppi
653  that is used as default to save AK4 Puppi jets in NanoAODs.
654  """
655  print("custom_jme_cff::ReclusterAK4PuppiJets: Recluster AK4 PF Puppi jets")
656 
657  #
658  # Recluster AK4 Puppi jets
659  #
660  cfg = {
661  "jet" : "ak4pfpuppi",
662  "inputCollection" : "",
663  "genJetsCollection": "AK4GenJetsNoNu",
664  "bTagDiscriminators": bTagDiscriminatorsForAK4,
665  "minPtFastjet" : 0.,
666  }
667  recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
668 
669  jetName = recoJetInfo.jetUpper
670  patJetFinalColl = recoJetInfo.patJetFinalCollection
671 
672  #
673  # Set the jetID for UL 16 era
674  #
675  run2_jme_2016.toModify(
676  proc.tightJetPuppiId.filterParams, version = "RUN2UL16PUPPI"
677  ).toModify(
678  proc.tightJetIdLepVeto.filterParams, version = "RUN2UL16PUPPI"
679  )
680 
681  #
682  # Change the input jet source for jetCorrFactorsNano
683  # and updatedJets
684  #
685  proc.jetPuppiCorrFactorsNano.src=patJetFinalColl
686  proc.updatedJetsPuppi.jetSource=patJetFinalColl
687 
688  #
689  # Change pt cut
690  #
691  finalJetsPuppiCut = ""
692  if runOnMC:
693  finalJetsPuppiCut = "(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))"
694  else:
695  finalJetsPuppiCut = "(pt >= 8)"
696 
697  proc.finalJetsPuppi.cut = finalJetsPuppiCut
698  #
699  # Add a minimum pt cut for corrT1METJets.
700  #
701  proc.corrT1METJetPuppiTable.cut = "pt>=8 && pt<15 && abs(eta)<9.9"
702 
703  #
704  # Jet table
705  #
706  # For Run-2 eras, the main AK4 jet collection in NanoAOD is the CHS collection
707  run2_nanoAOD_ANY.toModify(
708  proc.jetTable, name = "Jet"
709  ).toModify(
710  # So need to change the table name for AK4 puppi here
711  proc.jetPuppiTable,
712  name = "JetPuppi",
713  src = cms.InputTag("finalJetsPuppi")
714  )
715 
716  #
717  # Jet table documentation
718  #
719  jetPuppiTableDoc = "AK4 PF Puppi jets with JECs applied. Jets with pt >= 8 GeV are stored."
720  if runOnMC:
721  jetPuppiTableDoc += "For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored."
722  proc.jetPuppiTable.doc = jetPuppiTableDoc
723 
724  proc.jetPuppiTable.variables.rawFactor.precision = 10
725 
726  #
727  # Add variables
728  #
729  proc.jetPuppiTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
730  proc.jetPuppiTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
731  proc.jetPuppiTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
732  proc.jetPuppiTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
733  proc.jetPuppiTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
734  proc.jetPuppiTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
735  proc.jetPuppiTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
736 
737  #
738  # Add variables for pileup jet ID studies.
739  #
740 
741  proc = AddPileUpJetIDVars(proc,
742  jetName = jetName,
743  jetSrc = "updatedJetsPuppi",
744  jetTableName = "jetPuppiTable",
745  jetTaskName = "jetPuppiTask"
746  )
747  #
748  # Add variables for quark guon likelihood tagger studies.
749  # Save variables as userFloats and userInts in each jet
750  #
751  proc = AddQGLTaggerVars(proc,
752  jetName = jetName,
753  jetSrc = "updatedJetsPuppi",
754  jetTableName = "jetPuppiTable",
755  jetTaskName = "jetPuppiTask",
756  calculateQGLVars=True
757  )
758  #
759  # Save DeepJet b-tagging and c-tagging variables
760  #
761  proc.jetPuppiTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
762  proc.jetPuppiTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
763  proc.jetPuppiTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
764  #
765  # Save DeepJet raw score for gluon and light quarks
766  #
767  proc.jetPuppiTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
768  proc.jetPuppiTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
769  proc.jetPuppiTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
770  #
771  # Save RobustParTAK4 b-tagging and c-tagging variables
772  #
773  proc.jetPuppiTable.variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
774  proc.jetPuppiTable.variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
775  proc.jetPuppiTable.variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
776  #
777  # Save UnifiedParTAK4 b-tagging and c-tagging variables
778  #
779  proc.jetPuppiTable.variables.btagUParTAK4B = UNIFIEDPARTAK4VARS.btagUParTAK4B
780  proc.jetPuppiTable.variables.btagUParTAK4CvL = UNIFIEDPARTAK4VARS.btagUParTAK4CvL
781  proc.jetPuppiTable.variables.btagUParTAK4CvB = UNIFIEDPARTAK4VARS.btagUParTAK4CvB
782  proc.jetPuppiTable.variables.btagUParTAK4TauVJet = UNIFIEDPARTAK4VARS.btagUParTAK4TauVJet
783  proc.jetPuppiTable.variables.UParTAK4RegPtRawCorr = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawCorr
784  proc.jetPuppiTable.variables.UParTAK4RegPtRawCorrNeutrino = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawCorrNeutrino
785  proc.jetPuppiTable.variables.UParTAK4RegPtRawRes = UNIFIEDPARTAK4VARS.UParTAK4RegPtRawRes
786  #
787  # For Run-2 eras, don't need to save the low pt AK4 Puppi jet table for MET
788  #
789  run2_nanoAOD_ANY.toReplaceWith(
790  proc.jetPuppiForMETTask,
791  proc.jetPuppiForMETTask.copyAndExclude([proc.corrT1METJetPuppiTable])
792  )
793 
794  #
795  # Save MC-only jet variables in jet table
796  #
797  if runOnMC:
798  jetMCTableName = "jet{}MCTable".format(jetName)
799  setattr(proc, jetMCTableName, proc.jetMCTable.clone(
800  src = proc.jetPuppiTable.src,
801  name = proc.jetPuppiTable.name
802  )
803  )
804  getattr(proc,jetMCTableName).variables.genJetIdx = PFJETVARS.genJetIdx
805 
806  jetMCTableTaskName = "jet{}MCTablesTask".format(jetName)
807  setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
808 
809  run2_nanoAOD_ANY.toReplaceWith(
810  proc.nanoTableTaskFS,
811  proc.nanoTableTaskFS.copyAndAdd( getattr(proc,jetMCTableTaskName))
812  )
813 
814  return proc
815 
def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
def ReclusterAK4PuppiJets(proc, recoJA, runOnMC)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")

◆ RemoveAllJetPtCuts()

def custom_jme_cff.RemoveAllJetPtCuts (   proc)
Remove default pt cuts for all jets set in jets_cff.py

Definition at line 1251 of file custom_jme_cff.py.

Referenced by PrepJMECustomNanoAOD().

1251 def RemoveAllJetPtCuts(proc):
1252  """
1253  Remove default pt cuts for all jets set in jets_cff.py
1254  """
1255 
1256  proc.finalJets.cut = "" # 15 -> 10
1257  proc.finalJetsPuppi.cut = "" # 15 -> 10
1258  proc.finalJetsAK8.cut = "" # 170 -> 170
1259  proc.genJetTable.cut = "" # 10 -> 8
1260  proc.genJetFlavourTable.cut = "" # 10 -> 8
1261  proc.genJetAK8Table.cut = "" # 100 -> 80
1262  proc.genJetAK8FlavourTable.cut = "" # 100 -> 80
1263 
1264  return proc
1265 
1266 #===========================================================================
1267 #
1268 # CUSTOMIZATION function
1269 #
1270 #===========================================================================
def RemoveAllJetPtCuts(proc)

◆ SaveGenJets()

def custom_jme_cff.SaveGenJets (   proc,
  genJetName,
  genJetAlgo,
  genJetSizeNr,
  genJetFinalColl,
  genJetTablePrefix,
  genJetTableDoc,
  runOnMC = False 
)
Schedule modules for a given genJet collection and save its variables into custom NanoAOD

Definition at line 1121 of file custom_jme_cff.py.

Referenced by AddNewAK8GenJetsForJEC(), and AddNewGenJets().

1121 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
1122  """
1123  Schedule modules for a given genJet collection and save its variables into custom NanoAOD
1124  """
1125 
1126  genJetTableName = "jet{}Table".format(genJetName)
1127  setattr(proc, genJetTableName, genJetTable.clone(
1128  src = genJetFinalColl,
1129  cut = "", # No cut specified here. Save all gen jets after clustering
1130  name = genJetTablePrefix,
1131  doc = genJetTableDoc,
1132  variables = GENJETVARS
1133  )
1134  )
1135 
1136  genJetFlavourAssociationName = "genJet{}FlavourAssociation".format(genJetName)
1137  setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1138  jets = getattr(proc,genJetTableName).src,
1139  jetAlgorithm = supportedJetAlgos[genJetAlgo],
1140  rParam = genJetSizeNr,
1141  )
1142  )
1143 
1144  genJetFlavourTableName = "genJet{}FlavourTable".format(genJetName)
1145  setattr(proc, genJetFlavourTableName, genJetFlavourTable.clone(
1146  name = getattr(proc,genJetTableName).name,
1147  src = getattr(proc,genJetTableName).src,
1148  cut = getattr(proc,genJetTableName).cut,
1149  jetFlavourInfos = genJetFlavourAssociationName,
1150  )
1151  )
1152 
1153  genJetTaskName = "genJet{}Task".format(genJetName)
1154  setattr(proc, genJetTaskName, cms.Task(
1155  getattr(proc,genJetTableName),
1156  getattr(proc,genJetFlavourAssociationName),
1157  getattr(proc,genJetFlavourTableName)
1158  )
1159  )
1160  proc.jetMCTask.add(getattr(proc,genJetTaskName))
1161 
1162  return proc
1163 
def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)

◆ SavePatJets()

def custom_jme_cff.SavePatJets (   proc,
  jetName,
  payload,
  patJetFinalColl,
  jetTablePrefix,
  jetTableDoc,
  doPF,
  doCalo,
  ptcut,
  doPUIDVar = False,
  doQGL = False,
  doBTag = False,
  runOnMC = False 
)
Schedule modules for a given patJet collection and save its variables into custom NanoAOD

Definition at line 506 of file custom_jme_cff.py.

References AddBTaggingScores(), AddDeepJetGluonLQuarkScores(), AddJetID(), AddParticleNetAK4Scores(), AddPileUpJetIDVars(), AddQGLTaggerVars(), AddRobustParTAK4Scores(), and AddUnifiedParTAK4Scores().

Referenced by AddNewAK8CHSJets(), AddNewAK8PuppiJetsForJEC(), and AddNewPatJets().

506  doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
507  """
508  Schedule modules for a given patJet collection and save its variables into custom NanoAOD
509  """
510 
511  #
512  # Setup jet correction factors
513  #
514  jetCorrFactors = "jetCorrFactorsNano{}".format(jetName)
515  setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
516  src = patJetFinalColl,
517  payload = payload,
518  )
519  )
520 
521  #
522  # Update jets
523  #
524  srcJets = "updatedJets{}".format(jetName)
525  setattr(proc, srcJets, updatedJets.clone(
526  jetSource = patJetFinalColl,
527  jetCorrFactorsSource = [jetCorrFactors],
528  )
529  )
530 
531  #
532  # Setup UserDataEmbedder
533  #
534  srcJetsWithUserData = "updatedJets{}WithUserData".format(jetName)
535  setattr(proc, srcJetsWithUserData, cms.EDProducer("PATJetUserDataEmbedder",
536  src = cms.InputTag(srcJets),
537  userFloats = cms.PSet(),
538  userInts = cms.PSet(),
539  )
540  )
541 
542  #
543  # Filter jets with pt cut
544  #
545  finalJetsCut = "(pt >= {ptcut:.0f})".format(ptcut=ptcut)
546  if runOnMC:
547  finalJetsCut = "(pt >= {ptcut:.0f}) || ((pt < {ptcut:.0f}) && (genJetFwdRef().backRef().isNonnull()))".format(ptcut=ptcut)
548 
549  finalJetsForTable = "finalJets{}".format(jetName)
550  setattr(proc, finalJetsForTable, finalJets.clone(
551  src = srcJetsWithUserData,
552  cut = finalJetsCut
553  )
554  )
555 
556  #
557  # Save jets in table
558  #
559  tableContent = PFJETVARS
560  if doCalo:
561  tableContent = CALOJETVARS
562 
563  jetTableCutDefault = "" #Don't apply any cuts for the table.
564 
565  jetTableDocDefault = jetTableDoc + " with JECs applied. Jets with pt >= {ptcut:.0f} GeV are stored.".format(ptcut=ptcut)
566  if runOnMC:
567  jetTableDocDefault += "For jets with pt < {ptcut:.0f} GeV, only those matched to gen jets are stored.".format(ptcut=ptcut)
568 
569  if doCalo:
570  jetTableDocDefault = jetTableDoc
571 
572  jetTableName = "jet{}Table".format(jetName)
573  setattr(proc,jetTableName, simplePATJetFlatTableProducer.clone(
574  src = cms.InputTag(finalJetsForTable),
575  cut = cms.string(jetTableCutDefault),
576  name = cms.string(jetTablePrefix),
577  doc = cms.string(jetTableDocDefault),
578  variables = cms.PSet(tableContent)
579  )
580  )
581  getattr(proc,jetTableName).variables.pt.precision=10
582  getattr(proc,jetTableName).variables.rawFactor.precision=10
583 
584  #
585  # Save MC-only jet variables in table
586  #
587  jetMCTableName = "jet{}MCTable".format(jetName)
588  setattr(proc, jetMCTableName, simplePATJetFlatTableProducer.clone(
589  src = cms.InputTag(finalJetsForTable),
590  cut = getattr(proc,jetTableName).cut,
591  name = cms.string(jetTablePrefix),
592  extension = cms.bool(True), # this is an extension table
593  variables = cms.PSet(
594  partonFlavour = PFJETVARS.partonFlavour,
595  hadronFlavour = PFJETVARS.hadronFlavour,
596  genJetIdx = PFJETVARS.genJetIdx,
597  )
598  )
599  )
600 
601  #
602  # Define the jet modules Task first
603  #
604  jetTaskName = "jet{}Task".format(jetName)
605  setattr(proc, jetTaskName, cms.Task(
606  getattr(proc,jetCorrFactors),
607  getattr(proc,srcJets),
608  getattr(proc,srcJetsWithUserData),
609  getattr(proc,finalJetsForTable)
610  )
611  )
612  proc.nanoTableTaskCommon.add(getattr(proc,jetTaskName))
613 
614  #
615  # Define the jet tables Task
616  #
617  jetTableTaskName = "jet{}TablesTask".format(jetName)
618  setattr(proc, jetTableTaskName, cms.Task(getattr(proc,jetTableName)))
619  proc.nanoTableTaskCommon.add(getattr(proc,jetTableTaskName))
620 
621  jetMCTableTaskName = "jet{}MCTablesTask".format(jetName)
622  setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
623  if runOnMC:
624  proc.nanoTableTaskFS.add(getattr(proc,jetMCTableTaskName))
625 
626  #
627  # Schedule plugins to calculate Jet ID, PileUp Jet ID input variables, and Quark-Gluon Likehood input variables.
628  #
629  if doPF:
630  proc = AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
631  if doPUIDVar:
632  proc = AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
633  if doQGL:
634  proc = AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName, calculateQGLVars=True)
635 
636  #
637  # Save b-tagging algorithm scores. Should only be done for jet collection with b-tagging
638  # calculated when reclustered or collection saved with b-tagging info in MiniAOD
639  #
640  if doBTag:
641  AddBTaggingScores(proc,jetTableName=jetTableName)
642  AddDeepJetGluonLQuarkScores(proc,jetTableName=jetTableName)
643  AddParticleNetAK4Scores(proc,jetTableName=jetTableName)
644  AddRobustParTAK4Scores(proc,jetTableName=jetTableName)
645  AddUnifiedParTAK4Scores(proc,jetTableName=jetTableName)
646 
647  return proc
648 
649 
def AddBTaggingScores(proc, jetTableName="")
def AddUnifiedParTAK4Scores(proc, jetTableName="")
def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
def AddRobustParTAK4Scores(proc, jetTableName="")
def AddDeepJetGluonLQuarkScores(proc, jetTableName="")
def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
def AddParticleNetAK4Scores(proc, jetTableName="")
def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")

Variable Documentation

◆ area

◆ bTagCSVV2

custom_jme_cff.bTagCSVV2

Definition at line 19 of file custom_jme_cff.py.

◆ btagDDX

custom_jme_cff.btagDDX

Definition at line 45 of file custom_jme_cff.py.

◆ btagDDXV2

custom_jme_cff.btagDDXV2

Definition at line 53 of file custom_jme_cff.py.

◆ btagDeepB

custom_jme_cff.btagDeepB

Definition at line 180 of file custom_jme_cff.py.

◆ bTagDeepCSV

custom_jme_cff.bTagDeepCSV

Definition at line 20 of file custom_jme_cff.py.

◆ btagDeepCvB

custom_jme_cff.btagDeepCvB

Definition at line 182 of file custom_jme_cff.py.

◆ btagDeepCvL

custom_jme_cff.btagDeepCvL

Definition at line 181 of file custom_jme_cff.py.

◆ btagDeepFlavB

custom_jme_cff.btagDeepFlavB

Definition at line 185 of file custom_jme_cff.py.

◆ btagDeepFlavC

custom_jme_cff.btagDeepFlavC

Definition at line 186 of file custom_jme_cff.py.

◆ btagDeepFlavCvB

custom_jme_cff.btagDeepFlavCvB

Definition at line 190 of file custom_jme_cff.py.

◆ btagDeepFlavCvL

custom_jme_cff.btagDeepFlavCvL

Definition at line 189 of file custom_jme_cff.py.

◆ btagDeepFlavG

custom_jme_cff.btagDeepFlavG

Definition at line 187 of file custom_jme_cff.py.

◆ btagDeepFlavQG

custom_jme_cff.btagDeepFlavQG

Definition at line 191 of file custom_jme_cff.py.

◆ btagDeepFlavUDS

custom_jme_cff.btagDeepFlavUDS

Definition at line 188 of file custom_jme_cff.py.

◆ bTagDeepJet

custom_jme_cff.bTagDeepJet

Definition at line 21 of file custom_jme_cff.py.

◆ bTagDiscriminatorsForAK4

custom_jme_cff.bTagDiscriminatorsForAK4

Definition at line 30 of file custom_jme_cff.py.

◆ btagHbb

custom_jme_cff.btagHbb

Definition at line 44 of file custom_jme_cff.py.

◆ btagRobustParTAK4B

custom_jme_cff.btagRobustParTAK4B

Definition at line 194 of file custom_jme_cff.py.

◆ btagRobustParTAK4C

custom_jme_cff.btagRobustParTAK4C

Definition at line 195 of file custom_jme_cff.py.

◆ btagRobustParTAK4CvB

custom_jme_cff.btagRobustParTAK4CvB

Definition at line 199 of file custom_jme_cff.py.

◆ btagRobustParTAK4CvL

custom_jme_cff.btagRobustParTAK4CvL

Definition at line 198 of file custom_jme_cff.py.

◆ btagRobustParTAK4G

custom_jme_cff.btagRobustParTAK4G

Definition at line 196 of file custom_jme_cff.py.

◆ btagRobustParTAK4QG

custom_jme_cff.btagRobustParTAK4QG

Definition at line 200 of file custom_jme_cff.py.

◆ btagRobustParTAK4UDS

custom_jme_cff.btagRobustParTAK4UDS

Definition at line 197 of file custom_jme_cff.py.

◆ btagUParTAK4B

custom_jme_cff.btagUParTAK4B

Definition at line 203 of file custom_jme_cff.py.

◆ btagUParTAK4CvB

custom_jme_cff.btagUParTAK4CvB

Definition at line 205 of file custom_jme_cff.py.

◆ btagUParTAK4CvL

custom_jme_cff.btagUParTAK4CvL

Definition at line 204 of file custom_jme_cff.py.

◆ btagUParTAK4QvG

custom_jme_cff.btagUParTAK4QvG

Definition at line 206 of file custom_jme_cff.py.

◆ btagUParTAK4TauVJet

custom_jme_cff.btagUParTAK4TauVJet

Definition at line 207 of file custom_jme_cff.py.

◆ BTAGVARS

custom_jme_cff.BTAGVARS

Definition at line 179 of file custom_jme_cff.py.

◆ CALOJETVARS

custom_jme_cff.CALOJETVARS

Definition at line 221 of file custom_jme_cff.py.

◆ chEmEF

custom_jme_cff.chEmEF

Definition at line 139 of file custom_jme_cff.py.

◆ chHadMultiplicity

custom_jme_cff.chHadMultiplicity

Definition at line 147 of file custom_jme_cff.py.

◆ chHEF

custom_jme_cff.chHEF

Definition at line 137 of file custom_jme_cff.py.

◆ config_genjets

custom_jme_cff.config_genjets

Definition at line 65 of file custom_jme_cff.py.

◆ config_recojets

custom_jme_cff.config_recojets

Definition at line 88 of file custom_jme_cff.py.

◆ DEEPJETVARS

custom_jme_cff.DEEPJETVARS

Definition at line 184 of file custom_jme_cff.py.

◆ doc

custom_jme_cff.doc

Definition at line 142 of file custom_jme_cff.py.

◆ elMultiplicity

custom_jme_cff.elMultiplicity

Definition at line 152 of file custom_jme_cff.py.

◆ emf

◆ float

custom_jme_cff.float

Definition at line 142 of file custom_jme_cff.py.

◆ foo

◆ genJetIdx

custom_jme_cff.genJetIdx

Definition at line 157 of file custom_jme_cff.py.

◆ GENJETVARS

custom_jme_cff.GENJETVARS

Definition at line 131 of file custom_jme_cff.py.

◆ hadronFlavour

◆ hfEmEF

custom_jme_cff.hfEmEF

Definition at line 143 of file custom_jme_cff.py.

◆ hfEMMultiplicity

custom_jme_cff.hfEMMultiplicity

Definition at line 150 of file custom_jme_cff.py.

◆ hfHadMultiplicity

custom_jme_cff.hfHadMultiplicity

Definition at line 149 of file custom_jme_cff.py.

◆ hfHEF

custom_jme_cff.hfHEF

Definition at line 142 of file custom_jme_cff.py.

◆ muEF

custom_jme_cff.muEF

Definition at line 141 of file custom_jme_cff.py.

◆ muMultiplicity

custom_jme_cff.muMultiplicity

Definition at line 151 of file custom_jme_cff.py.

◆ nanoInfo_genjets

custom_jme_cff.nanoInfo_genjets

Definition at line 75 of file custom_jme_cff.py.

◆ nanoInfo_recojets

custom_jme_cff.nanoInfo_recojets

Definition at line 114 of file custom_jme_cff.py.

◆ nConstituents

◆ neEmEF

custom_jme_cff.neEmEF

Definition at line 140 of file custom_jme_cff.py.

◆ neHadMultiplicity

custom_jme_cff.neHadMultiplicity

Definition at line 148 of file custom_jme_cff.py.

◆ neHEF

custom_jme_cff.neHEF

Definition at line 138 of file custom_jme_cff.py.

◆ nElectrons

◆ nMuons

◆ particleNetAK4_B

custom_jme_cff.particleNetAK4_B

Definition at line 213 of file custom_jme_cff.py.

◆ particleNetAK4_CvsB

custom_jme_cff.particleNetAK4_CvsB

Definition at line 215 of file custom_jme_cff.py.

◆ particleNetAK4_CvsL

custom_jme_cff.particleNetAK4_CvsL

Definition at line 214 of file custom_jme_cff.py.

◆ particleNetAK4_G

custom_jme_cff.particleNetAK4_G

Definition at line 217 of file custom_jme_cff.py.

◆ particleNetAK4_puIdDisc

custom_jme_cff.particleNetAK4_puIdDisc

Definition at line 218 of file custom_jme_cff.py.

◆ particleNetAK4_QvsG

custom_jme_cff.particleNetAK4_QvsG

Definition at line 216 of file custom_jme_cff.py.

◆ PARTICLENETAK4VARS

custom_jme_cff.PARTICLENETAK4VARS

Definition at line 212 of file custom_jme_cff.py.

◆ partonFlavour

◆ PFJETVARS

custom_jme_cff.PFJETVARS

Definition at line 134 of file custom_jme_cff.py.

◆ phoMultiplicity

custom_jme_cff.phoMultiplicity

Definition at line 153 of file custom_jme_cff.py.

◆ precision

custom_jme_cff.precision

Definition at line 142 of file custom_jme_cff.py.

◆ puId_beta

custom_jme_cff.puId_beta

Definition at line 168 of file custom_jme_cff.py.

◆ puId_dR2Mean

custom_jme_cff.puId_dR2Mean

Definition at line 160 of file custom_jme_cff.py.

◆ puId_frac01

custom_jme_cff.puId_frac01

Definition at line 163 of file custom_jme_cff.py.

◆ puId_frac02

custom_jme_cff.puId_frac02

Definition at line 164 of file custom_jme_cff.py.

◆ puId_frac03

custom_jme_cff.puId_frac03

Definition at line 165 of file custom_jme_cff.py.

◆ puId_frac04

custom_jme_cff.puId_frac04

Definition at line 166 of file custom_jme_cff.py.

◆ puId_jetR

custom_jme_cff.puId_jetR

Definition at line 170 of file custom_jme_cff.py.

◆ puId_jetRchg

custom_jme_cff.puId_jetRchg

Definition at line 171 of file custom_jme_cff.py.

◆ puId_majW

custom_jme_cff.puId_majW

Definition at line 161 of file custom_jme_cff.py.

◆ puId_minW

custom_jme_cff.puId_minW

Definition at line 162 of file custom_jme_cff.py.

◆ puId_nCharged

custom_jme_cff.puId_nCharged

Definition at line 172 of file custom_jme_cff.py.

◆ puId_ptD

custom_jme_cff.puId_ptD

Definition at line 167 of file custom_jme_cff.py.

◆ puId_pull

custom_jme_cff.puId_pull

Definition at line 169 of file custom_jme_cff.py.

◆ PUIDVARS

custom_jme_cff.PUIDVARS

Definition at line 159 of file custom_jme_cff.py.

◆ qgl_axis2

custom_jme_cff.qgl_axis2

Definition at line 175 of file custom_jme_cff.py.

◆ qgl_mult

custom_jme_cff.qgl_mult

Definition at line 177 of file custom_jme_cff.py.

◆ qgl_ptD

custom_jme_cff.qgl_ptD

Definition at line 176 of file custom_jme_cff.py.

◆ QGLVARS

custom_jme_cff.QGLVARS

Definition at line 174 of file custom_jme_cff.py.

◆ rawFactor

custom_jme_cff.rawFactor

Definition at line 135 of file custom_jme_cff.py.

◆ ROBUSTPARTAK4VARS

custom_jme_cff.ROBUSTPARTAK4VARS

Definition at line 193 of file custom_jme_cff.py.

◆ UNIFIEDPARTAK4VARS

custom_jme_cff.UNIFIEDPARTAK4VARS

Definition at line 202 of file custom_jme_cff.py.

◆ UParTAK4RegPtRawCorr

custom_jme_cff.UParTAK4RegPtRawCorr

Definition at line 208 of file custom_jme_cff.py.

◆ UParTAK4RegPtRawCorrNeutrino

custom_jme_cff.UParTAK4RegPtRawCorrNeutrino

Definition at line 209 of file custom_jme_cff.py.

◆ UParTAK4RegPtRawRes

custom_jme_cff.UParTAK4RegPtRawRes

Definition at line 210 of file custom_jme_cff.py.