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
197 JetContainer = _jetname,
203 JetContainer=_jetname,
204 InputConstitContainer = _constitContainername,
205 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
206 RhoKey =
lambda jetdef, specs :
"Kt4"+jetdef.inputdef.label+
"EventShape" ,
207 prereqs= [
"input:EventDensity"],
211 JetContainer=_jetname,
212 InputConstitContainer = _constitContainername,
213 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
219except ModuleNotFoundError:
220 from AthenaCommon
import Logging
221 jetlog = Logging.logging.getLogger(
'JetStandardMods')
222 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
226from ParticleJetTools
import ParticleJetToolsConfig
227stdJetModifiers.update(
229 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
230 prereqs=[
"ghost:Partons"]
234 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
235 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
236 prereqs=[
"ghost:BHadronsFinal",
237 "ghost:CHadronsFinal",
242 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
243 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
244 prereqs=[
"ghost:BHadronsFinal",
245 "ghost:CHadronsFinal",
250 JetDeltaRInitialLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabelerinitial_jetptmin",
251 createfn=ParticleJetToolsConfig.getJetDeltaRInitialLabelTool,
252 prereqs=[
"ghost:BHadronsInitial",
253 "ghost:CHadronsInitial",
258 JetGhostInitialLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostinitiallabeler",
259 createfn=ParticleJetToolsConfig.getJetGhostInitialLabelTool,
260 prereqs=[
"ghost:BHadronsInitial",
261 "ghost:CHadronsInitial",
265 JetQuarkChargeLabel =
JetModifier(
"JetQuarkChargeLabelingTool",
"jetquarkchargetool",
266 createfn=ParticleJetToolsConfig.getJetQuarkChargeTool,
267 prereqs=[
"mod:JetGhostInitialLabel",
"mod:JetGhostLabel",
"mod:PartonTruthLabel"]
271 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
273 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
277 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
279 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
280 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
287stdJetModifiers.update(
288 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
289 JetContainer = _jetname),
290 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
295 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
299 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
305 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
308 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
309 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
311 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
313 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
319 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
324 from JetMomentTools
import JetMomentToolsConfig
325 stdJetModifiers.update(
326 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
327 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
328 JetContainer = _jetname,
329 SuppressInputDependence =
True),
331except ModuleNotFoundError:
332 from AthenaCommon
import Logging
333 jetlog = Logging.logging.getLogger(
'JetStandardMods')
334 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
339 from JetMomentTools
import JetMomentToolsConfig
340 stdJetModifiers.update(
341 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
342 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
343 JetContainer = _jetname,
344 SuppressInputDependence =
True),
346except ModuleNotFoundError:
347 from AthenaCommon
import Logging
348 jetlog = Logging.logging.getLogger(
'JetStandardMods')
349 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
354 from JetMomentTools
import JetMomentToolsConfig
355 stdJetModifiers.update(
356 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
357 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
358 JetContainer = _jetname,
359 SuppressInputDependence =
True),
361except ModuleNotFoundError:
362 from AthenaCommon
import Logging
363 jetlog = Logging.logging.getLogger(
'JetStandardMods')
364 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
369 from JetMomentTools
import JetMomentToolsConfig
370 stdJetModifiers.update(
371 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
372 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
373 JetContainer = _jetname,
374 SuppressInputDependence =
True),
376except ModuleNotFoundError:
377 from AthenaCommon
import Logging
378 jetlog = Logging.logging.getLogger(
'JetStandardMods')
379 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
383stdJetModifiers.update(
384 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)