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
32stdJetModifiers.update(
37 PtMin =
lambda jdef,modspec: int(modspec)
39 Filter_ifnotESD =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
40 PtMin =
lambda _,modspec: 1,
43 Filter_calibThreshold =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
44 PtMin =
lambda jetdef,modspec: 1
if not jetdef._cflags.Jet.useCalibJetThreshold
else int(modspec),
56 from JetCalibTools
import JetCalibToolsConfig
57 stdJetModifiers.update(
58 Calib =
JetModifier(
"JetCalibrationTool",
"jetcalib_jetcoll_calibseq",
59 createfn=JetCalibToolsConfig.getJetCalibToolFromString,
62except ModuleNotFoundError:
63 from AthenaCommon
import Logging
64 jetlog = Logging.logging.getLogger(
'JetStandardMods')
65 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
78 return jetdef.fullname()
81 """A simple filter function for testing if we're running in MC
82 returns (bool, str) where the str contains an explanation of why the bool is False.
83 (probably worth re-allocating somehere else)"""
84 return flags.Input.isMC
or flags.Overlay.DataOverlay,
"Input file is not MC"
88 """Returns the exact constituent container name used to build jetdef"""
89 constitdef = jetdef.inputdef
90 containername = constitdef.containername(jetdef).
split(
':')[-1]
if callable(constitdef.containername)
else constitdef.containername
96 from JetMomentTools
import JetMomentToolsConfig
97 stdJetModifiers.update(
100 ClusterMoments =
JetModifier(
"JetClusterMomentsTool",
"clsmoms", JetContainer = _jetname),
101 ECPSFrac =
JetModifier(
"JetECPSFractionTool",
"ecpsfrac", JetContainer = _jetname),
102 Width =
JetModifier(
"JetWidthTool",
"width", JetContainer = _jetname),
106 prereqs=[
"mod:EMScaleMom"],
107 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
110 CaloEnergiesLargeR =
JetModifier(
"JetCaloEnergies",
"jetenslargeR",
111 prereqs=[
"mod:EMScaleMom"],
112 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"EM3Frac",
"Tile0Frac",
"EffNClusts"], JetContainer = _jetname,
113 calcClusterBasedVars =
True,
118 prereqs=[
"mod:EMScaleMom"],
119 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
120 calcClusterBasedVars =
True),
124 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
128 ThresholdCuts = [90],
129 Calculations = [
"LArQuality",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
132 Calculations = [
"N90Constituents"],JetContainer = _jetname),
134 ConstitFourMom =
JetModifier(
"JetConstitFourMomTool",
"constitfourmom_basename",
135 createfn=JetMomentToolsConfig.getConstitFourMomTool,),
136 EMScaleMom =
JetModifier(
"JetEMScaleMomTool",
"emscalemom_basename",
137 createfn=JetMomentToolsConfig.getEMScaleMomTool,
138 JetContainer = _jetname),
141 createfn=JetMomentToolsConfig.getJVFTool,
142 prereqs = [inputsFromContext(
"TVA"),
"mod:TrackMoments", inputsFromContext(
"Vertices")],
143 JetContainer = _jetname),
145 createfn=JetMomentToolsConfig.getJVTTool,
146 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
148 createfn=JetMomentToolsConfig.getNNJvtTool,
149 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
151 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
152 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
153 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
155 createfn=JetMomentToolsConfig.getTrackMomentsTool,
156 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
158 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
159 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
160 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
162 prereqs = [
"ghost:Track" ]),
165 createfn=JetMomentToolsConfig.getQGTaggingTool,
166 prereqs =
lambda _,jetdef :
167 [inputsFromContext(
"TVA"),
"mod:TrackMoments"] +
168 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
169 JetContainer = _jetname),
172 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
173 prereqs = [inputsFromContext(
"TVA"),inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
174 JetContainer = _jetname),
177 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
178 prereqs = [inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
179 JetContainer = _jetname),
182 JetContainer = _jetname,
186 JetContainer = _jetname,
189 JetPtAssociation =
JetModifier(
"JetPtAssociationTool",
"jetPtAssociation",
191 createfn=JetMomentToolsConfig.getJetPtAssociationTool,
192 prereqs=[
"ghost:Truth"],
193 JetContainer = _jetname
199 JetContainer=_jetname,
200 InputConstitContainer = _constitContainername,
201 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
202 RhoKey =
lambda jetdef, specs :
"Kt4"+jetdef.inputdef.label+
"EventShape" ,
203 prereqs= [
"input:EventDensity"],
207 JetContainer=_jetname,
208 InputConstitContainer = _constitContainername,
209 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
215except ModuleNotFoundError:
216 from AthenaCommon
import Logging
217 jetlog = Logging.logging.getLogger(
'JetStandardMods')
218 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
222from ParticleJetTools
import ParticleJetToolsConfig
223stdJetModifiers.update(
225 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
226 prereqs=[
"ghost:Partons"]
230 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
231 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
232 prereqs=[
"ghost:BHadronsFinal",
233 "ghost:CHadronsFinal",
238 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
239 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
240 prereqs=[
"ghost:BHadronsFinal",
241 "ghost:CHadronsFinal",
246 JetDeltaRInitialLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabelerinitial_jetptmin",
247 createfn=ParticleJetToolsConfig.getJetDeltaRInitialLabelTool,
248 prereqs=[
"ghost:BHadronsInitial",
249 "ghost:CHadronsInitial",
254 JetGhostInitialLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostinitiallabeler",
255 createfn=ParticleJetToolsConfig.getJetGhostInitialLabelTool,
256 prereqs=[
"ghost:BHadronsInitial",
257 "ghost:CHadronsInitial",
261 JetQuarkChargeLabel =
JetModifier(
"JetQuarkChargeLabelingTool",
"jetquarkchargetool",
262 createfn=ParticleJetToolsConfig.getJetQuarkChargeTool,
263 prereqs=[
"mod:JetGhostInitialLabel",
"mod:JetGhostLabel",
"mod:PartonTruthLabel"]
267 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
269 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
273 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
275 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
276 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
283stdJetModifiers.update(
284 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
285 JetContainer = _jetname),
286 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
291 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
295 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
301 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
304 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
305 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
307 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
309 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
315 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
320 from JetMomentTools
import JetMomentToolsConfig
321 stdJetModifiers.update(
322 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
323 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
324 JetContainer = _jetname,
325 SuppressInputDependence =
True),
327except ModuleNotFoundError:
328 from AthenaCommon
import Logging
329 jetlog = Logging.logging.getLogger(
'JetStandardMods')
330 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
335 from JetMomentTools
import JetMomentToolsConfig
336 stdJetModifiers.update(
337 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
338 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
339 JetContainer = _jetname,
340 SuppressInputDependence =
True),
342except ModuleNotFoundError:
343 from AthenaCommon
import Logging
344 jetlog = Logging.logging.getLogger(
'JetStandardMods')
345 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
350 from JetMomentTools
import JetMomentToolsConfig
351 stdJetModifiers.update(
352 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
353 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
354 JetContainer = _jetname,
355 SuppressInputDependence =
True),
357except ModuleNotFoundError:
358 from AthenaCommon
import Logging
359 jetlog = Logging.logging.getLogger(
'JetStandardMods')
360 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
365 from JetMomentTools
import JetMomentToolsConfig
366 stdJetModifiers.update(
367 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
368 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
369 JetContainer = _jetname,
370 SuppressInputDependence =
True),
372except ModuleNotFoundError:
373 from AthenaCommon
import Logging
374 jetlog = Logging.logging.getLogger(
'JetStandardMods')
375 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
379stdJetModifiers.update(
380 vr =
JetModifier(
"FlavorTagDiscriminants::VRJetOverlapDecoratorTool",
"vr")
std::vector< std::string > split(const std::string &s, const std::string &t=":")
getJetTruthLabelToolPrereqs(jetdef, modspec)
_jetname(jetdef, modspec)
_constitContainername(jetdef, modspec)