ATLAS Offline Software
Functions
python.FlavorTagNNConfig Namespace Reference

Functions

def addAndReturnSharingSvc (flags, ca)
 
def DL2ToolCfg (flags, NNFile, **options)
 
def GNNToolCfg (flags, NNFile, **options)
 
def getStaticTrackVars (TrackCollection)
 
def getUndeclaredBtagVars (BTaggingCollection)
 
def FlavorTagNNCfg (flags, BTaggingCollection, TrackCollection, NNFile, FlipConfig="STANDARD", variableRemapping={})
 
def MultifoldGNNCfg (flags, BTaggingCollection, TrackCollection, FlipConfig="STANDARD", nnFilePaths=None, remapping={})
 

Function Documentation

◆ addAndReturnSharingSvc()

def python.FlavorTagNNConfig.addAndReturnSharingSvc (   flags,
  ca 
)

Definition at line 8 of file FlavorTagNNConfig.py.

8 def addAndReturnSharingSvc(flags, ca):
9  svc = CompFactory.FlavorTagDiscriminants.NNSharingSvc('FTagNNSharingSvc')
10  ca.addService(svc)
11  return svc
12 

◆ DL2ToolCfg()

def python.FlavorTagNNConfig.DL2ToolCfg (   flags,
  NNFile,
**  options 
)

Definition at line 13 of file FlavorTagNNConfig.py.

13 def DL2ToolCfg(flags, NNFile, **options):
14  acc = ComponentAccumulator()
15 
16  # default is "STANDARD" in case of a setup of the standard b-taggers. "NEGATIVE_IP_ONLY" [and "FLIP_SIGN"] if want to set up the flip taggers
17  # naming convention, see here: https://gitlab.cern.ch/atlas/athena/-/blob/master/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/FlipTagEnums.cxx
18 
19  # this map lets us change the names of EDM inputs with respect to
20  # the values we store in the saved NN
21  remap = {}
22  # This is a hack to accomodate the older b-tagging training with
23  # old names for variables. We should be able to remove it when we
24  # move over to the 2020 / 2021 retraining.
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')
29 
30  # Similar hack for 21.9-based upgrade training
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')
37 
38  mkey = 'variableRemapping'
39  options[mkey] = remap | options.get(mkey,{})
40 
41  dl2 = CompFactory.FlavorTagDiscriminants.DL2Tool(
42  name='decorator',
43  nnFile=NNFile,
44  **options)
45 
46  acc.setPrivateTools(dl2)
47 
48  return acc
49 

◆ FlavorTagNNCfg()

def python.FlavorTagNNConfig.FlavorTagNNCfg (   flags,
  BTaggingCollection,
  TrackCollection,
  NNFile,
  FlipConfig = "STANDARD",
  variableRemapping = {} 
)

Definition at line 134 of file FlavorTagNNConfig.py.

134 def FlavorTagNNCfg(
135  flags,
136  BTaggingCollection,
137  TrackCollection,
138  NNFile,
139  FlipConfig="STANDARD",
140  variableRemapping={}):
141 
142  acc = ComponentAccumulator()
143 
144  NNFile_extension = NNFile.split(".")[-1]
145  nn_opts = dict(
146  NNFile=NNFile,
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))
155  else:
156  raise ValueError("FlavorTagNNCfg: Wrong NNFile extension. Please check the NNFile argument")
157 
158  name = '_'.join([nn_name.lower(), BTaggingCollection])
159 
160  # Ensure different names for standard and flip taggers
161  if FlipConfig != "STANDARD":
162  name = name + FlipConfig
163 
164  veto_list = getStaticTrackVars(TrackCollection)
165  veto_list += getUndeclaredBtagVars(BTaggingCollection)
166 
167  decorAlg = CompFactory.FlavorTagDiscriminants.BTagDecoratorAlg(
168  name=name,
169  container=BTaggingCollection,
170  constituentContainer=TrackCollection,
171  decorator=decorator,
172  undeclaredReadDecorKeys=veto_list,
173  )
174 
175  # -- create the association algorithm
176  acc.addEventAlgo(decorAlg)
177 
178  return acc
179 
180 

◆ getStaticTrackVars()

def python.FlavorTagNNConfig.getStaticTrackVars (   TrackCollection)

Definition at line 77 of file FlavorTagNNConfig.py.

77 def getStaticTrackVars(TrackCollection):
78  # some things should not be declared as date dependencies: it will
79  # make the trigger sad.
80  #
81  # In the case of tracking it's mostly static variables that are a
82  # problem.
83  static_track_vars = [
84  'numberOfInnermostPixelLayerHits',
85  'numberOfInnermostPixelLayerSharedHits',
86  'numberOfInnermostPixelLayerSplitHits',
87  'numberOfNextToInnermostPixelLayerHits',
88  'numberOfPixelDeadSensors',
89  'numberOfPixelHits',
90  'numberOfPixelHoles',
91  'numberOfPixelSharedHits',
92  'numberOfPixelSplitHits',
93  'numberOfSCTDeadSensors',
94  'numberOfSCTHits',
95  'numberOfSCTHoles',
96  'numberOfSCTSharedHits',
97  'chiSquared',
98  'numberDoF',
99  'qOverP',
100  ]
101  return [f'{TrackCollection}.{x}' for x in static_track_vars]
102 

◆ getUndeclaredBtagVars()

def python.FlavorTagNNConfig.getUndeclaredBtagVars (   BTaggingCollection)

Definition at line 103 of file FlavorTagNNConfig.py.

103 def getUndeclaredBtagVars(BTaggingCollection):
104  #
105  # In the case of b-tagging we should really declare these
106  # variables using WriteDecorHandle, but this is very much a work
107  # in progress.
108  #
109  # We should revisit this once in a while, last time this was
110  # checked was:
111  #
112  # - 20210602
113  #
114  undeclared_btag = [
115  'JetFitter_N2Tpair',
116  'JetFitter_energyFraction',
117  'JetFitter_mass',
118  'JetFitter_nSingleTracks',
119  'JetFitter_nTracksAtVtx',
120  'JetFitter_nVTX',
121  'JetFitter_significance3d',
122  'SV1_L3d',
123  'SV1_Lxy',
124  'SV1_N2Tpair',
125  'SV1_NGTinSvx',
126  'SV1_deltaR',
127  'SV1_efracsvx',
128  'SV1_masssvx',
129  'SV1_significance3d',
130  'BTagTrackToJetAssociator',
131  ]
132  return [f'{BTaggingCollection}.{x}' for x in undeclared_btag]
133 

◆ GNNToolCfg()

def python.FlavorTagNNConfig.GNNToolCfg (   flags,
  NNFile,
**  options 
)

Definition at line 50 of file FlavorTagNNConfig.py.

50 def GNNToolCfg(flags, NNFile, **options):
51  acc = ComponentAccumulator()
52 
53  # this map lets us change the names of EDM inputs with respect to
54  # the values we store in the saved NN
55  remap = {}
56 
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')
63 
64  mkey = 'variableRemapping'
65  options[mkey] = remap | options.get(mkey,{})
66 
67  gnntool = CompFactory.FlavorTagDiscriminants.GNNTool(
68  name='decorator',
69  nnFile=NNFile,
70  nnSharingService=addAndReturnSharingSvc(flags, acc),
71  **options)
72 
73  acc.setPrivateTools(gnntool)
74 
75  return acc
76 

◆ MultifoldGNNCfg()

def python.FlavorTagNNConfig.MultifoldGNNCfg (   flags,
  BTaggingCollection,
  TrackCollection,
  FlipConfig = "STANDARD",
  nnFilePaths = None,
  remapping = {} 
)

Definition at line 181 of file FlavorTagNNConfig.py.

181 def MultifoldGNNCfg(
182  flags,
183  BTaggingCollection,
184  TrackCollection,
185  FlipConfig="STANDARD",
186  nnFilePaths=None,
187  remapping={},
188 ):
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}'
194  veto_list = getStaticTrackVars(TrackCollection)
195  veto_list += getUndeclaredBtagVars(BTaggingCollection)
196  acc = ComponentAccumulator()
197  acc.addEventAlgo(
198  CompFactory.FlavorTagDiscriminants.BTagDecoratorAlg(
199  name=algname,
200  container=BTaggingCollection,
201  constituentContainer=TrackCollection,
202  decorator=CompFactory.FlavorTagDiscriminants.MultifoldGNNTool(
203  name=f'{algname}_tool',
204  foldHashName='jetFoldHash',
205  nnFiles=nnFilePaths,
206  flipTagConfig=FlipConfig,
207  variableRemapping=remapping,
208  nnSharingService=addAndReturnSharingSvc(flags, acc)
209  ),
210  undeclaredReadDecorKeys=veto_list,
211  )
212  )
213  return acc
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
python.FlavorTagNNConfig.GNNToolCfg
def GNNToolCfg(flags, NNFile, **options)
Definition: FlavorTagNNConfig.py:50
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.FlavorTagNNConfig.getStaticTrackVars
def getStaticTrackVars(TrackCollection)
Definition: FlavorTagNNConfig.py:77
python.FlavorTagNNConfig.DL2ToolCfg
def DL2ToolCfg(flags, NNFile, **options)
Definition: FlavorTagNNConfig.py:13
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.FlavorTagNNConfig.MultifoldGNNCfg
def MultifoldGNNCfg(flags, BTaggingCollection, TrackCollection, FlipConfig="STANDARD", nnFilePaths=None, remapping={})
Definition: FlavorTagNNConfig.py:181
python.FlavorTagNNConfig.addAndReturnSharingSvc
def addAndReturnSharingSvc(flags, ca)
Definition: FlavorTagNNConfig.py:8
python.FlavorTagNNConfig.getUndeclaredBtagVars
def getUndeclaredBtagVars(BTaggingCollection)
Definition: FlavorTagNNConfig.py:103
python.FlavorTagNNConfig.FlavorTagNNCfg
def FlavorTagNNCfg(flags, BTaggingCollection, TrackCollection, NNFile, FlipConfig="STANDARD", variableRemapping={})
Definition: FlavorTagNNConfig.py:134