ATLAS Offline Software
JetRecoCommon.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 #
4 
5 
9 
10 from JetRecConfig.JetDefinition import JetInputConstitSeq,JetInputConstit, xAODType, JetInputType, JetDefinition, formatRvalue
11 from JetRecConfig.JetGrooming import GroomingDefinition
12 from ..Menu.SignatureDicts import JetRecoKeys as recoKeys
13 # this is to define trigger specific JetModifiers (ex: ConstitFourMom_copy) :
14 from . import TriggerJetMods
15 
16 import copy
17 
18 from AthenaCommon.Logging import logging
19 log = logging.getLogger(__name__)
20 
21 
23 etaRangeAbbrev = {
24  "j":"0eta320", # default
25  "a":"0eta490",
26  "c":"0eta240",
27  "f":"320eta490"
28 }
29 
30 
32 
33 def jetChainParts(chainParts):
34  jChainParts = []
35  for p in chainParts:
36  if p['trigType'] == 'j':
37  jChainParts.append(p)
38  return jChainParts
39 
40 
42 
43 # Translate the reco dict to a string for suffixing etc
44 def jetRecoDictToString(jetRecoDict):
45  if jetRecoDict['ionopt']=='ion':
46  # Unique settings for heavy ions
47  # other values will be default
48  return jetRecoDict['recoAlg'] + "_ion"
49  strtemp = "{recoAlg}_{constitMod}{constitType}_{clusterCalib}_{jetCalib}"
50  if doTracking(jetRecoDict):
51  strtemp += "_{trkopt}"
52  return strtemp.format(**jetRecoDict)
53 
54 # Extract the jet reco dict from the chainDict
55 def extractRecoDict(chainParts):
56  # interpret the reco configuration only
57  # eventually should just be a subdict in the chainDict
58  recoDict = {}
59  for p in chainParts:
60  for k in recoKeys:
61  # Look for our key in the chain part
62  if k in p.keys():
63  # found the key, check for consistency with other chain parts of this chain
64  if k in recoDict.keys():
65  if p[k] != recoDict[k]:
66  raise RuntimeError('Inconsistent reco setting for %s' % k)
67  # copy this entry to the reco dictionary
68  recoDict[k] = p[k]
69 
70  # set proper jetCalib key in default case
71  if recoDict['jetCalib'] == "default":
72  recoDict['jetCalib'] = getJetCalibDefaultString(recoDict['recoAlg'],recoDict['constitType'],recoDict['trkopt'])
73 
74  recoDict['jetDefStr'] = jetRecoDictToString(recoDict)
75 
76  return recoDict
77 
78 # Inverse of the above, essentially only for CF tests
79 def jetRecoDictFromString(jet_def_string):
80 
81  # Translate the definition string into an approximation
82  # of the "recoParts" in the jet chainParts.
83  jetRecoDict = {}
84  from TriggerMenuMT.HLT.Menu.SignatureDicts import JetChainParts,JetChainParts_Default
85  for key in recoKeys:
86  keyFound = False
87  tmp_key = key
88  for part in jet_def_string.split('_'):
89  if part in JetChainParts[tmp_key]:
90  jetRecoDict[key] = part
91  keyFound = True
92  if not keyFound:
93  jetRecoDict[key] = JetChainParts_Default[key]
94 
95  # set proper jetCalib key in default case
96  if jetRecoDict['jetCalib'] == "default":
97  jetRecoDict['jetCalib'] = getJetCalibDefaultString(jetRecoDict['recoAlg'],jetRecoDict['constitType'],jetRecoDict['trkopt'])
98 
99  jetRecoDict['jetDefStr'] = jetRecoDictToString(jetRecoDict)
100 
101  return jetRecoDict
102 
103 # Assist with grooming and reclustering workflows, we need to
104 # ensure that the name is updated consistently
105 def cloneAndUpdateJetRecoDict(jetRecoDict,**kwargs):
106  newJetRecoDict = copy.copy(jetRecoDict)
107  newJetRecoDict.update(dict(**kwargs))
108  newJetRecoDict["jetDefStr"] = jetRecoDictToString(newJetRecoDict)
109  return newJetRecoDict
110 
111 
113 
114 # Condense the jet definition down into a string representation
115 # compatible with the jetDefStr in jetRecoDict
116 # Also useful as a consistency check
117 def jetDefToString(jetDef):
118  _jetDef = jetDef
119  poststr = ''
120  if isinstance(jetDef,GroomingDefinition):
121  _jetDef = jetDef.ungroomeddef
122  # We don't support multiple configurations of a given grooming
123  if jetDef.groomSpecAsStr().startswith('Trimmed'):
124  poststr = 't'
125  elif jetDef.groomSpecAsStr().startswith('SoftDrop'):
126  poststr = 'sd'
127  else:
128  raise ValueError('Unsupported grooming type for HLT')
129  elif jetDef.inputdef.jetinputtype == JetInputType.Jet:
130  # Reclustered
131  poststr = 'r'
132 
133  algstr = f'{str.lower(_jetDef.algorithm[0])}{formatRvalue(_jetDef._radius)}{poststr}'
134  constitdef = _jetDef.inputdef
135  if constitdef.label == 'HI':
136  constitstr = 'ion'
137  else:
138  clusterCalib = 'lcw' if 'LC' in constitdef.label else 'em'
139  constittype = 'pf' if 'PFlow' in constitdef.label else 'tc'
140  constitmods = ''
141  if isinstance(constitdef,JetInputConstitSeq):
142  ignore = ['EM','LC','CHS','CorrectPFO']
143  for mod in constitdef.modifiers:
144  if mod not in ignore:
145  constitmods += str.lower(mod)
146  constitstr = f'{constitmods}{constittype}_{clusterCalib}'
147  jetdefstr = f'{algstr}_{constitstr}{jetDef.suffix}'
148 
149  return jetdefstr
150 
151 def jetCalibFromJetDef(jetDef):
152  jetCalib = jetDef.suffix[1:]
153  if jetCalib.endswith('_ftf'):
154  jetCalib = jetCalib[:-4]
155  return jetCalib
156 
157 
159 
160 # decodes SignatureDict field recoAlg
161 # returns 3 values:
162 # - jet reco alg: 'a' (antikT)
163 # - jet radius: 4, 10,..
164 # - extra reco details: e.g. 'r' (reclustered), 't' (trimmed), 'sd' (softdrop)
165 def interpretRecoAlg(recoAlg):
166  import re
167  jetalg, jetradius, jetextra = re.split(r'(\d+)',recoAlg)
168  return jetalg, int(jetradius), jetextra
169 
170 # Check if jet definition needs tracks or if it should be agnostic of the tracking choice
171 def jetDefNeedsTracks(jetRecoDict):
172  # For tc_a10, tc_a10t and tc_a10sd, we will be agnostic of tracking (no suffix will be added)
173  # For everything else (constitType=pf or dependence on small-R jets) we need to be aware of what tracking was used
174  return jetRecoDict["trkopt"]!="notrk" and (jetRecoDict["constitType"]!="tc" or jetRecoDict["recoAlg"] in ['a2','a4','a10'])
175 
176 # Check if track reconstruction is enabled
177 def doTracking(jetRecoDict):
178  return jetRecoDict["trkopt"]!="notrk"
179 # Check if full scan track reconstruction is enabled
180 def doFSTracking(jetRecoDict):
181  return jetRecoDict["trkopt"]=="ftf"
182 
183 # Check if constituent type is pflow. Concurrently check that the tracking option is valid.
184 def isPFlow(jetRecoDict):
185  isPFlow = jetRecoDict["constitType"] == "pf"
186  if isPFlow and not doFSTracking(jetRecoDict):
187  raise ValueError("This is a PFlow chain but an incompatible tracking option is given!")
188  return isPFlow
189 
190 # return the min jet pT in MeV for the configured recoAlg
191 def getFilterCut(recoAlg):
192  return {"a2":4000, "a4":4000, "a10":50000, "a10r": 50000, "a10t":50000, "a10sd":50000}[recoAlg]
193 
195 
196  flags.addFlag("Jet.Context.notrk", lambda prevFlags : prevFlags.Jet.Context.default )
197 
198 
199  def _buildContextDic(prevFlags, trkopt):
200  # *****************
201  idFlags = prevFlags.Trigger.InDetTracking
202  (tracksname,verticesname) = {
203  'ftf': (idFlags.fullScan.tracks_FTF,
204  idFlags.fullScan.vertex),
205  'roiftf': (idFlags.jetSuper.tracks_FTF,
206  idFlags.jetSuper.vertex),
207  }[trkopt]
208 
209  tvaname = f"JetTrackVtxAssoc_{trkopt}"
210  label = f"GhostTrack_{trkopt}"
211  ghosttracksname = f"PseudoJet{label}"
212 
213  contextDic = prevFlags.Jet.Context.default.clone(
214  Tracks = tracksname,
215  Vertices = verticesname,
216  TVA = tvaname,
217  GhostTracks = ghosttracksname,
218  GhostTracksLabel = label ,
219  JetTracks = f'JetSelectedTracks_{trkopt}',
220  )
221  # also declare some JetInputExternal corresponding to trkopt
222  # This ensures the JetRecConfig helpers know about them.
223  # We declare simplistic JetInputExternal, without algoBuilder, because the rest of the trigger config is in charge of producing these containers.
224  from JetRecConfig.StandardJetConstits import stdInputExtDic
225  if tracksname not in stdInputExtDic:
226  from JetRecConfig.JetDefinition import JetInputExternal
227  from xAODBase.xAODType import xAODType
228  stdInputExtDic[tracksname] = JetInputExternal( tracksname, xAODType.TrackParticle )
229  stdInputExtDic[verticesname] = JetInputExternal( verticesname, xAODType.Vertex )
230 
231 
232  return contextDic
233 
234 
235 
236  flags.addFlag("Jet.Context.ftf", lambda prevFlags : _buildContextDic(prevFlags,"ftf") )
237  flags.addFlag("Jet.Context.roiftf", lambda prevFlags : _buildContextDic(prevFlags,"roiftf") )
238 
239 
240 
241 
242 
244 
246  prefix = "HLT_"
247  return prefix
248 
249 def getClustersKey(recoDict):
250  if recoDict['ionopt'] == 'ion':
251  return "HLT_HICaloClustersFS"
252  clusterCalib = recoDict["clusterCalib"]
253  if clusterCalib == "em":
254  from ..CommonSequences.FullScanDefs import em_clusters
255  return em_clusters
256  elif clusterCalib == "lcw":
257  from ..CommonSequences.FullScanDefs import lc_clusters
258  return lc_clusters
259  else:
260  raise ValueError("Invalid value for calib: '{}'".format(clusterCalib))
261 
262 def getJetCalibDefaultString(recoAlg, constitType, trkopt):
263  if recoAlg == 'a4' or recoAlg == 'a2':
264  if constitType == 'tc':
265  return 'subresjesgscIS' if trkopt == 'ftf' else 'subjesIS'
266  elif constitType == 'pf':
267  return 'subresjesgscIS'
268  elif recoAlg == 'a10':
269  return 'subjes'
270  elif recoAlg == 'a10t':
271  return 'jes'
272  elif recoAlg == 'a10sd':
273  return 'jes'
274  elif recoAlg == 'a10r':
275  return 'subjesIS' # calibration for the small-R jets used to reconstruct the reclustered jets
276  else:
277  raise RuntimeError(f'No default calibration is defined for {recoAlg}, {constitType}, {trkopt}')
278 
279 cleaningDict = {
280  'CLEANlb': 'LooseBad',
281  'CLEANllp': 'LooseBadLLP',
282 }
283 # returns cleaning string based on prefilter list
284 def getPrefilterCleaningString(prefilters_list):
285  found_cleanings= [ci for ck, ci in cleaningDict.items() if ck in prefilters_list]
286  if len(found_cleanings) <= 1: # Only one supported cleaning decoration at the moment
287  return 'noCleaning' if len(found_cleanings) == 0 else found_cleanings[0]
288  else:
289  raise RuntimeError(
290  'Multijet jet cleanings found in jet trigger reco dictionary {}. Multiple jet cleanings are currently unsupported'.format(found_cleanings))
291 
292 
293 
295 
296 # Translate calib specification into something understood by
297 # the calibration config helper
298 def getCalibMods(flags,jetRecoDict,rhoKey="auto"):
299 
300  # Minimum modifier set for calibration w/o track GSC
301  # Should eventually build in more mods, depend on track info etc
302  jetalg = jetRecoDict["recoAlg"]
303  if jetRecoDict["jetCalib"] == "nojcalib" or jetalg=="a10r":
304  calibMods = []
305  else:
306  dotracking = doTracking(jetRecoDict)
307  if not dotracking and "gsc" in jetRecoDict["jetCalib"]:
308  raise ValueError("Track GSC requested but no track source provided!")
309 
310  if not dotracking and "subres" in jetRecoDict["jetCalib"]:
311  raise ValueError("Pileup residual calibration requested but no track source provided!")
312 
313  if jetRecoDict["constitType"] == "tc":
314  calibKey = flags.Trigger.Jet.emtopoCalibKey
315  calibContext,calibSeq = {
316  ("a4","subjes"): (calibKey,"JetArea_EtaJES_GSC"), # Calo GSC only ( + insitu in data)
317  ("a4","subjesIS"): (calibKey,"JetArea_EtaJES_GSC"), # Calo GSC only (no insitu)
318  ("a4","subjesgscIS"): (calibKey,"JetArea_EtaJES_GSC"), # Calo+Trk GSC ( + insitu in data)
319  ("a4","subresjesgscIS"): (calibKey,"JetArea_Residual_EtaJES_GSC"), # pu residual + calo+trk GSC ( + insitu in data)
320  ("a4","subjesgsc"): (calibKey,"JetArea_EtaJES_GSC"), # Calo+Trk GSC (no insitu)
321  ("a4","subresjesgsc"): (calibKey,"JetArea_Residual_EtaJES_GSC"), # pu residual + calo+trk GSC (no insitu)
322  ("a10","subjes"): ("TrigUngroomed","JetArea_EtaJES"),
323  ("a10t","jes"): ("TrigTrimmed","EtaJES_JMS"),
324  }[(jetRecoDict["recoAlg"],jetRecoDict["jetCalib"])]
325 
326  pvname = ""
327  gscDepth = "EM3"
328  if "gsc" in jetRecoDict["jetCalib"]:
329  gscDepth = "trackWIDTH"
330  pvname = flags.Trigger.InDetTracking.fullScan.vertex_jet
331 
332  elif jetRecoDict["constitType"] == "pf":
333  gscDepth = "auto"
334  if 'sd' in jetRecoDict["recoAlg"]:
335  calibContext = flags.Trigger.Jet.pflowLJCalibKey # large-R pflow
336  calibSeq = "EtaJES_JMS"
337  else:
338  calibKey = flags.Trigger.Jet.pflowCalibKey # small-R pflow
339  gscDepth = "trackWIDTH"
340  if "gsc" not in jetRecoDict["jetCalib"]:
341  gscDepth = "EM3" # calo-only GSC
342  calibContext,calibSeq = {
343  ("a4","jes"): (calibKey,"EtaJES_GSC"), # w/o jet area sub, w/o pu residual + calo GSC only (no insitu)
344  ("a4","subjesgsc"): (calibKey,"JetArea_EtaJES_GSC"), # w/o pu residual + calo+trk GSC
345  ("a4","subresjesgsc"): (calibKey,"JetArea_Residual_EtaJES_GSC"), # pu residual + calo+trk GSC
346  ("a4","subjesgscIS"): (calibKey,"JetArea_EtaJES_GSC"), # w/o pu residual + calo+trk GSC
347  ("a4","subresjesgscIS"): (calibKey,"JetArea_Residual_EtaJES_GSC"), # pu residual + calo+trk GSC
348  }[(jetRecoDict["recoAlg"],jetRecoDict["jetCalib"])]
349  pvname = flags.Trigger.InDetTracking.fullScan.vertex_jet
350  if jetRecoDict["jetCalib"].endswith("IS") and (not flags.Input.isMC):
351  calibSeq += "_Insitu"
352 
353  dataSource = "mc" if flags.Input.isMC else "data"
354  calibSpec = ":".join( [calibContext, dataSource, calibSeq, rhoKey, pvname, gscDepth] )
355 
356  if jetalg=="a4":
357  calibMods = ["EMScaleMom",
358  "ConstitFourMom_copy",
359  "CaloEnergies", # Needed for GSC
360  "Calib:"+calibSpec]
361  else:
362  calibMods = ["ConstitFourMom_copy",
363  "Calib:"+calibSpec]
364 
365  return calibMods
366 
367 # Make generating the list a bit more comprehensible
368 # TODO document where and how this is used.
369 def getModSpec(modname,modspec=''):
370  return (TriggerJetMods.stdJetModifiers[modname],str(modspec))
371 
372 # Get list of jet attributes to be calculated for jet
373 def getDecorList(jetDef):
374  # Basic jet info provided by the jet builder
375  decorlist = []
376 
377  # return empty list for non-calibrated jets
378  if jetCalibFromJetDef(jetDef) == 'nojcalib': return decorlist
379 
380  decorlist += [ 'AlgorithmType', 'InputType',
381  'ActiveArea', 'ActiveArea4vec_eta', 'ActiveArea4vec_m',
382  'ActiveArea4vec_phi', 'ActiveArea4vec_pt',
383  'EMFrac','HECFrac','EnergyPerSampling','N90Constituents','constit','Tile0Frac']
384 
385  if jetDef.context == 'ftf':
386  decorlist += ["GhostTrack_ftf",
387  "NumTrkPt500","NumTrkPt1000",
388  "SumPtTrkPt500","SumPtTrkPt1000",
389  "TrackWidthPt1000",
390  "JVFCorr", "JvtRpt", "Jvt"]
391  if 'PFlow' in jetDef.basename:
392  decorlist += ["SumPtChargedPFOPt500"]
393  return decorlist
394 
395 
396 
398 
399 # Define the jet constituents to be interpreted by JetRecConfig
400 # When actually specifying the reco, clustersKey should be
401 # set, but default to None to allow certain checks, in particular
402 # grooming configuration
403 def defineJetConstit(jetRecoDict,clustersKey=None,pfoPrefix=None):
404  constitMods = []
405  # Get the details of the constituent definition:
406  # type, mods and the input container name
407 
408  if jetRecoDict["constitType"] == "pf":
409  if pfoPrefix is None:
410  raise RuntimeError("JetRecoCommon: Cannot define PF jets without pfo prefix!")
411 
412  constitMods = ["CorrectPFO"]
413  # apply constituent pileup suppression
414  if "vs" in jetRecoDict["constitMod"]:
415  constitMods.append("Vor")
416  if "cs" in jetRecoDict["constitMod"]:
417  constitMods.append("CS")
418  if "sk" in jetRecoDict["constitMod"]:
419  constitMods.append("SK")
420  constitMods += ["CHS"]
421 
422  inputPFO = pfoPrefix+"ParticleFlowObjects"
423  modstring = ''.join(constitMods[1:-1])
424  if modstring == '':
425  modstring='CHS'
426 
427  inputxAODType = xAODType.FlowElement
428  if not constitMods:
429  jetConstit = JetInputConstitSeq( "HLT_EMPFlow", inputxAODType, constitMods, inputname=inputPFO, outputname=pfoPrefix+"CHSParticleFlowObjects", label="EMPFlow", jetinputtype="EMPFlow")
430  else:
431  jetConstit = JetInputConstitSeq( "HLT_EMPFlow"+modstring, inputxAODType, constitMods, inputname=inputPFO, outputname=pfoPrefix+modstring+"ParticleFlowObjects",label='EMPFlow'+(modstring if modstring!='CHS' else ''), jetinputtype="EMPFlow" )
432 
433 
434  if jetRecoDict["constitType"] == "tc":
435  # apply constituent pileup suppression
436  if "vs" in jetRecoDict["constitMod"]:
437  constitMods.append("Vor")
438  if "cs" in jetRecoDict["constitMod"]:
439  constitMods.append("CS")
440  if "sk" in jetRecoDict["constitMod"]:
441  constitMods.append("SK")
442  # build a modifier identifier :
443  modstring = ''.join(constitMods)
444  # prepend the cluster calib state :
445  if jetRecoDict["clusterCalib"] == "em":
446  constitMods = ["EM"] + constitMods
447  elif jetRecoDict["clusterCalib"] == "lcw":
448  constitMods = ["LC"] + constitMods
449  else:
450  log.error("cluster calib state not recognised : ",jetRecoDict["clusterCalib"])
451  if not clustersKey:
452  raise ValueError("cluster key must be provided for topocluster jets.")
453 
454 
455  if not constitMods:
456  jetConstit = JetInputConstitSeq( "HLT_EMTopo",xAODType.CaloCluster, constitMods, inputname=clustersKey, outputname=clustersKey+modstring,label='EMTopo'+modstring)
457  else:
458  jetConstit = JetInputConstitSeq( "HLT_"+constitMods[0]+"Topo",xAODType.CaloCluster, constitMods, inputname=clustersKey, outputname=clustersKey+modstring,label=constitMods[0]+'Topo'+modstring)
459 
460  # declare our new JetInputConstitSeq in the standard dictionary
461  from JetRecConfig.StandardJetConstits import stdConstitDic
462  stdConstitDic.setdefault(jetConstit.name, jetConstit)
463 
464  return jetConstit
465 
466 
467 # Arbitrary min pt for fastjet, set to be low enough for MHT(?)
468 # Could/should adjust higher for large-R
469 def defineJets(flags,jetRecoDict,clustersKey=None,prefix='',suffix='',pfoPrefix=None):
470  minpt = {
471  "default": {
472  4: 7000,
473  10: 50000 },
474  "lowpt": { # used for HI UPC jet reco, ATR-28158
475  4: 4000,
476  10: 50000 }
477  }
478 
479  filter_type = "lowpt" if flags.Trigger.Jet.LowPtFilter else "default"
480  jetalg, jetradius, jetextra = interpretRecoAlg(jetRecoDict["recoAlg"])
481  actualradius = float(jetradius)/10
482  jetConstit = defineJetConstit(jetRecoDict,clustersKey,pfoPrefix)
483 
484  suffix="_"+jetRecoDict["jetCalib"]+'_'*(suffix.strip()!='')+suffix
485  if jetDefNeedsTracks(jetRecoDict):
486  suffix += "_"+jetRecoDict["trkopt"]
487 
488  jetDef = JetDefinition( "AntiKt", actualradius, jetConstit, ptmin=minpt[filter_type][jetradius], prefix=prefix, suffix=suffix, context=jetRecoDict["trkopt"])
489  return jetDef
490 
491 def defineReclusteredJets(jetRecoDict,smallRjets,inputlabel,prefix,suffix):
492  rcJetConstit = JetInputConstit("RCJet", xAODType.Jet, smallRjets, label=inputlabel+'RC', lock=True)
493  rcJetDef = JetDefinition( "AntiKt", 1.0, rcJetConstit, prefix=prefix, suffix=suffix, context=jetRecoDict['trkopt'])
494  return rcJetDef
495 
496 def defineGroomedJets(jetRecoDict,ungroomedDef):#,ungroomedJetsName):
497  from JetRecConfig.JetGrooming import JetTrimming, JetSoftDrop
498  groomAlg = jetRecoDict["recoAlg"][3:] if 'sd' in jetRecoDict["recoAlg"] else jetRecoDict["recoAlg"][-1]
499  suffix = "_"+ jetRecoDict["jetCalib"]
500  if jetDefNeedsTracks(jetRecoDict):
501  suffix += "_"+jetRecoDict["trkopt"]
502 
503  groomDef = {
504  "sd":JetSoftDrop(ungroomedDef,ZCut=0.1,Beta=1.0,suffix=suffix,context=jetRecoDict['trkopt']),
505  "t" :JetTrimming(ungroomedDef,RClus=0.2,PtFrac=0.04,suffix=suffix,context=jetRecoDict['trkopt']),
506  }[groomAlg]
507  return groomDef
508 
509 #Jet Definition for VR track jets
510 def defineVRTrackJets(Rmax, Rmin, VRMassScale, Ptmin, prefix, suffix):
511  jetconstit = JetInputConstit("PV0Track", xAODType.TrackParticle, "PV0JetSelectedTracks_ftf")
512  VRTrackJetDef = JetDefinition("AntiKt", Rmax, jetconstit, ptmin=Ptmin, VRMinR=Rmin, VRMassSc=VRMassScale, prefix=prefix, suffix=suffix, lock=True)
513  return VRTrackJetDef
514 
515 
516 def defineHIJets(jetRecoDict,clustersKey=None,prefix='',suffix=''):
517  minpt = {2:7000, 3:7000, 4:7000, 6:7000, 10:50000}
518  jetalg, jetradius, jetextra = interpretRecoAlg(jetRecoDict["recoAlg"])
519  actualradius = float(jetradius)/10
520  constitMods = [] # modifiers
521  jetConstit = []
522  jetConstit = JetInputConstitSeq( "HLT_HIConstit",xAODType.CaloCluster, constitMods, inputname=clustersKey, outputname=clustersKey,label='HI')
523  from JetRecConfig.StandardJetConstits import stdConstitDic
524  stdConstitDic.setdefault(jetConstit.name, jetConstit)
525 
526  jetDef = JetDefinition( "AntiKt", actualradius, jetConstit, ptmin=minpt[jetradius], prefix=prefix, suffix=suffix)
527  return jetDef
vtune_athena.format
format
Definition: vtune_athena.py:14
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
python.HLT.Jet.JetRecoCommon.defineGroomedJets
def defineGroomedJets(jetRecoDict, ungroomedDef)
Definition: JetRecoCommon.py:496
python.HLT.Jet.JetRecoCommon.getDecorList
def getDecorList(jetDef)
Definition: JetRecoCommon.py:373
python.HLT.Jet.JetRecoCommon.jetCalibFromJetDef
def jetCalibFromJetDef(jetDef)
Definition: JetRecoCommon.py:151
python.HLT.Jet.JetRecoCommon.doFSTracking
def doFSTracking(jetRecoDict)
Definition: JetRecoCommon.py:180
python.HLT.Jet.JetRecoCommon.getClustersKey
def getClustersKey(recoDict)
Definition: JetRecoCommon.py:249
python.HLT.Jet.JetRecoCommon.getCalibMods
def getCalibMods(flags, jetRecoDict, rhoKey="auto")
— Modifier and decoration list getters —
Definition: JetRecoCommon.py:298
python.HLT.Jet.JetRecoCommon.cloneAndUpdateJetRecoDict
def cloneAndUpdateJetRecoDict(jetRecoDict, **kwargs)
Definition: JetRecoCommon.py:105
python.HLT.Jet.JetRecoCommon.defineJetConstit
def defineJetConstit(jetRecoDict, clustersKey=None, pfoPrefix=None)
— Jet Object getters —
Definition: JetRecoCommon.py:403
python.HLT.Jet.JetRecoCommon.getModSpec
def getModSpec(modname, modspec='')
Definition: JetRecoCommon.py:369
python.HLT.Jet.JetRecoCommon.extractRecoDict
def extractRecoDict(chainParts)
Definition: JetRecoCommon.py:55
python.HLT.Jet.JetRecoCommon.getPrefilterCleaningString
def getPrefilterCleaningString(prefilters_list)
Definition: JetRecoCommon.py:284
python.HLT.Jet.JetRecoCommon.jetDefToString
def jetDefToString(jetDef)
— Interpreting JetDefinition —
Definition: JetRecoCommon.py:117
python.HLT.Jet.JetRecoCommon.defineReclusteredJets
def defineReclusteredJets(jetRecoDict, smallRjets, inputlabel, prefix, suffix)
Definition: JetRecoCommon.py:491
python.HLT.Jet.JetRecoCommon.defineVRTrackJets
def defineVRTrackJets(Rmax, Rmin, VRMassScale, Ptmin, prefix, suffix)
Definition: JetRecoCommon.py:510
python.HLT.Jet.JetRecoCommon.getJetCalibDefaultString
def getJetCalibDefaultString(recoAlg, constitType, trkopt)
Definition: JetRecoCommon.py:262
JetSoftDrop
Definition: JetSoftDrop.h:28
python.HLT.Jet.JetRecoCommon.addJetContextFlags
def addJetContextFlags(flags)
Definition: JetRecoCommon.py:194
python.HLT.Jet.JetRecoCommon.jetDefNeedsTracks
def jetDefNeedsTracks(jetRecoDict)
Definition: JetRecoCommon.py:171
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.HLT.Jet.JetRecoCommon.jetRecoDictToString
def jetRecoDictToString(jetRecoDict)
— General reco dict handling —
Definition: JetRecoCommon.py:44
python.HLT.Jet.JetRecoCommon.getHLTPrefix
def getHLTPrefix()
— String getters —
Definition: JetRecoCommon.py:245
python.HLT.Jet.JetRecoCommon.jetRecoDictFromString
def jetRecoDictFromString(jet_def_string)
Definition: JetRecoCommon.py:79
python.HLT.Jet.JetRecoCommon.jetChainParts
def jetChainParts(chainParts)
— Extracting jet chain parts —
Definition: JetRecoCommon.py:33
python.HLT.Jet.JetRecoCommon.isPFlow
def isPFlow(jetRecoDict)
Definition: JetRecoCommon.py:184
python.HLT.Jet.JetRecoCommon.defineHIJets
def defineHIJets(jetRecoDict, clustersKey=None, prefix='', suffix='')
Definition: JetRecoCommon.py:516
str
Definition: BTagTrackIpAccessor.cxx:11
python.HLT.Jet.JetRecoCommon.interpretRecoAlg
def interpretRecoAlg(recoAlg)
— General helpers —
Definition: JetRecoCommon.py:165
python.HLT.Jet.JetRecoCommon.defineJets
def defineJets(flags, jetRecoDict, clustersKey=None, prefix='', suffix='', pfoPrefix=None)
Definition: JetRecoCommon.py:469
python.HLT.Jet.JetRecoCommon.getFilterCut
def getFilterCut(recoAlg)
Definition: JetRecoCommon.py:191
readCCLHist.float
float
Definition: readCCLHist.py:83
python.HLT.Jet.JetRecoCommon.doTracking
def doTracking(jetRecoDict)
Definition: JetRecoCommon.py:177