ATLAS Offline Software
hypoConfigBuilder.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 from TrigHLTJetHypo.FastReductionAlgToolFactory import toolfactory
4 
5 # import modules concerned with extracting scenario paramters
6 # from a scenario string
7 from TrigHLTJetHypo.scenario_ht import scenario_ht
8 from TrigHLTJetHypo.scenario_dipz import scenario_dipz
9 from TrigHLTJetHypo.scenario_htdipz import scenario_htdipz
10 from TrigHLTJetHypo.scenario_dijet import scenario_dijet
11 from TrigHLTJetHypo.scenario_fbdjnoshared import scenario_fbdjnoshared
12 from TrigHLTJetHypo.scenario_fbdjshared import scenario_fbdjshared
13 from TrigHLTJetHypo.scenario_simple import scenario_simple
14 
15 from TrigHLTJetHypo.prefilter_mask import prefilter_mask
16 from TrigHLTJetHypo.prefilter_ptrange import prefilter_ptrange
17 from TrigHLTJetHypo.prefilter_maxmult import prefilter_maxmult
18 from TrigHLTJetHypo.prefilter_clean import prefilter_clean
19 
20 from TrigHLTJetHypo.hypoToolDisplay import hypoToolDisplay
21 
22 
23 
24 from TrigHLTJetHypo.makeConditionFilterConfigurer import (
25  makeConditionFilterConfigurer,
26 )
27 
28 from TrigHLTJetHypo.make_repeatedCondConfigurer import (
29  make_repeatedCond,
30  make_repeatedCondCfgFromParams,
31 )
32 
33 from DecisionHandling.TrigCompositeUtils import isLegId, getLegIndexInt
34 
35 from AthenaCommon.Logging import logging
36 from AthenaCommon.Constants import DEBUG
37 
38 import re
39 
40 logger = logging.getLogger( __name__)
41 logger.setLevel(DEBUG)
42 
43 # Dictionary to interpret / map scenario aliases into actual scenario strings that can be understood by scenario_XX.py
44 aliasesDict = {
45  'DJMASS200j20' : 'DIJET20j12ptXX200djmass',
46  'DJMASS350j20' : 'DIJET20j12ptXX350djmass',
47  'DJMASS300j35' : 'DIJET35j12ptXX300djmass',
48  'DJMASS500j35' : 'DIJET35j12ptXX500djmass',
49  'DJMASS700j35' : 'DIJET35j12ptXX700djmass',
50  'DJMASS1000j35' : 'DIJET35j12ptXX1000djmass',
51  'DJMASS700j40' : 'DIJET40j12ptXX700djmass',
52  'DJMASS700j50x0eta240' : 'DIJET50j12ptXX0j12eta240XX700djmass',
53  'DJMASS700j80x0eta240' : 'DIJET80j12ptXX0j12eta240XX700djmass',
54  'DJMASS900j50' : 'DIJET50j12ptXX900djmass',
55  'DJMASS1000j50' : 'DIJET50j12ptXX1000djmass',
56  'DJMASS1000j50dphi240' : 'DIJET50j12ptXX1000djmassXXdjdphi240',
57  'DJMASS900j50dphi240' : 'DIJET50j12ptXX900djmassXXdjdphi240',
58  'DJMASS1000j50dphi200x400deta' : 'DIJET50j12ptXX1000djmassXXdjdphi200XX400djdeta',
59  'DJMASS900j50dphi200x400deta' : 'DIJET50j12ptXX900djmassXXdjdphi200XX400djdeta',
60  'DJMASS1000j50dphi260x200deta' : 'DIJET50j12ptXX1000djmassXXdjdphi260XX200djdeta',
61  'DJMASS900j50dphi260x200deta' : 'DIJET50j12ptXX900djmassXXdjdphi260XX200djdeta',
62  'DJMASS1000j30dphi260x200deta' : 'DIJET30j12ptXX1000djmassXXdjdphi260XX200djdeta',
63  'DJMASS900j30dphi260x200deta' : 'DIJET30j12ptXX900djmassXXdjdphi260XX200djdeta',
64  'DJMASS1000j50x200deta' : 'DIJET50j12ptXX1000djmassXX200djdeta',
65  'DJMASS900j50x200deta' : 'DIJET50j12ptXX900djmassXX200djdeta',
66 
67  'DJMASS1000j50dphi260' : 'DIJET50j12ptXX1000djmassXXdjdphi260',
68  'DJMASS900j50dphi260' : 'DIJET50j12ptXX900djmassXXdjdphi260',
69 
70 }
71 
73  """make a repeated condition configurer for the fast reduction
74  root node. This will will have a single accapt all internal node."""
75 
76  toolclass, name = toolfactory('all')
77  args = {'name': name}
78  conditionMakers = [toolclass(**args)]
79 
80  configurer = make_repeatedCond(tree_id=0,
81  tree_pid=0,
82  clique=-1,
83  conditionMakers=conditionMakers)
84 
85  return configurer
86 
88  """the parameter object passed in is built in the modules handling
89  scenarios. It contains the information needed to build the
90  configuration AlgTool that intialiases a hypo helper AlgTool"""
91 
92  # check that each Condition has a Filter index.
93  # the index is -1 for no Condition filtering.
94  assert len(params.repcondargs) == len(params.filterparam_inds)
95  assert len(params.filterparam_inds) >= len(params.filterparams)
96 
97  # FastReducer root node
98  repcondobjs = [make_root_repcondconfig()]
99  for ra in params.repcondargs:
100  repcondobjs.append(make_repeatedCondCfgFromParams(ra))
101 
102 
103  # filter for FastReducer root node (use position 0)
104  filtConditionMakers = []
105  filtConditionMakerInds = [-1] # no condition filtering for root
106 
107  for ra_ind in params.filterparam_inds:
108  if ra_ind != -1:
109  ra = params.filterparams[ra_ind]
110  filtConditionMakers.append(makeConditionFilterConfigurer(ra))
111  filtConditionMakerInds.append(len(filtConditionMakers)-1)
112  else:
113  filtConditionMakerInds.append(-1)
114 
115  toolclass, name = toolfactory('HelperToolConfigTool')
116 
117  vals = {'name': name,
118  'conditionMakers': repcondobjs,
119  'filterMakers': filtConditionMakers,
120  'filterMakerInds': filtConditionMakerInds,
121  'treeVector': params.treevec,
122  'leafVector': params.leafvec,
123  }
124 
125  return toolclass(**vals)
126 
127 
128 def process_simple(chain_parts):
129  """Obtain the paramters needed to build an AlgTool
130  to initialise a jet hypo HelperAlgTool"""
131 
132  # obtain a list of parameter objects that will be used
133  # to build a helper config AlgTools
134  helper_params = scenario_simple(chain_parts)
135 
136  # build the helper config AlgTools
137  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
138  helper_params]
139 
140  return helperconfigobjs
141 
142 
143 def process_dipz(scenario, chainPartInd):
144  """Obtain the paramters needed to build an AlgTool
145  to initialise a jet hypo HelperAlgTool"""
146 
147  # obtain a list of parameter objects that will be used
148  # to build a helper config AlgTools
149  helper_params = scenario_dipz(scenario, chainPartInd)
150 
151  # build the helper config AlgTools
152  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
153  helper_params]
154 
155  return helperconfigobjs
156 
157 def process_ht(scenario, chainPartInd):
158  """Obtain the paramters needed to build an AlgTool
159  to initialise a jet hypo HelperAlgTool"""
160 
161  # obtain a list of parameter objects that will be used
162  # to build a helper config AlgTools
163  helper_params = scenario_ht(scenario, chainPartInd)
164 
165  # build the helper config AlgTools
166  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
167  helper_params]
168 
169  return helperconfigobjs
170 
171 def process_htdipz(scenario, chainPartInd):
172  """Obtain the paramters needed to build an AlgTool
173  to initialise a jet hypo HelperAlgTool"""
174 
175  # obtain a list of parameter objects that will be used
176  # to build a helper config AlgTools
177  helper_params = scenario_htdipz(scenario, chainPartInd)
178 
179  # build the helper config AlgTools
180  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
181  helper_params]
182 
183  return helperconfigobjs
184 
185 def process_dijet(scenario, chainPartInd):
186  """Obtain the paramters needed to build an AlgTool
187  to initialise a jet hypo HelperAlgTool"""
188 
189  # obtain a list of parameter objects that will be used
190  # to build a helper config AlgTools
191  helper_params = scenario_dijet(scenario, chainPartInd)
192 
193  # build the helper config AlgTools
194  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
195  helper_params]
196 
197  return helperconfigobjs
198 
199 
200 def process_fbdjshared(scenario, chainPartInd):
201  """Obtain the paramters needed to build an AlgTool
202  to initialise a jet hypo HelperAlgTool"""
203 
204  # obtain a list of parameter objects that will be used
205  # to build a helper config AlgTools
206  helper_params = scenario_fbdjshared(scenario, chainPartInd)
207 
208  # build the helper config AlgTools
209  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
210  helper_params]
211 
212  return helperconfigobjs
213 
214 
215 def process_fbdjnoshared(scenario, chainPartInd):
216  """Obtain the paramters needed to build an AlgTool
217  to initialise a jet hypo HelperAlgTool"""
218 
219  # obtain a list of parameter objects that will be used
220  # to build a helper config AlgTools
221  helper_params = scenario_fbdjnoshared(scenario, chainPartInd)
222 
223  # build the helper config AlgTools
224  helperconfigobjs = [buildHypoHelperConfigTool(params) for params in
225  helper_params]
226 
227  return helperconfigobjs
228 
229 
230 def process_nonsimple(scenario, chainPartInd):
231  """Maker a list of helper tool config tool for a non-simple scenario.
232  Note: a non-simple scenario will produce more than HelperToolConfigTool
233  if jet sharing among Conditions is required."""
234 
235  # interpret scenario aliases
236  if scenario in aliasesDict.keys(): scenario = aliasesDict[scenario]
237 
238  router = {
239  'Z': process_dipz,
240  'HTZ': process_htdipz,
241  'HT': process_ht,
242  'DIJET': process_dijet,
243  'FBDJSHARED': process_fbdjshared,
244  'FBDJNOSHARED': process_fbdjnoshared,
245  }
246 
247  # get scenario stub and make sure is correct
248  pattern = r'^(?P<stub>[A-Z]+)'
249  rgx = re.compile(pattern)
250  m = rgx.match(scenario)
251  assert m is not None,'No scenario stub was found'
252  groupdict = m.groupdict()
253  assert groupdict['stub'] in router,'scenario stub ({}) not recognized'.format(groupdict['stub'])
254 
255  return router[groupdict['stub']](scenario, chainPartInd) # list of HelperToolConfigTool
256 
257 
259  """Create HelperToolConfigTool instances. Each instance
260  configures a FastReduction tree. Chain parts with the 'simple' scenario
261  are used to form a single HelperToolConfigTool. The information
262  may be spread over a number of chain parts.
263 
264  There is at most one chain part with a non-simple scenario.
265  This may give rise to > 1 HelperToolConfigTool instance - as this
266  is how jet sharing among Conditions is handled.
267 
268  If there are both simple and non-simple scenarios, there will be
269  n HelperToolConfigTool instances, where n >=2: one for the simple
270  scenario chain parts, and n-1 for the non-simple scenario.
271  """
272 
273  chain_parts = chain_dict['chainParts']
274 
275  simple_chainparts = [
276  cp for cp in chain_parts if cp['hypoScenario'] == 'simple']
277  simple_cpis = [cp['chainPartIndex'] for cp in simple_chainparts]
278  # check that all the simple scenario parts occur before
279  # non-simple scenario chain parts
280 
281  if simple_cpis:
282  assert simple_cpis == sorted(simple_cpis), "disordered chain parts"
283  assert simple_cpis[-1] - simple_cpis[0] == len(simple_cpis) - 1, "nonsequential chainParts"
284  helperToolConfigTools = []
285 
286  # check for SHARED markers (chainPart['tboundary'] = 'SHARED')
287  # in the list of simple chain parts.
288  # Get a tree configuration each time SHARED == 1 is encountered.
289  if simple_chainparts:
290 
291  assert simple_chainparts[-1]['tboundary'] == ''
292 
293  tree_cps = []
294  for cp in simple_chainparts:
295  tree_cps.append(cp)
296  if cp['tboundary'] == 'SHARED':
297  helperToolConfigTools.extend(process_simple(tree_cps))
298  tree_cps = []
299 
300  # tree_cps cannot be empty here
301  assert tree_cps
302  helperToolConfigTools.extend(process_simple(tree_cps))
303 
304  scenario_chainparts =[
305  cp for cp in chain_parts if cp['hypoScenario'] != 'simple']
306 
307  if scenario_chainparts:
308  for scenario_chainpart in scenario_chainparts:
309  # scenario_chainpart = scenario_chainparts[0]
310 
311  # We only allow threshold != 0 for the simple scenario.
312  assert scenario_chainpart['threshold'] == '0'
313 
314  scenario = scenario_chainpart['hypoScenario']
315  # find the chain part index for a non-simple scenario.
316  # assume simple is processed before non-simple, and that
317  # there is at most one non-simple chainpart.
318  # chainPartInd is needed to report passing jets to the
319  # trigger framework.
320  chainPartInd = scenario_chainpart['chainPartIndex']
321 
322  helperToolConfigTools.extend(process_nonsimple(scenario,
323  chainPartInd))
324 
325  return helperToolConfigTools
326 
327 
329  """Set up the prefilters fo the chain."""
330 
331  pf_strings = []
332  chain_parts = [cp for cp in chain_dict['chainParts'] if
333  cp['signature'] == 'Jet' and 'prefilters' in cp]
334 
335  [pf_strings.extend(cp['prefilters']) for cp in chain_parts]
336 
337  # if not pre filter strings (pf_strings) are found in the chainDict,
338  # a PassThroughFilter configurer is made.
339 
340  if not pf_strings:
341  return []
342 
343  # route the prefilter strings to the appropriate handler
344  prefilter_router = {
345  'MASK': prefilter_mask,
346  'PTRANGE': prefilter_ptrange,
347  'MAXMULT': prefilter_maxmult,
348  'CLEAN': prefilter_clean,
349  }
350 
351  pattern = r'(?P<stub>[A-Z]*)'
352  rgx = re.compile(pattern)
353 
354  filters = []
355  for pf_string in pf_strings:
356  # get prefilter stub and make sure is correct
357  m = rgx.match(pf_string)
358  assert m is not None,'No prefilter stub was found'
359  groupdict = m.groupdict()
360  assert groupdict['stub'] in prefilter_router,'prefilter stub ({}) not recognized'.format(groupdict['stub'])
361  filters.append(prefilter_router[groupdict['stub']](pf_string))
362 
363  return filters
364 
365 
366 def getLabelIndices(chain_dict):
367 
368  start_index = 0
369  if isLegId(chain_dict['chainName']):
370  start_index = getLegIndexInt(chain_dict['chainName'])
371 
372  end_index = start_index + len(chain_dict['chainParts'])
373 
374  return start_index, end_index
375 
376 
377 def hypotool_from_chaindict(chain_dict, visit_debug=False):
378 
379  toolfactory.reset()
380 
381  if visit_debug:
382  fn = chain_dict['chainName'] + '_chaindict.log'
383  from pprint import pprint
384  with open(fn, 'w') as fh:
385  pprint(chain_dict, fh)
386 
387 
388  helperToolConfigTools = make_fastreduction_configurers(chain_dict)
389 
390  prefilterMakers = make_prefilter_configurers(chain_dict)
391 
392  toolclass, name = toolfactory('helper_tool')
393  args = {'name': name,
394  'HypoConfigurers': helperToolConfigTools,
395  'prefilterMakers': prefilterMakers
396  }
397 
398  helper_tool = toolclass(**args)
399 
400  toolclass, name = toolfactory('hypo_tool')
401 
402  startLabelIndex, endLabelIndex = getLabelIndices(chain_dict)
403 
404  args = {'name': chain_dict['chainName'],
405  # for reporting passing jets:
406  'visit_debug': visit_debug,
407  'helper_tool': helper_tool,
408  'chain_name': chain_dict['chainName'],
409  'startLabelIndex': startLabelIndex,
410  'endLabelIndex': endLabelIndex,
411  }
412 
413  hypo_tool = toolclass(**args)
414  hypo_tool.visit_debug = visit_debug
415 
416  if (visit_debug):
417  hypoToolDisplay(hypo_tool,
418  do_dot=True)
419 
420  return hypo_tool
421 
422 if __name__ == '__main__':
423  cd = {'EBstep': '',
424  'L1item': 'L1_EM22VHI',
425  'alignmentGroups': ['Egamma', 'JetMET', 'JetMET'],
426  'chainCounter': 1451,
427  'chainMultiplicities': [1, 2, 2],
428  'chainName': 'leg001_HLT_g25_medium_2j35_pf_ftf_0eta490_bdl1r77_2j35_pf_ftf_0eta490_L1EM22VHI',
429  'chainNameHash': 4053501929,
430  'chainParts': [{'L1threshold': 'FSNOSEED',
431  'addInfo': [],
432  'alignmentGroup': 'JetMET',
433  'bConfig': [],
434  'bMatching': [],
435  'bTag': 'bdl1r77',
436  'bTracking': '',
437  'bsel': '',
438  'tausel': '',
439  'chainPartIndex': 1,
440  'chainPartName': '2j35_pf_ftf_0eta490_bdl1r77',
441  'clusterCalib': 'em',
442  'constitMod': '',
443  'constitType': 'pf',
444  'etaRange': '0eta490',
445  'exotHypo': [],
446  'extra': '',
447  'hypoScenario': 'simple',
448  'ionopt': 'noion',
449  'jetCalib': 'default',
450  'jvt': '',
451  'momCuts': '',
452  'multiplicity': '2',
453  'prefilters': [],
454  'recoAlg': 'a4',
455  'scan': 'FS',
456  'sigFolder': ['Bjet'],
457  'signature': 'Bjet',
458  'smc': 'nosmc',
459  'subSigs': ['Bjet'],
460  'tboundary': '',
461  'threshold': '35',
462  'topo': [],
463  'trigType': 'j',
464  'trkopt': 'ftf',
465  'trkpresel': 'nopresel'},
466  {'L1threshold': 'FSNOSEED',
467  'addInfo': [],
468  'alignmentGroup': 'JetMET',
469  'bConfig': [],
470  'bMatching': [],
471  'bTag': '',
472  'bTracking': '',
473  'bsel': '',
474  'tausel': '',
475  'chainPartIndex': 2,
476  'chainPartName': '2j35_pf_ftf_0eta490',
477  'clusterCalib': 'em',
478  'constitMod': '',
479  'constitType': 'pf',
480  'etaRange': '0eta490',
481  'exotHypo': [],
482  'extra': '',
483  'hypoScenario': 'simple',
484  'ionopt': 'noion',
485  'jetCalib': 'default',
486  'jvt': '',
487  'momCuts': '',
488  'multiplicity': '2',
489  'prefilters': [],
490  'recoAlg': 'a4',
491  'scan': 'FS',
492  'sigFolder': ['Jet'],
493  'signature': 'Jet',
494  'smc': 'nosmc',
495  'subSigs': ['Jet'],
496  'tboundary': '',
497  'threshold': '35',
498  'topo': [],
499  'trigType': 'j',
500  'trkopt': 'ftf',
501  'trkpresel': 'nopresel'}],
502  'eventBuildType': '',
503  'extraComboHypos': [],
504  'groups': ['Support:Legacy', 'RATE:EgammaBjet', 'BW:BJet'],
505  'mergingOffset': -1,
506  'mergingOrder': [],
507  'mergingStrategy': 'auto',
508  'monGroups': [],
509  'prescale': 1,
510  'sigDicts': {'Bjet': ['Bjet'], 'Egamma': ['Photon'], 'Jet': ['Jet']},
511  'sigFolder': [],
512  'signature': 'Bjet',
513  'signatures': ['Photon', 'Bjet', 'Jet'],
514  'stream': ['Main'],
515  'subSigs': [],
516  'topo': [],
517  'topoStartFrom': False}
518 
520 
521 
python.hypoConfigBuilder.getLabelIndices
def getLabelIndices(chain_dict)
Definition: hypoConfigBuilder.py:366
python.hypoConfigBuilder.process_dipz
def process_dipz(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:143
python.scenario_fbdjshared.scenario_fbdjshared
def scenario_fbdjshared(scenario, chainPartInd)
Definition: scenario_fbdjshared.py:9
vtune_athena.format
format
Definition: vtune_athena.py:14
python.scenario_htdipz.scenario_htdipz
def scenario_htdipz(scenario, chainPartInd)
Definition: scenario_htdipz.py:62
python.scenario_ht.scenario_ht
def scenario_ht(scenario, chainPartInd)
Definition: scenario_ht.py:64
python.makeConditionFilterConfigurer.makeConditionFilterConfigurer
def makeConditionFilterConfigurer(filterparams)
Definition: makeConditionFilterConfigurer.py:12
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
python.scenario_dipz.scenario_dipz
def scenario_dipz(scenario, chainPartInd)
Definition: scenario_dipz.py:65
python.hypoConfigBuilder.process_ht
def process_ht(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:157
python.hypoConfigBuilder.process_fbdjshared
def process_fbdjshared(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:200
python.scenario_dijet.scenario_dijet
def scenario_dijet(scenario, chainPartInd)
Definition: scenario_dijet.py:73
python.hypoConfigBuilder.process_nonsimple
def process_nonsimple(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:230
python.hypoConfigBuilder.process_htdipz
def process_htdipz(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:171
python.make_repeatedCondConfigurer.make_repeatedCond
def make_repeatedCond(tree_id, tree_pid, clique, multiplicity=1, chainPartInd=-1, conditionMakers=[], invert=False)
Definition: make_repeatedCondConfigurer.py:11
Constants
some useful constants -------------------------------------------------—
python.hypoConfigBuilder.process_dijet
def process_dijet(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:185
python.hypoConfigBuilder.buildHypoHelperConfigTool
def buildHypoHelperConfigTool(params)
Definition: hypoConfigBuilder.py:87
python.hypoConfigBuilder.hypotool_from_chaindict
def hypotool_from_chaindict(chain_dict, visit_debug=False)
Definition: hypoConfigBuilder.py:377
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
python.scenario_fbdjnoshared.scenario_fbdjnoshared
def scenario_fbdjnoshared(scenario, chainPartInd)
Definition: scenario_fbdjnoshared.py:70
python.TrigCompositeUtils.getLegIndexInt
def getLegIndexInt(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:21
Trk::open
@ open
Definition: BinningType.h:40
python.hypoToolDisplay.hypoToolDisplay
def hypoToolDisplay(tool, do_dot=False, dotdir='')
Definition: hypoToolDisplay.py:72
python.hypoConfigBuilder.make_fastreduction_configurers
def make_fastreduction_configurers(chain_dict)
Definition: hypoConfigBuilder.py:258
python.hypoConfigBuilder.process_simple
def process_simple(chain_parts)
Definition: hypoConfigBuilder.py:128
python.scenario_simple.scenario_simple
def scenario_simple(chain_parts)
Definition: scenario_simple.py:274
python.hypoConfigBuilder.make_prefilter_configurers
def make_prefilter_configurers(chain_dict)
Definition: hypoConfigBuilder.py:328
python.make_repeatedCondConfigurer.make_repeatedCondCfgFromParams
def make_repeatedCondCfgFromParams(repcondarg)
Definition: make_repeatedCondConfigurer.py:44
python.hypoConfigBuilder.process_fbdjnoshared
def process_fbdjnoshared(scenario, chainPartInd)
Definition: hypoConfigBuilder.py:215
python.hypoConfigBuilder.make_root_repcondconfig
def make_root_repcondconfig()
Definition: hypoConfigBuilder.py:72
python.FastReductionAlgToolFactory.toolfactory
toolfactory
Definition: FastReductionAlgToolFactory.py:106