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
34stdJetModifiers.update(
39 PtMin =
lambda jdef,modspec: int(modspec)
41 Filter_ifnotESD =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
42 PtMin =
lambda _,modspec: 1,
45 Filter_calibThreshold =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
46 PtMin =
lambda jetdef,modspec: 1
if not jetdef._cflags.Jet.useCalibJetThreshold
else int(modspec),
58 from JetCalibTools
import JetCalibToolsConfig
59 stdJetModifiers.update(
60 Calib =
JetModifier(
"JetCalibrationTool",
"jetcalib_jetcoll_calibseq",
61 createfn=JetCalibToolsConfig.getJetCalibToolFromString,
64except ModuleNotFoundError:
65 from AthenaCommon
import Logging
66 jetlog = Logging.logging.getLogger(
'JetStandardMods')
67 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
71 from JetCalibTools
import JetCalibToolsCfg
72 stdJetModifiers.update(
73 CalibNew =
JetModifier(
"JetCalibTool",
"jetcalib_jetcoll_calibseq",
74 createfn=JetCalibToolsCfg.defineJetCalibTool,
77except ModuleNotFoundError:
78 from AthenaCommon
import Logging
79 jetlog = Logging.logging.getLogger(
'JetStandardMods')
80 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
93 return jetdef.fullname()
97 """Returns the exact constituent container name used to build jetdef"""
98 constitdef = jetdef.inputdef
99 containername = constitdef.containername(jetdef).
split(
':')[-1]
if callable(constitdef.containername)
else constitdef.containername
105 from JetMomentTools
import JetMomentToolsConfig
106 stdJetModifiers.update(
109 ClusterMoments =
JetModifier(
"JetClusterMomentsTool",
"clsmoms", JetContainer = _jetname),
110 ECPSFrac =
JetModifier(
"JetECPSFractionTool",
"ecpsfrac", JetContainer = _jetname),
111 Width =
JetModifier(
"JetWidthTool",
"width", JetContainer = _jetname),
115 prereqs=[
"mod:EMScaleMom"],
116 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
119 CaloEnergiesLargeR =
JetModifier(
"JetCaloEnergies",
"jetenslargeR",
120 prereqs=[
"mod:EMScaleMom"],
121 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"EM3Frac",
"Tile0Frac",
"EffNClusts"], JetContainer = _jetname,
122 calcClusterBasedVars =
True,
127 prereqs=[
"mod:EMScaleMom"],
128 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
129 calcClusterBasedVars =
True),
133 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
137 ThresholdCuts = [90],
138 Calculations = [
"LArQuality",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
141 Calculations = [
"N90Constituents"],JetContainer = _jetname),
143 ConstitFourMom =
JetModifier(
"JetConstitFourMomTool",
"constitfourmom_basename",
144 createfn=JetMomentToolsConfig.getConstitFourMomTool,),
145 EMScaleMom =
JetModifier(
"JetEMScaleMomTool",
"emscalemom_basename",
146 createfn=JetMomentToolsConfig.getEMScaleMomTool,
147 JetContainer = _jetname),
150 createfn=JetMomentToolsConfig.getJVFTool,
151 prereqs = [inputsFromContext(
"TVA"),
"mod:TrackMoments", inputsFromContext(
"Vertices")],
152 JetContainer = _jetname),
154 createfn=JetMomentToolsConfig.getJVTTool,
155 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
157 createfn=JetMomentToolsConfig.getNNJvtTool,
158 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
160 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
161 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
162 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
164 createfn=JetMomentToolsConfig.getTrackMomentsTool,
165 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
167 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
168 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
169 prereqs = [ inputsFromContext(
"TVA"),
"ghost:Track" ],JetContainer = _jetname),
171 prereqs = [
"ghost:Track" ]),
174 createfn=JetMomentToolsConfig.getQGTaggingTool,
175 prereqs =
lambda _,jetdef :
176 [inputsFromContext(
"TVA"),
"mod:TrackMoments"] +
177 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
178 JetContainer = _jetname),
181 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
182 prereqs = [inputsFromContext(
"TVA"),inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
183 JetContainer = _jetname),
186 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
187 prereqs = [inputsFromContext(
"EventDensity"),inputsFromContext(
"Vertices"),
"mod:NNJVT"],
188 JetContainer = _jetname),
191 JetContainer = _jetname,
195 JetContainer = _jetname,
198 JetPtAssociation =
JetModifier(
"JetPtAssociationTool",
"jetPtAssociation",
200 createfn=JetMomentToolsConfig.getJetPtAssociationTool,
201 prereqs=[
"ghost:Truth"],
202 JetContainer = _jetname
206 JetContainer = _jetname,
212 JetContainer=_jetname,
213 InputConstitContainer = _constitContainername,
214 IsolationCalculations = [
"IsoFixedCone:5:Pt",
"IsoFixedCone:5:PtPUsub",],
215 RhoKey =
lambda jetdef, specs :
"Kt4"+jetdef.inputdef.label+
"EventShape" ,
216 prereqs= [
"input:EventDensity"],
220 JetContainer=_jetname,
221 InputConstitContainer = _constitContainername,
222 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
228except ModuleNotFoundError:
229 from AthenaCommon
import Logging
230 jetlog = Logging.logging.getLogger(
'JetStandardMods')
231 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
235from ParticleJetTools
import ParticleJetToolsConfig
236stdJetModifiers.update(
238 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
239 prereqs=[
"ghost:Partons"]
243 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
244 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
245 prereqs=[
"ghost:BHadronsFinal",
246 "ghost:CHadronsFinal",
251 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
252 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
253 prereqs=[
"ghost:BHadronsFinal",
254 "ghost:CHadronsFinal",
259 JetDeltaRInitialLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabelerinitial_jetptmin",
260 createfn=ParticleJetToolsConfig.getJetDeltaRInitialLabelTool,
261 prereqs=[
"ghost:BHadronsInitial",
262 "ghost:CHadronsInitial",
267 JetGhostInitialLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostinitiallabeler",
268 createfn=ParticleJetToolsConfig.getJetGhostInitialLabelTool,
269 prereqs=[
"ghost:BHadronsInitial",
270 "ghost:CHadronsInitial",
274 JetQuarkChargeLabel =
JetModifier(
"JetQuarkChargeLabelingTool",
"jetquarkchargetool",
275 createfn=ParticleJetToolsConfig.getJetQuarkChargeTool,
276 prereqs=[
"mod:JetGhostInitialLabel",
"mod:JetGhostLabel",
"mod:PartonTruthLabel"]
280 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
282 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
286 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
288 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
289 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
296stdJetModifiers.update(
297 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness", Alpha = 1.0,
298 JetContainer = _jetname),
299 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
304 ktsplitter =
JetModifier(
"KTSplittingScaleTool",
"ktsplitter", JetContainer = _jetname),
308 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
314 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0, JetContainer = _jetname),
317 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True, JetContainer = _jetname),
318 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
320 comshapes =
JetModifier(
"CenterOfMassShapesTool",
"comshapes", JetContainer = _jetname),
322 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
328 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
333 from JetMomentTools
import JetMomentToolsConfig
334 stdJetModifiers.update(
335 qgtransformer =
JetModifier(
"BoostedJetTaggerTool",
"qgtransformer",
336 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolQG,
337 JetContainer = _jetname,
338 SuppressInputDependence =
True),
340except ModuleNotFoundError:
341 from AthenaCommon
import Logging
342 jetlog = Logging.logging.getLogger(
'JetStandardMods')
343 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
348 from JetMomentTools
import JetMomentToolsConfig
349 stdJetModifiers.update(
350 toptransformer =
JetModifier(
"BoostedJetTaggerTool",
"toptransformer",
351 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolTop,
352 JetContainer = _jetname,
353 SuppressInputDependence =
True),
355except ModuleNotFoundError:
356 from AthenaCommon
import Logging
357 jetlog = Logging.logging.getLogger(
'JetStandardMods')
358 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
363 from JetMomentTools
import JetMomentToolsConfig
364 stdJetModifiers.update(
365 wtransformer =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer",
366 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolW,
367 JetContainer = _jetname,
368 SuppressInputDependence =
True),
370except ModuleNotFoundError:
371 from AthenaCommon
import Logging
372 jetlog = Logging.logging.getLogger(
'JetStandardMods')
373 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
378 from JetMomentTools
import JetMomentToolsConfig
379 stdJetModifiers.update(
380 wtransformer_massdec =
JetModifier(
"BoostedJetTaggerTool",
"wtransformer_massdec",
381 createfn=JetMomentToolsConfig.getBoostedJetTaggerToolWMassDec,
382 JetContainer = _jetname,
383 SuppressInputDependence =
True),
385except ModuleNotFoundError:
386 from AthenaCommon
import Logging
387 jetlog = Logging.logging.getLogger(
'JetStandardMods')
388 jetlog.info(
"No JetMomentTools pakage found (expected in AthGeneration or analysis releases). Some jet calculations will be disabled.")
392stdJetModifiers.update(
393 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)