3 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
4 from AthenaConfiguration.ComponentFactory
import CompFactory
5 from os.path
import commonpath
6 from pathlib
import PurePath
9 svc = CompFactory.FlavorTagDiscriminants.NNSharingSvc(
'FTagNNSharingSvc')
25 if '201903' in NNFile
and 'dl1' in NNFile:
26 for aggragate
in [
'minimum',
'maximum',
'average']:
27 remap[f
'{aggragate}TrackRelativeEta'] = (
28 f
'JetFitterSecondaryVertex_{aggragate}AllJetTrackRelativeEta')
31 if '20221008' in NNFile
and 'dips' in NNFile:
32 for aggragate
in [
'InnermostPixelLayer',
'NextToInnermostPixelLayer',
33 'InnermostPixelLayerShared',
34 'InnermostPixelLayerSplit']:
35 remap[f
'numberOf{aggragate}Hits'] = (
36 f
'numberOf{aggragate}Hits21p9')
38 mkey =
'variableRemapping'
39 options[mkey] = remap | options.get(mkey,{})
41 dl2 = CompFactory.FlavorTagDiscriminants.DL2Tool(
46 acc.setPrivateTools(dl2)
57 if '20221010' in NNFile
and 'GN1' in NNFile:
58 for aggragate
in [
'InnermostPixelLayer',
'NextToInnermostPixelLayer',
59 'InnermostPixelLayerShared',
60 'InnermostPixelLayerSplit']:
61 remap[f
'numberOf{aggragate}Hits'] = (
62 f
'numberOf{aggragate}Hits21p9')
64 mkey =
'variableRemapping'
65 options[mkey] = remap | options.get(mkey,{})
67 gnntool = CompFactory.FlavorTagDiscriminants.GNNTool(
73 acc.setPrivateTools(gnntool)
84 'numberOfInnermostPixelLayerHits',
85 'numberOfInnermostPixelLayerSharedHits',
86 'numberOfInnermostPixelLayerSplitHits',
87 'numberOfNextToInnermostPixelLayerHits',
88 'numberOfPixelDeadSensors',
91 'numberOfPixelSharedHits',
92 'numberOfPixelSplitHits',
93 'numberOfSCTDeadSensors',
96 'numberOfSCTSharedHits',
101 return [f
'{TrackCollection}.{x}' for x
in static_track_vars]
116 'JetFitter_energyFraction',
118 'JetFitter_nSingleTracks',
119 'JetFitter_nTracksAtVtx',
121 'JetFitter_significance3d',
129 'SV1_significance3d',
130 'BTagTrackToJetAssociator',
132 return [f
'{BTaggingCollection}.{x}' for x
in undeclared_btag]
139 FlipConfig="STANDARD",
140 variableRemapping={}):
144 NNFile_extension = NNFile.split(
".")[-1]
147 flipTagConfig=FlipConfig,
148 variableRemapping=variableRemapping)
149 if NNFile_extension ==
"json":
150 nn_name = NNFile.replace(
"/",
"_").
replace(
"_network.json",
"")
151 decorator = acc.popToolsAndMerge(
DL2ToolCfg(flags, **nn_opts))
152 elif NNFile_extension ==
"onnx":
153 nn_name = NNFile.replace(
"/",
"_").
replace(
".onnx",
"")
154 decorator = acc.popToolsAndMerge(
GNNToolCfg(flags, **nn_opts))
156 raise ValueError(
"FlavorTagNNCfg: Wrong NNFile extension. Please check the NNFile argument")
158 name =
'_'.
join([nn_name.lower(), BTaggingCollection])
161 if FlipConfig !=
"STANDARD":
162 name = name + FlipConfig
167 decorAlg = CompFactory.FlavorTagDiscriminants.BTagDecoratorAlg(
169 container=BTaggingCollection,
170 constituentContainer=TrackCollection,
172 undeclaredReadDecorKeys=veto_list,
176 acc.addEventAlgo(decorAlg)
185 FlipConfig="STANDARD",
189 if nnFilePaths
is None:
190 raise ValueError(
'nnFilePaths must be specified')
191 common = commonpath(nnFilePaths)
192 nn_name =
'_'.
join(PurePath(common).with_suffix(
'').parts)
193 algname = f
'{nn_name}_{FlipConfig}'
198 CompFactory.FlavorTagDiscriminants.BTagDecoratorAlg(
200 container=BTaggingCollection,
201 constituentContainer=TrackCollection,
202 decorator=CompFactory.FlavorTagDiscriminants.MultifoldGNNTool(
203 name=f
'{algname}_tool',
204 foldHashName=
'jetFoldHash',
206 flipTagConfig=FlipConfig,
207 variableRemapping=remapping,
210 undeclaredReadDecorKeys=veto_list,