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,
90except ModuleNotFoundError:
91 from AthenaCommon
import Logging
92 jetlog = Logging.logging.getLogger(
'JetStandardMods')
93 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
97 from JetCalibTools
import JetCalibToolsCfg
98 stdJetModifiers.update(
99 CalibNew =
JetModifier(
"JetCalibTool",
"jetcalib_jetcoll_calibseq",
100 createfn=JetCalibToolsCfg.defineJetCalibTool,
103except ModuleNotFoundError:
104 from AthenaCommon
import Logging
105 jetlog = Logging.logging.getLogger(
'JetStandardMods')
106 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
119 return jetdef.fullname()
124 from JetMomentTools
import JetMomentToolsConfig
125 stdJetModifiers.update(
128 ClusterMoments =
JetModifier(
"JetClusterMomentsTool",
"clsmoms", JetContainer = _jetname),
129 ECPSFrac =
JetModifier(
"JetECPSFractionTool",
"ecpsfrac", JetContainer = _jetname),
130 Width =
JetModifier(
"JetWidthTool",
"width", JetContainer = _jetname),
134 prereqs=[
"mod:EMScaleMom"],
135 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
138 CaloEnergiesLargeR =
JetModifier(
"JetCaloEnergies",
"jetenslargeR",
139 prereqs=[
"mod:EMScaleMom"],
140 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"EM3Frac",
"Tile0Frac",
"EffNClusts"], JetContainer = _jetname,
141 calcClusterBasedVars =
True,
146 prereqs=[
"mod:EMScaleMom"],
147 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
148 calcClusterBasedVars =
True),
152 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
156 ThresholdCuts = [90],
157 Calculations = [
"LArQuality",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
160 Calculations = [
"N90Constituents"],JetContainer = _jetname),
162 ConstitFourMom =
JetModifier(
"JetConstitFourMomTool",
"constitfourmom_basename",
163 createfn=JetMomentToolsConfig.getConstitFourMomTool,),
164 EMScaleMom =
JetModifier(
"JetEMScaleMomTool",
"emscalemom_basename",
165 createfn=JetMomentToolsConfig.getEMScaleMomTool,
166 JetContainer = _jetname),
169 createfn=JetMomentToolsConfig.getJVFTool,
170 prereqs = [inputsFromContext(
"TVA"),
"mod:TrackMoments", inputsFromContext(
"Vertices")],
171 JetContainer = _jetname),
173 createfn=JetMomentToolsConfig.getJVTTool,
174 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
176 createfn=JetMomentToolsConfig.getNNJvtTool,
177 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
179 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
180 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
181 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
183 createfn=JetMomentToolsConfig.getTrackMomentsTool,
184 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
186 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
187 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
188 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
190 prereqs = [
"ghost:Track" ]),
193 createfn=JetMomentToolsConfig.getQGTaggingTool,
194 prereqs =
lambda _,jetdef :
195 [inputsFromContext(
"TVA"),
"mod:TrackMoments"] +
196 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
197 JetContainer = _jetname),
200 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
201 prereqs = [inputsFromContext(
"TVA"),inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
202 JetContainer = _jetname),
205 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
206 prereqs = [inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
207 JetContainer = _jetname),
210 JetContainer = _jetname,
214 JetContainer = _jetname,
217 JetPtAssociation =
JetModifier(
"JetPtAssociationTool",
"jetPtAssociation",
219 createfn=JetMomentToolsConfig.getJetPtAssociationTool,
220 prereqs=[
"ghost:Truth",
"input:AntiKt4TruthJets"],
221 JetContainer = _jetname
225 JetContainer = _jetname,
231 JetContainer=_jetname,
232 InputConstitContainer = _constitContainername,
233 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
234 RhoKey =
lambda jetdef, specs :
"Kt4"+jetdef.inputdef.label+
"EventShape" ,
235 prereqs= [
"input:EventDensity"],
239 JetContainer=_jetname,
240 InputConstitContainer = _constitContainername,
241 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
246 JetContainer=_jetname,
247 InputConstitContainer = _constitContainername,
248 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
249 RhoKey =
lambda jetdef, specs :
"HLT_Kt4"+jetdef.inputdef.label+
"EventShape" ,
250 prereqs= [
"input:HLT_EventDensity"],
254except ModuleNotFoundError:
255 from AthenaCommon
import Logging
256 jetlog = Logging.logging.getLogger(
'JetStandardMods')
257 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
262from ParticleJetTools
import ParticleJetToolsConfig
263stdJetModifiers.update(
265 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
266 prereqs=[
"ghost:Partons"]
270 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
271 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
272 prereqs=[
"ghost:BHadronsFinal",
273 "ghost:CHadronsFinal",
278 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
279 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
280 prereqs=[
"ghost:BHadronsFinal",
281 "ghost:CHadronsFinal",
286 JetDeltaRInitialLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabelerinitial_jetptmin",
287 createfn=ParticleJetToolsConfig.getJetDeltaRInitialLabelTool,
288 prereqs=[
"ghost:BHadronsInitial",
289 "ghost:CHadronsInitial",
294 JetGhostInitialLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostinitiallabeler",
295 createfn=ParticleJetToolsConfig.getJetGhostInitialLabelTool,
296 prereqs=[
"ghost:BHadronsInitial",
297 "ghost:CHadronsInitial",
301 JetQuarkChargeLabel =
JetModifier(
"JetQuarkChargeLabelingTool",
"jetquarkchargetool",
302 createfn=ParticleJetToolsConfig.getJetQuarkChargeTool,
303 prereqs=[
"mod:JetGhostInitialLabel",
"mod:JetGhostLabel",
"mod:PartonTruthLabel"]
307 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
309 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
313 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
315 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
316 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
319 JetIRCSafeLabel =
JetModifier(
"JetIRCSafeLabelTool",
"jetircsafelabeler",
321 createfn=ParticleJetToolsConfig.getJetIRCSafeLabelTool,
322 prereqs=[
"ghost:BHadronsFinal",
323 "ghost:CHadronsFinal",
324 "input:JetInputTruthParticles"]
331stdJetModifiers.update(
332 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
333 JetContainer = _jetname),
334 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
339 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
343 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
349 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
352 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
353 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
355 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
357 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
363 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
368 from JetMomentTools
import JetMomentToolsConfig
369 stdJetModifiers.update(
370 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
371 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
372 JetContainer = _jetname,
373 SuppressInputDependence =
True),
375except ModuleNotFoundError:
376 from AthenaCommon
import Logging
377 jetlog = Logging.logging.getLogger(
'JetStandardMods')
378 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
383 from JetMomentTools
import JetMomentToolsConfig
384 stdJetModifiers.update(
385 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
386 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
387 JetContainer = _jetname,
388 SuppressInputDependence =
True),
390except ModuleNotFoundError:
391 from AthenaCommon
import Logging
392 jetlog = Logging.logging.getLogger(
'JetStandardMods')
393 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
398 from JetMomentTools
import JetMomentToolsConfig
399 stdJetModifiers.update(
400 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
401 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
402 JetContainer = _jetname,
403 SuppressInputDependence =
True),
405except ModuleNotFoundError:
406 from AthenaCommon
import Logging
407 jetlog = Logging.logging.getLogger(
'JetStandardMods')
408 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
413 from JetMomentTools
import JetMomentToolsConfig
414 stdJetModifiers.update(
415 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
416 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
417 JetContainer = _jetname,
418 SuppressInputDependence =
True),
420except ModuleNotFoundError:
421 from AthenaCommon
import Logging
422 jetlog = Logging.logging.getLogger(
'JetStandardMods')
423 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
427stdJetModifiers.update(
428 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)