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 AthenaConfiguration.ComponentFactory
import CompFactory
27 from JetRecConfig.JetConfigFlags
import jetInternalFlags
28 from .StandardJetConstits
import inputsFromContext
34 stdJetModifiers.update(
39 PtMin =
lambda jdef,modspec:
int(modspec)
41 Filter_ifnotESD =
JetModifier(
"JetFilterTool",
"jetptfilter_{modspec}",
42 PtMin =
lambda _,modspec: 1
if jetInternalFlags.isRecoJob
else int(modspec),
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,
64 except ModuleNotFoundError:
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,
"Input file is not MC"
89 from JetMomentTools
import JetMomentToolsConfig
90 stdJetModifiers.update(
93 ClusterMoments =
JetModifier(
"JetClusterMomentsTool",
"clsmoms", JetContainer = _jetname),
94 ECPSFrac =
JetModifier(
"JetECPSFractionTool",
"ecpsfrac", JetContainer = _jetname),
95 Width =
JetModifier(
"JetWidthTool",
"width", JetContainer = _jetname),
98 CaloEnergies =
JetModifier(
"JetCaloEnergies",
"jetens",
99 prereqs=[
"mod:EMScaleMom"],
100 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
103 CaloEnergiesLargeR =
JetModifier(
"JetCaloEnergies",
"jetenslargeR",
104 prereqs=[
"mod:EMScaleMom"],
105 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"EM3Frac",
"Tile0Frac",
"EffNClusts"], JetContainer = _jetname,
106 calcClusterBasedVars =
True,
110 CaloEnergiesClus =
JetModifier(
"JetCaloEnergies",
"jetensclus",
111 prereqs=[
"mod:EMScaleMom"],
112 Calculations=[
"EMFrac",
"HECFrac",
"PSFrac",
"FracSamplingMax"], JetContainer = _jetname,
113 calcClusterBasedVars =
True),
115 CaloQuality =
JetModifier(
"JetCaloQualityTool",
"caloqual",
117 Calculations = [
"LArQuality",
"N90Constituents",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
119 CaloQualityFE =
JetModifier(
"JetCaloQualityToolFE",
"caloqualFE",
121 ThresholdCuts = [90],
122 Calculations = [
"LArQuality",
"NegativeE",
"Timing",
"HECQuality",
"Centroid",
"AverageLArQF",
"BchCorrCell"],JetContainer = _jetname),
125 Calculations = [
"N90Constituents"],JetContainer = _jetname),
127 ConstitFourMom =
JetModifier(
"JetConstitFourMomTool",
"constitfourmom_basename",
128 createfn=JetMomentToolsConfig.getConstitFourMomTool,),
129 EMScaleMom =
JetModifier(
"JetEMScaleMomTool",
"emscalemom_basename",
130 createfn=JetMomentToolsConfig.getEMScaleMomTool,
131 JetContainer = _jetname),
134 createfn=JetMomentToolsConfig.getJVFTool,
136 JetContainer = _jetname),
138 createfn=JetMomentToolsConfig.getJVTTool,
139 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
141 createfn=JetMomentToolsConfig.getNNJvtTool,
142 prereqs = [
"mod:JVF" ],JetContainer = _jetname),
143 LArHVCorr =
JetModifier(
"JetLArHVTool",
"larhvcorr",
144 prereqs = [
"mod:EMScaleMom"],JetContainer = _jetname),
145 OriginSetPV =
JetModifier(
"JetOriginCorrectionTool",
"origin_setpv",
146 prereqs = [
"mod:JVF" ],JetContainer = _jetname, OnlyAssignPV=
True),
147 TrackMoments =
JetModifier(
"JetTrackMomentsTool",
"trkmoms",
148 createfn=JetMomentToolsConfig.getTrackMomentsTool,
151 TrackSumMoments =
JetModifier(
"JetTrackSumMomentsTool",
"trksummoms",
152 createfn=JetMomentToolsConfig.getTrackSumMomentsTool,
155 prereqs = [
"ghost:Track" ]),
157 QGTagging =
JetModifier(
"JetQGTaggerVariableTool",
"qgtagging",
158 createfn=JetMomentToolsConfig.getQGTaggingTool,
159 prereqs =
lambda _,jetdef :
161 ([
"mod:JetPtAssociation"]
if not isMC(jetdef._cflags)
else []),
162 JetContainer = _jetname),
164 fJVT =
JetModifier(
"JetForwardPFlowJvtTool",
"fJVT",
165 createfn=JetMomentToolsConfig.getPFlowfJVTTool,
167 JetContainer = _jetname),
169 bJVT =
JetModifier(
"JetBalancePFlowJvtTool",
"bJVT",
170 createfn=JetMomentToolsConfig.getPFlowbJVTTool,
172 JetContainer = _jetname),
174 ConstitFrac =
JetModifier(
"JetConstituentFrac",
"constitFrac",
175 JetContainer = _jetname,
178 groomMRatio =
JetModifier(
"JetGroomMRatio",
"groomMRatio",
179 JetContainer = _jetname,
182 JetPtAssociation =
JetModifier(
"JetPtAssociationTool",
"jetPtAssociation",
184 createfn=JetMomentToolsConfig.getJetPtAssociationTool,
185 prereqs=[
"ghost:Truth"],
186 JetContainer = _jetname
190 except ModuleNotFoundError:
195 from ParticleJetTools
import ParticleJetToolsConfig
196 stdJetModifiers.update(
198 PartonTruthLabel =
JetModifier(
"Analysis::JetPartonTruthLabel",
"partontruthlabel",
199 prereqs=[
"ghost:Partons"]),
202 TruthPartonDR =
JetModifier(
"Analysis::JetConeLabeling",
"truthpartondr",
204 JetTruthMatchTool =
lambda *l : CompFactory.getComp(
"Analysis::JetQuarkLabel")(
"jetquarklabel", McEventCollection=
'TruthEvents'),
208 JetDeltaRLabel =
JetModifier(
"ParticleJetDeltaRLabelTool",
"jetdrlabeler_jetptmin",
209 createfn=ParticleJetToolsConfig.getJetDeltaRLabelTool,
210 prereqs=[
"ghost:BHadronsFinal",
211 "ghost:CHadronsFinal",
216 JetGhostLabel =
JetModifier(
"ParticleJetGhostLabelTool",
"jetghostlabeler",
217 createfn=ParticleJetToolsConfig.getJetGhostLabelTool,
218 prereqs=[
"ghost:BHadronsFinal",
219 "ghost:CHadronsFinal",
224 JetTaggingTruthLabel =
JetModifier(
"JetTaggingTruthLabel",
"truthlabeler_{mods}",
226 createfn=ParticleJetToolsConfig.getJetTruthLabelTool,
229 JetPileupLabel =
JetModifier(
"JetPileupLabel",
"pileuplabeler_{mods}",
231 createfn=ParticleJetToolsConfig.getJetPileupLabelTool,
232 prereqs=[
"input:AntiKt4TruthDressedWZJets"]
239 stdJetModifiers.update(
240 nsubjettiness =
JetModifier(
"NSubjettinessTool",
"nsubjettiness",Alpha = 1.0),
241 nsubjettinessR =
JetModifier(
"NSubjettinessRatiosTool",
"nsubjettinessR",),
250 dipolarity =
JetModifier(
"DipolarityTool",
"dipolarity",SubJetRadius = 0.3),
256 ecorr =
JetModifier(
"EnergyCorrelatorTool",
"ecorr", Beta = 1.0),
259 ecorrgeneral =
JetModifier(
"EnergyCorrelatorGeneralizedTool",
"ecorrgeneral", DoLSeries =
True),
260 ecorrgeneralratios =
JetModifier(
"EnergyCorrelatorGeneralizedRatiosTool",
"ecorrgeneralratios", DoLSeries =
True),
264 pull =
JetModifier(
"JetPullTool",
"pull", UseEtaInsteadOfY =
False, IncludeTensorMoments =
True ),
270 softdropobs =
JetModifier(
"SoftDropObservablesTool",
"softdropobs"),
275 stdJetModifiers.update(
276 vr =
JetModifier(
"FlavorTagDiscriminants::VRJetOverlapDecoratorTool",
"vr")