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"]
323stdJetModifiers.update(
324 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
325 JetContainer = _jetname),
326 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
331 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
335 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
341 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
344 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
345 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
347 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
349 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
355 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
360 from JetMomentTools
import JetMomentToolsConfig
361 stdJetModifiers.update(
362 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
363 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
364 JetContainer = _jetname,
365 SuppressInputDependence =
True),
367except ModuleNotFoundError:
368 from AthenaCommon
import Logging
369 jetlog = Logging.logging.getLogger(
'JetStandardMods')
370 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
375 from JetMomentTools
import JetMomentToolsConfig
376 stdJetModifiers.update(
377 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
378 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
379 JetContainer = _jetname,
380 SuppressInputDependence =
True),
382except ModuleNotFoundError:
383 from AthenaCommon
import Logging
384 jetlog = Logging.logging.getLogger(
'JetStandardMods')
385 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
390 from JetMomentTools
import JetMomentToolsConfig
391 stdJetModifiers.update(
392 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
393 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
394 JetContainer = _jetname,
395 SuppressInputDependence =
True),
397except ModuleNotFoundError:
398 from AthenaCommon
import Logging
399 jetlog = Logging.logging.getLogger(
'JetStandardMods')
400 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
405 from JetMomentTools
import JetMomentToolsConfig
406 stdJetModifiers.update(
407 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
408 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
409 JetContainer = _jetname,
410 SuppressInputDependence =
True),
412except ModuleNotFoundError:
413 from AthenaCommon
import Logging
414 jetlog = Logging.logging.getLogger(
'JetStandardMods')
415 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
419stdJetModifiers.update(
420 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)