3 This module defines the standard JetModifier tools used in jet reco
5 Definitions are grouped in a dictionary of tool configurations using the helpers defined
7 This dict maps a modifier alias to the JetModifier config object
8 that in turn will be responsible for generating a configured tool.
10 The 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
24 from .JetDefinition
import JetModifier
25 from .Utilities
import ldict
26 from .StandardJetConstits
import inputsFromContext
32 stdJetModifiers.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,
62 except 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),
105 CaloEnergies =
JetModifier(
"JetCaloEnergies",
"jetens",
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,
117 CaloEnergiesClus =
JetModifier(
"JetCaloEnergies",
"jetensclus",
118 prereqs=[
"mod:EMScaleMom"],
119 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
120 calcClusterBasedVars =
True),
122 CaloQuality =
JetModifier(
"JetCaloQualityTool",
"caloqual",
124 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
126 CaloQualityFE =
JetModifier(
"JetCaloQualityToolFE",
"caloqualFE",
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,
143 JetContainer = _jetname),
145 createfn=JetMomentToolsConfig.getJVTTool,
146 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
148 createfn=JetMomentToolsConfig.getNNJvtTool,
149 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
150 LArHVCorr =
JetModifier(
"JetLArHVTool",
"larhvcorr",
151 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
152 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
153 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
154 TrackMoments =
JetModifier(
"JetTrackMomentsTool",
"trkmoms",
155 createfn=JetMomentToolsConfig.getTrackMomentsTool,
158 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
159 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
162 prereqs = [
"ghost:Track" ]),
164 QGTagging =
JetModifier(
"JetQGTaggerVariableTool",
"qgtagging",
165 createfn=JetMomentToolsConfig.getQGTaggingTool,
166 prereqs =
lambda _,jetdef :
168 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
169 JetContainer = _jetname),
171 fJVT =
JetModifier(
"JetForwardPFlowJvtTool",
"fJVT",
172 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
174 JetContainer = _jetname),
176 bJVT =
JetModifier(
"JetBalancePFlowJvtTool",
"bJVT",
177 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
179 JetContainer = _jetname),
181 ConstitFrac =
JetModifier(
"JetConstituentFrac",
"constitFrac",
182 JetContainer = _jetname,
185 groomMRatio =
JetModifier(
"JetGroomMRatio",
"groomMRatio",
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"],
206 jetisoTruth =
JetModifier(
"JetIsolationTool",
"isoTruth",
207 JetContainer=_jetname,
208 InputConstitContainer = _constitContainername,
209 IsolationCalculations = [
"IsoFixedCone:5:Pt", ],
215 except 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.")
222 from ParticleJetTools
import ParticleJetToolsConfig
223 stdJetModifiers.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"]
283 stdJetModifiers.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),
327 except 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),
342 except 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),
357 except 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),
372 except 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.")
379 stdJetModifiers.update(
380 vr =
JetModifier(
"FlavorTagDiscriminants::VRJetOverlapDecoratorTool",
"vr")