3This module defines the standard JetModifier tools used in jet reco
5Definitions are grouped in a dictionary of tool configurations using the helpers defined
7This dict maps a modifier alias to the JetModifier config object
8that in turn will be responsible for generating a configured tool.
10The JetModifier config class is defined in JetDefinition.py
12 Args to the JetModifier constructor are:
13 1. Tool Type (ignored if the helper is a custom one)
14 2. Tool Name (ignored if the helper is a custom one)
15 3. createfn : helper function which build the actual tool. If none, we just instantiate the tool type.
16 4. prereqs : Prerequisites (default to []). Can also be a function which returns a list
17 X. all other keyword arguments are directly interpreted as Property of the tool.
18 for ex, passing 'PtMin=10.' will configure the tool as in 'tool.PtMin = 10'
19 we can pass function as the value :
20 'JetContainerName=nameFunc' will configure as in 'tool.JetContainerName=nameFunc(jetdef, modspec)'
22 --> should this be by default? prefer to avoid ignored args
24from .JetDefinition
import JetModifier
25from .Utilities
import ldict
26from .StandardJetConstits
import inputsFromContext
28from JetRecConfig.JetRecCommon
import isMC
37 return jetdef.fullname()
41 """Returns the exact constituent container name used to build jetdef"""
42 constitdef = jetdef.inputdef
43 containername = constitdef.containername(jetdef).
split(
':')[-1]
if callable(constitdef.containername)
else constitdef.containername
49stdJetModifiers.update(
54 PtMin =
lambda jdef,modspec: int(modspec)
56 Filter_ifnotESD =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
57 PtMin =
lambda _,modspec: 1,
60 Filter_calibThreshold =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
61 PtMin =
lambda jetdef,modspec: 1
if not jetdef._cflags.Jet.useCalibJetThreshold
else int(modspec),
73 from JetCalibTools
import JetCalibToolsConfig
74 stdJetModifiers.update(
75 Calib =
JetModifier(
"JetCalibrationTool",
"jetcalib_jetcoll_calibseq",
76 createfn=JetCalibToolsConfig.getJetCalibToolFromString,
80 from JetCalibTools
import JetResponseToolConfig
81 stdJetModifiers.update(
85 JetContainer=_jetname,
86 createfn=JetResponseToolConfig.getJetResponseTool,
87 prereqs=
lambda modspec, jetdef: (f
'mod:JetTaggingTruthLabel:{modspec}',
'mod:jetiso'),
91except ModuleNotFoundError:
92 from AthenaCommon
import Logging
93 jetlog = Logging.logging.getLogger(
'JetStandardMods')
94 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
98 from JetCalibTools
import JetCalibToolsCfg
99 stdJetModifiers.update(
100 CalibNew =
JetModifier(
"JetCalibTool",
"jetcalib_jetcoll_calibseq",
101 createfn=JetCalibToolsCfg.defineJetCalibTool,
104except ModuleNotFoundError:
105 from AthenaCommon
import Logging
106 jetlog = Logging.logging.getLogger(
'JetStandardMods')
107 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
119 from JetMomentTools
import JetMomentToolsConfig
120 from EventShapeTools.EventDensityConfig
import getEventShapeName
121 stdJetModifiers.update(
124 ClusterMoments =
JetModifier(
"JetClusterMomentsTool",
"clsmoms", JetContainer = _jetname),
125 ECPSFrac =
JetModifier(
"JetECPSFractionTool",
"ecpsfrac", JetContainer = _jetname),
126 Width =
JetModifier(
"JetWidthTool",
"width", JetContainer = _jetname),
130 prereqs=[
"mod:EMScaleMom"],
131 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
134 CaloEnergiesLargeR =
JetModifier(
"JetCaloEnergies",
"jetenslargeR",
135 prereqs=[
"mod:EMScaleMom"],
136 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"EM3Frac",
"Tile0Frac",
"EffNClusts"], JetContainer = _jetname,
137 calcClusterBasedVars =
True,
142 prereqs=[
"mod:EMScaleMom"],
143 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
144 calcClusterBasedVars =
True),
148 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
152 ThresholdCuts = [90],
153 Calculations = [
"LArQuality",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
156 Calculations = [
"N90Constituents"],JetContainer = _jetname),
158 ConstitFourMom =
JetModifier(
"JetConstitFourMomTool",
"constitfourmom_basename",
159 createfn=JetMomentToolsConfig.getConstitFourMomTool,),
160 EMScaleMom =
JetModifier(
"JetEMScaleMomTool",
"emscalemom_basename",
161 createfn=JetMomentToolsConfig.getEMScaleMomTool,
162 JetContainer = _jetname),
165 createfn=JetMomentToolsConfig.getJVFTool,
166 prereqs = [inputsFromContext(
"TVA"),
"mod:TrackMoments", inputsFromContext(
"Vertices")],
167 JetContainer = _jetname),
169 createfn=JetMomentToolsConfig.getJVTTool,
170 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
172 createfn=JetMomentToolsConfig.getNNJvtTool,
173 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
175 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
176 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
177 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
179 createfn=JetMomentToolsConfig.getTrackMomentsTool,
180 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
182 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
183 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
184 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
186 prereqs = [
"ghost:Track" ]),
189 createfn=JetMomentToolsConfig.getQGTaggingTool,
190 prereqs =
lambda _,jetdef :
191 [inputsFromContext(
"TVA"),
"mod:TrackMoments"] +
192 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
193 JetContainer = _jetname),
196 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
197 prereqs = [inputsFromContext(
"TVA"),inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
198 JetContainer = _jetname),
201 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
202 prereqs = [inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
203 JetContainer = _jetname),
206 JetContainer = _jetname,
210 JetContainer = _jetname,
213 JetPtAssociation =
JetModifier(
"JetPtAssociationTool",
"jetPtAssociation",
215 createfn=JetMomentToolsConfig.getJetPtAssociationTool,
216 prereqs=[
"ghost:Truth",
"input:AntiKt4TruthJets"],
217 JetContainer = _jetname
221 JetContainer = _jetname,
227 JetContainer=_jetname,
228 InputConstitContainer = _constitContainername,
229 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
230 RhoKey =
lambda jetdef, specs : getEventShapeName(jetdef.inputdef),
231 prereqs= [
"input:EventDensity"],
235 JetContainer=_jetname,
236 InputConstitContainer = _constitContainername,
237 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
242 JetContainer=_jetname,
243 InputConstitContainer = _constitContainername,
244 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
245 RhoKey =
lambda jetdef, specs : getEventShapeName(jetdef.inputdef,prefix=
'HLT_'),
246 prereqs= [
"input:HLT_EventDensity"],
250except ModuleNotFoundError:
251 from AthenaCommon
import Logging
252 jetlog = Logging.logging.getLogger(
'JetStandardMods')
253 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
258from ParticleJetTools
import ParticleJetToolsConfig
259stdJetModifiers.update(
261 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
262 prereqs=[
"ghost:Partons"]
266 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
267 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
268 prereqs=[
"ghost:BHadronsFinal",
269 "ghost:CHadronsFinal",
274 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
275 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
276 prereqs=[
"ghost:BHadronsFinal",
277 "ghost:CHadronsFinal",
282 JetDeltaRInitialLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabelerinitial_jetptmin",
283 createfn=ParticleJetToolsConfig.getJetDeltaRInitialLabelTool,
284 prereqs=[
"ghost:BHadronsInitial",
285 "ghost:CHadronsInitial",
290 JetGhostInitialLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostinitiallabeler",
291 createfn=ParticleJetToolsConfig.getJetGhostInitialLabelTool,
292 prereqs=[
"ghost:BHadronsInitial",
293 "ghost:CHadronsInitial",
297 JetQuarkChargeLabel =
JetModifier(
"JetQuarkChargeLabelingTool",
"jetquarkchargetool",
298 createfn=ParticleJetToolsConfig.getJetQuarkChargeTool,
299 prereqs=[
"mod:JetGhostInitialLabel",
"mod:JetGhostLabel",
"mod:PartonTruthLabel"]
303 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
305 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
309 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
311 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
312 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
315 JetIRCSafeLabel =
JetModifier(
"JetIRCSafeLabelTool",
"jetircsafelabeler",
317 createfn=ParticleJetToolsConfig.getJetIRCSafeLabelTool,
318 prereqs=[
"ghost:BHadronsFinal",
319 "ghost:CHadronsFinal",
320 "input:JetInputTruthParticles"]
327stdJetModifiers.update(
328 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
329 JetContainer = _jetname),
330 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
335 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
339 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
345 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
348 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
349 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
351 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
353 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
359 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
364 from JetMomentTools
import JetMomentToolsConfig
365 stdJetModifiers.update(
366 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
367 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
368 JetContainer = _jetname,
369 SuppressInputDependence =
True),
371except ModuleNotFoundError:
372 from AthenaCommon
import Logging
373 jetlog = Logging.logging.getLogger(
'JetStandardMods')
374 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
379 from JetMomentTools
import JetMomentToolsConfig
380 stdJetModifiers.update(
381 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
382 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
383 JetContainer = _jetname,
384 SuppressInputDependence =
True),
386except ModuleNotFoundError:
387 from AthenaCommon
import Logging
388 jetlog = Logging.logging.getLogger(
'JetStandardMods')
389 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
394 from JetMomentTools
import JetMomentToolsConfig
395 stdJetModifiers.update(
396 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
397 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
398 JetContainer = _jetname,
399 SuppressInputDependence =
True),
401except ModuleNotFoundError:
402 from AthenaCommon
import Logging
403 jetlog = Logging.logging.getLogger(
'JetStandardMods')
404 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
409 from JetMomentTools
import JetMomentToolsConfig
410 stdJetModifiers.update(
411 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
412 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
413 JetContainer = _jetname,
414 SuppressInputDependence =
True),
416except ModuleNotFoundError:
417 from AthenaCommon
import Logging
418 jetlog = Logging.logging.getLogger(
'JetStandardMods')
419 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
423stdJetModifiers.update(
424 vr =
JetModifier(
"FlavorTagDiscriminants::VRJetOverlapDecoratorTool",
"vr")
std::vector< std::string > split(const std::string &s, const std::string &t=":")
getJetTruthLabelToolPrereqs(jetdef, modspec)
_constitContainername(jetdef, modspec)
_jetname(jetdef, modspec)