ATLAS Offline Software
KeyStore.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
2 
3 # @file: AthenaCommon/python/KeyStore.py
4 # @author: Sebastien Binet (binet@cern.ch)
5 
6 
7 __version__ = '$Revision: 1.11 $'
8 __author__ = 'Sebastien Binet <binet@cern.ch>'
9 
10 __all__ = [ "CfgItemList", "CfgKeyStore",
11  "loadKeyStoreFromPoolFile",
12  "keystore_diff" ]
13 
14 import weakref
15 import os
16 import copy
17 import re
18 
19 _allowedTriggerKeys = re.compile( r"(?P<KlassName>.*?)#HLTAutoKey.*\*$" )
20 
21 
22 from AthenaCommon.Configurable import Configurable
23 
24 
25 from AthenaCommon.Logging import logging
26 msg = logging.getLogger( 'CfgItemList' )
27 
29  """ Python class to hold the so-called output ItemList of a given JobOption.
30  This class allows to fine tune what will be written out in a POOL file, as
31  it has a switch to prevent people from wildcarding containers (ie: no
32  outStream.ItemList += [ 'SomeContainer#*' ] allowed).
33  This check can however be disabled on a per CfgItemList instance basis:
34  @code
35  >>> mycfg = CfgItemList( allowWildcard = True )
36  @endcode
37 
38  A typical use would look like:
39  @code
40  esdList = CfgItemList( 'esd' )
41  # fetch an already existing list (using the singleton-ness of Configurables)
42  esdList += CfgItemList( 'InDetEsd' )
43  # create a list on the fly and add it to the ESD list
44  esdList += CfgItemList(
45  'CaloEsd',
46  items = [ 'CaloCellContainer#CaloCells',
47  'CaloClusterContainer#Clusters' ]
48  )
49  # special case of trigger
50  esdList += CfgItemList(
51  'TrigEsd',
52  items = [ 'JetCollection#HLT_AutoKey#*' ],
53  allowWildCard = True
54  )
55  # fill the stream's output list
56  from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
57  StreamESD = AthenaPoolOutputStream('StreamESD')
58  StreamESD.ItemList = esdList()
59  @endcode
60  """
61  instances = weakref.WeakValueDictionary() # all item lists (by name)
62  __slots__ = { '_name' : 'CfgItemList',
63  '__weakref__' : None, # required for dealing w/ weak refs
64  '_children' : None,
65  '_items' : None, # list of the form ['CppCont#Key',]
66  '_allowWildCard' : False }
67 
68  def __new__(cls, *p, **kw):
69 
70  if 'name' not in kw:
71  if len(p) == 0: kw['name'] = cls.__slots__['_name']
72  else: kw['name'] = p[0]
73 
74  kw['_name'] = kw['name']
75 
76  # already created...
77  if kw['name'] in cls.instances.keys():
78  return cls.instances[kw['name']]
79 
80  # create instance
81  obj = object.__new__(cls)
82  object.__init__(obj)
83 
84  del kw['name']
85 
86  for k in cls.__slots__.keys():
87  if k.startswith('__'): continue
88  if k in kw.keys(): v = kw[k]
89  else: v = cls.__slots__[k]
90  setattr(obj, k, v)
91 
92  # update repository of instances
93  cls.instances[kw['_name']] = obj
94 
95  return obj
96 
97  def __init__( self, *p, **kwargs ):
98 
99  # call base class init
100  super( CfgItemList, self ).__init__()
101 
102  if not self._children: self._children = []
103  if not self._items: self._items = []
104 
105  items = []
106  if 'items' in kwargs:
107  items = kwargs['items']
108 
109  if 'allowWildCard' in kwargs:
110  self._allowWildCard = kwargs['allowWildCard']
111 
112  msg.verbose( "create [%s] items = %r allowWildCard = %s",
113  self.name(), items, self._allowWildCard )
114 
115  if len(items) > 0: self.add( items )
116  return
117 
118 
119  def __getstate__( self ):
120  d = { '_name' : self._name,
121  '_children' : self._children,
122  '_items' : self._items,
123  '_allowWildCard' : self._allowWildCard,
124  }
125  return d
126 
127  def __setstate__( self, dct ):
128  for k,v in dct.items():
129  setattr(self, k, v)
130  return
131 
132  def __getnewargs__( self ):
133  return (self.name(),)
134 
135 
136  def __deepcopy__( self, memo ):
137  newconf = super( CfgItemList, self).__deepcopy__(memo)
138  newconf._children = copy.deepcopy(self._children)
139  newconf._items = copy.deepcopy(self._items)
140  newconf._allowWildCard = copy.deepcopy(self._allowWildCard)
141  return newconf
142 
143  # to allow a few basic sanity checks, as well as nice syntax
144  def __len__( self ):
145  return len( self._children )
146 
147  def __iter__( self ):
148  return iter( self._children )
149 
150  # hierarchy building, and ownership rules of children
151  def __iadd__( self, itemLists ):
152  if not type(itemLists) in (list,tuple):
153  itemLists = ( itemLists, )
154 
155  for cfg in itemLists:
156  # prevent type mismatches
157  if not isinstance( cfg, CfgItemList ):
158  raise TypeError( "'%r' is not a CfgItemList" % cfg )
159 
160  # filters dupes; usually "ok" (backdoor should catch them)
161  for c in self._children:
162  if c._name == cfg._name:
163  msg.error( '%s already exists !! (in %s)',
164  cfg._name, self._name )
165  msg.error( 'attempt to add a duplicate ... dupe ignored' )
166  break
167  else:
168  self._children.append( cfg )
169  try:
170  setattr(self, cfg._name, cfg)
171  except AttributeError:
172  pass
173 
174  return self
175 
176  def __getattr__( self, attr ):
177 
178  if attr in CfgItemList.__slots__:
179  return super(CfgItemList, self).__getattribute__(attr)
180 
181  for c in self.children():
182  if c._name == attr:
183  return c
184 
185  return super(CfgItemList, self).__getattribute__(attr)
186 
187 
189 
190  def __setattr__( self, k, v ):
191  if k in CfgItemList.__slots__:
192  return super(CfgItemList, self).__setattr__(k, v)
193  for c in self.children():
194  if c.name() == k:
195  return setattr(c, k, v)
196  try:
197  return super(CfgItemList, self).__setattr__(k, v)
198  except AttributeError:
199  pass
200 
201  def __delattr__( self, attr ):
202  for c in self._children:
203  if c._name == attr:
204  self._children.remove( c )
205 
206  def __bool__(self):
207  return True
208 
209  def removeItem( self, item ):
210  if not type(item) in ( type([]), type(()) ):
211  items = ( item, )
212  else:
213  items = item
214  for item in items:
215  for i in self._items:
216  if i == item:
217  self._items.remove( i )
218  return
219 
220  def removeAllItems( self, item ):
221  self.removeItem( item )
222  for c in self._children:
223  c.removeAllItems( item )
224  return
225 
226  def remove( self, items ):
227  if not type(items) in ( type([]), type(()) ):
228  items = [ items ]
229 
230  self._children = [ e for e in self._children if e not in items ]
231 
232  def removeAll( self ):
233  self.remove( self._children )
234 
235  def clear( self ):
236  self.removeAll()
237  self._items = []
238 
239  def setup( self ):
240  msg.debug( 'setup of Output ItemList: %s', self._name )
241  if msg.isEnabledFor( logging.VERBOSE ):
242  msg.verbose( 'layout of sequence: %s\n%s', self._name, str(self) )
243 
244  for child in self.children():
245  child.setup()
246 
247  def getProperties( self ):
248  props = {}
249  for item in self._items:
250  cppType = item.split("#")[0]
251  sgKey = item.replace( cppType+"#", '' )
252  if cppType in props:
253  if sgKey not in props[cppType]:
254  props[cppType].append( sgKey )
255  else:
256  props[cppType] = [ sgKey ]
257  return props
258 
259  def _addItem( self, i ):
260  if i.count( "*" ) <= 0:
261  if i not in self._items:
262  self._items.append( i )
263  elif (self._allowWildCard or _allowedTriggerKeys.match(i)):
264  if i not in self._items:
265  self._items.append( i )
266  else:
267  msg.warning( "Attempt to add an invalid element: '%s'", i )
268  msg.warning( " ==> Ignoring invalid element: '%s'", i )
269  return
270 
271  def add( self, arg ):
272  if isinstance(arg, (list, tuple) ):
273  for a in set(arg):
274  self._addItem( a )
275  elif isinstance(arg, str):
276  self._addItem( arg )
277  elif isinstance(arg, dict):
278  new = arg.copy()
279  for k in new.keys():
280  if not isinstance(new[k], (list,tuple)):
281  new[k] = ( new[k], )
282  self.add( [ '%s#%s' % (k,e) for e in new[k] ] )
283  else:
284  msg.error( "Could not add '%r' of type '%s'", arg, type(arg) )
285  return
286 
287  def has_item( self, item ):
288  from fnmatch import fnmatchcase as match
289  for i in self._items:
290  if match(i, item):
291  return True
292 
293 
294  for c in self._children:
295  if c.has_item( item ):
296  return True
297  return False
298 
299  def allowWildCard( self, allow ):
300  self._allowWildCard = allow
301 
302  def __call__( self, key = None ):
303  if key is not None:
304  items = set( [ i for i in self._items if i.startswith(key+"#") ] )
305  else:
306  items = set( self._items )
307  for c in self._children:
308  try:
309  for i in c.list( key ):
310  items.add( i )
311  except AttributeError as err:
312  msg.warning( err )
313  pass
314  items = [ i for i in items ]
315  items.sort()
316  return items
317 
318  def list( self, key = None ):
319  return self( key )
320 
321  def dict( self ):
322  props = self.getProperties()
323  for c in self._children:
324  props.update( c.dict() )
325  for k in props.keys():
326  props[k] = sorted(props[k])
327  return props
328 
329  def __repr__( self ):
330  return '<%s/%s at %s>' % (self.__class__.__name__,self._name,
331  hex(id(self)))
332 
333  def __str__( self, indent = 0,
334  headerLastIndentUnit=Configurable.indentUnit ):
335  global msg # to print some info depending on output level
336  indentStr = indent * Configurable.indentUnit
337  # print header
338  title = "%s/%s" % ( self.__class__.__name__, self._name )
339 
340  # print line to easily see start-of-configurable
341  if indent > 0:
342  headerIndent = (indent-1)*Configurable.indentUnit \
343  + headerLastIndentUnit
344  else:
345  headerIndent = ''
346 
347  rep = Configurable._printHeader( headerIndent, title )
348  rep += os.linesep
349 
350  # print own properties
351  props = self.getProperties()
352  if not props:
353  #rep += indentStr + '|-<no output-item-list>' + os.linesep
354  rep += indentStr + '| ' + os.linesep
355  else:
356  # get property name with
357  nameWidth = 0
358  for p in props.keys():
359  nameWidth=max(nameWidth,len(p))
360  for p, v in props.items():
361  # start with indent and property name
362  prefix = indentStr + '|-%-*s' % (nameWidth,p)
363  # add memory address for debugging (not for defaults)
364  if msg.isEnabledFor( logging.DEBUG ):
365  address = ' @%11s' % hex(id(v))
366  prefix += address
367  # add value and default
368  strVal = repr(v)
369  # add the value
370  line = prefix + ' = ' + strVal
371  # add the line to the total string
372  rep += line + os.linesep
373  # print configurables + their properties, or loop over sequence
374  for cfg in self.allChildren():
375  rep += cfg.__str__( indent + 1, '|=' ) + os.linesep
376 
377  # print line to easily see end-of-configurable. Note: No linesep!
378  rep += Configurable._printFooter( indentStr, title )
379  return rep
380 
381  def name( self ):
382  return self._name
383 
384  def children( self ):
385  return self._children
386 
387  def allChildren( self ):
388  children = []
389  for c in self._children:
390  children.append( c )
391  children += c.allChildren()
392 
393  return children
394 
395  pass # CfgItemList
396 
397 
398 
400  """Python class to manage different stores of keys, their content and
401  origin ('StreamESD', 'StreamAOD', ...)
402  """
403  instances = weakref.WeakValueDictionary() # all key store instances
404  __slots__ = {
405  '_name' : 'KeyStore',
406  '_items' : None,
407  '__weakref__' : None, # required for dealing with weak references
408  'Labels' : [ "inputBackNav","inputFile","transient",
409  "streamRDO","streamESD","streamAOD","streamTAG",
410  "metaData",
411  "detector"
412  ]
413  }
414 
415  def __new__(cls, *p, **kw):
416 
417  if 'name' not in kw:
418  if len(p) == 0: kw['name'] = cls.__slots__['_name']
419  else: kw['name'] = p[0]
420 
421  # already created...
422  if kw['name'] in cls.instances.keys():
423  return cls.instances[kw['name']]
424 
425  # create instance
426  obj = object.__new__(cls)
427  object.__init__(obj)
428 
429  kw['_name'] = kw['name']
430  del kw['name']
431 
432  for k in cls.__slots__.keys():
433  if k in ('__weakref__', 'Labels'): continue
434  if k in kw.keys(): v = kw[k]
435  else: v = cls.__slots__[k]
436  setattr(obj, k, v)
437 
438  # update repository of instances
439  cls.instances[kw['_name']] = obj
440 
441  return obj
442 
443  def __init__(self, *p, **kwargs):
444 
445  # call base class init
446  super( CfgKeyStore, self ).__init__() # *p, **kwargs )
447  self._items = CfgItemList( self._name+"ItemList" )
448 
449  if len(self._items) == 0:
450  self._items += CfgItemList( self._name+"_transient" )
451  for label in [ l for l in self.keys() if l != 'transient' ]:
452  item = CfgItemList( '%s_%s' % (self.name(), label) )
453  if label.count('stream') > 0: self['transient'] += item
454  else: self._items += item
455  #self += self._items
456 
457  return
458 
459 
460  def __getstate__( self ):
461  d = { '_name' : self._name,
462  '_items' : self._items,
463  'Labels' : CfgKeyStore.__slots__['Labels'],
464  }
465  return d
466 
467  def __setstate__( self, dct ):
468  for k,v in dct.items():
469  setattr(self, k, v)
470  return
471 
472  def __getnewargs__( self ):
473  return (self.name(),)
474 
475 
476  def __getitem__( self, k ):
477  if k not in CfgKeyStore.__slots__['Labels']:
478  raise KeyError("key [%s] is not an allowed one: %s" %
479  ( k, CfgKeyStore.__slots__['Labels'] ))
480  root = self._items
481  if k.count('stream') > 0:
482  root = getattr( root, self._name+'_transient' )
483  try:
484  return getattr( root, self._name+"_"+k )
485  except AttributeError as err:
486  raise KeyError(str(err))
487 
488  def __setitem__( self, k, v ):
489  if k not in CfgKeyStore.__slots__['Labels']:
490  raise KeyError("key [%s] is not an allowed one: %s" %
491  ( k, CfgKeyStore.__slots__['Labels'] ))
492  root = self._items
493  if k.count('stream') > 0:
494  root = getattr( root, self._name+'_transient' )
495  return setattr( root, self._name+"_"+k, v )
496 
497  def __getattr__( self, k ):
498  try:
499  if k in CfgKeyStore.__slots__['Labels']:
500  return self.__getitem__(k)
501  if k in CfgKeyStore.__slots__:
502  return super(CfgKeyStore, self).__getattribute__(k)
503  return super(CfgKeyStore, self).__getattribute__(k)
504  except KeyError as err:
505  raise AttributeError(str(err))
506 
507  def __setattr__( self, k, v ):
508  if k in CfgKeyStore.__slots__['Labels']:
509  return self.__setitem__(k,v)
510  return super(CfgKeyStore, self).__setattr__(k, v)
511 
512  def name( self ):
513  return self._name
514 
515  def keys(self):
516  return CfgKeyStore.__slots__['Labels']
517 
518  def values(self):
519  # could use a generator instead...
520 
522  return [ self[l] for l in self.keys() ]
523 
524  def items(self):
525  return zip( self.keys(), self.values() )
526 
527  def clear(self, label = None):
528  if label is not None:
529  self[label].clear()
530  else:
531  for c in self._items.children():
532  c.clear()
533  return
534 
535  def __repr__( self ):
536  return '<%s/%s at %s>' % (self.__class__.__name__,self._name,
537  hex(id(self)))
538 
539  def __str__( self, indent = 0,
540  headerLastIndentUnit=Configurable.indentUnit ):
541 
542  global msg # to print some info depending on output level
543  indentStr = indent * Configurable.indentUnit
544  # print header
545  title = "%s/%s" % ( self.__class__.__name__, self._name )
546 
547  # print line to easily see start-of-configurable
548  if indent > 0:
549  headerIndent = (indent-1)*Configurable.indentUnit \
550  + headerLastIndentUnit
551  else:
552  headerIndent = ''
553 
554  rep = Configurable._printHeader( headerIndent, title )
555  rep += os.linesep
556 
557  rep += self._items.__str__( indent + 1, '|=' ) + os.linesep
558  # print line to easily see end-of-configurable. Note: No linesep!
559  rep += Configurable._printFooter( indentStr, title )
560  return rep
561 
562  def write( self, fileName, label ):
563  item = self[label]
564  try:
565  from pprint import pprint
566  from datetime import datetime
567  from io import StringIO
568  buf = StringIO()
569  pprint( item.dict(), stream = buf )
570 
571  out = open( os.path.expanduser(os.path.expandvars(fileName)), 'w' )
572  out.writelines( os.linesep.join( [
573  "## autogenerated at [%s]" % str(datetime.now()),
574  "",
575  "## method filling an item-list with some data",
576  "def _fill( item ):",
577  " item.add(","%s )" % buf.getvalue(),
578  " return",
579  "",
580  "## EOF ##",
581  ] ) )
582  out.close()
583  except Exception as e:
584  print ("Py:Error :",e)
585  raise e
586  return
587 
588  def read( self, fileName, label ):
589  item = self[label]
590  import imp, inspect
591  from AthenaCommon.Include import FindFile,optionsPath
592  osp = os.path
593  name = osp.expanduser( osp.expandvars( fileName ) )
594  name = FindFile( name, optionsPath, os.R_OK )
595  if not name:
596  name = FindFile( osp.basename(fileName), optionsPath, os.R_OK )
597  uri = open( name, 'r' )
598  mod = imp.load_source( uri.name[:-3], uri.name, uri )
599  uri.close()
600 
601  fill = inspect.getmembers(
602  mod, lambda o: inspect.isfunction(o) and (o.__name__ == '_fill')
603  )[0][1]
604  fill( item )
605  return
606 
607  pass # class CfgKeyStore
608 
609 def loadKeyStoreFromPoolFile(keyStore, pool_file,
610  label='transient',
611  items_type='eventdata'):
612  """
613  Helper function to create a CfgKeyStore of name `keyStore` from the
614  content of the POOL file `pool_file` (a python string).
615  The content of the POOL file will be stored into the label `label`
616  """
617  if not isinstance(keyStore, str):
618  raise ValueError("argument 0 (`keyStore`) should be string")
619  if not isinstance(pool_file, str):
620  raise ValueError("argument 1 (`pool_file`) should be string")
621  if not isinstance(label, str):
622  raise ValueError("argument 2 (`label`) should be string")
623 
624  from PyUtils.PoolFile import extract_items
625  item_list = ['%s#%s'%(name,key)
626  for name,key in extract_items(pool_file,
627  verbose=False,
628  items_type=items_type)
629  ]
630  ks = CfgKeyStore(keyStore)
631  ks_label = getattr(ks, label)
632 
633  ks_label.add (item_list)
634 
635  return ks
636 
637 def keystore_diff (ref, chk, labels=None, ofile=None):
638  """
639  Helper function to print the 'diff' of two KeyStores `ref` and `chk` into
640  the file-like object `ofile` (default value: sys.stdout)
641  `ref` and `chk` can either be :
642  - @c KeyStore.CfgKeyStore instances or,
643  - strings being the names of the _already created_
644  @c KeyStore.CfgKeyStore instances
645  @param `labels` the list of labels (default: CfgKeyStore.Labels) to compare
646  between the two CfgKeyStores
647  """
648  if isinstance (ref, str):
649  if ref not in CfgKeyStore.instances:
650  raise ValueError \
651  ('invalid `ref` argument (non existing instance name [%s])'%\
652  ref)
653  ref = CfgKeyStore.instances [ref]
654 
655  if isinstance (chk, str):
656  if chk not in CfgKeyStore.instances:
657  raise ValueError \
658  ('invalid `chk` argument (non existing instance name [%s])'%\
659  chk)
660  chk = CfgKeyStore.instances [chk]
661 
662  if labels is None:
663  labels = CfgKeyStore.__slots__['Labels']
664  elif isinstance (labels, str):
665  labels = [l.strip() for l in labels.split() if l.strip() != '']
666 
667  if ofile is None:
668  import sys
669  ofile = sys.stdout
670 
671  diff = []
672  if ref is chk or ref == chk:
673  return ""
674 
675  for label in labels:
676  ref_content = sorted (ref[label].list())
677  chk_content = sorted (chk[label].list())
678  if len(ref_content) != len(chk_content):
679  diff.append ("- len(ref[%s]) == %i" % (label,len(ref_content)))
680  diff.append ("+ len(chk[%s]) == %i" % (label,len(chk_content)))
681  for r in ref_content:
682  if r not in chk_content:
683  diff.append ("- ref[%s] : %s" % (label, r))
684  for c in chk_content:
685  if c not in ref_content:
686  diff.append ("+ chk[%s] : %s" % (label, c))
687  if len(diff) == 0:
688  return ""
689 
690  diff.append ("")
691  map (ofile.writelines, (d for d in os.linesep.join(diff)))
692  ofile.flush()
693  diff = "".join(diff)
694  return diff
python.KeyStore.children
def children(self)
Definition: KeyStore.py:384
python.KeyStore.CfgItemList
Definition: KeyStore.py:28
python.KeyStore.CfgKeyStore.__setitem__
def __setitem__(self, k, v)
Definition: KeyStore.py:488
python.KeyStore.CfgKeyStore.__setattr__
def __setattr__(self, k, v)
Definition: KeyStore.py:507
python.KeyStore.CfgKeyStore.__setstate__
def __setstate__(self, dct)
Definition: KeyStore.py:467
max
#define max(a, b)
Definition: cfImp.cxx:41
python.KeyStore.CfgItemList._allowWildCard
_allowWildCard
Definition: KeyStore.py:110
Logging
python.KeyStore.CfgItemList.__getstate__
def __getstate__(self)
pickle support
Definition: KeyStore.py:119
python.KeyStore.__call__
def __call__(self, key=None)
Definition: KeyStore.py:302
python.KeyStore.name
def name(self)
Definition: KeyStore.py:381
python.KeyStore.__repr__
def __repr__(self)
Definition: KeyStore.py:329
python.KeyStore.__str__
def __str__(self, indent=0, headerLastIndentUnit=Configurable.indentUnit)
Definition: KeyStore.py:333
python.KeyStore.CfgKeyStore.__init__
def __init__(self, *p, **kwargs)
Definition: KeyStore.py:443
python.KeyStore.__setattr__
def __setattr__(self, k, v)
raise AttributeError( "CfgItemList' object has no attribute '%s'" % ( attr ) )
Definition: KeyStore.py:190
python.KeyStore.has_item
def has_item(self, item)
Definition: KeyStore.py:287
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:94
python.KeyStore.items
def items(self)
for l in self.keys(): yield self[l]
Definition: KeyStore.py:524
python.KeyStore.CfgItemList.instances
instances
Definition: KeyStore.py:61
python.KeyStore.CfgItemList.__len__
def __len__(self)
Definition: KeyStore.py:144
python.KeyStore.allChildren
def allChildren(self)
Definition: KeyStore.py:387
python.KeyStore.CfgItemList._items
_items
Definition: KeyStore.py:103
python.KeyStore.CfgItemList.__init__
def __init__(self, *p, **kwargs)
Definition: KeyStore.py:97
python.KeyStore.removeAllItems
def removeAllItems(self, item)
Definition: KeyStore.py:220
python.KeyStore.setup
def setup(self)
Definition: KeyStore.py:239
python.KeyStore.CfgKeyStore.__slots__
dictionary __slots__
Definition: KeyStore.py:404
python.KeyStore.CfgKeyStore.__getstate__
def __getstate__(self)
pickle support
Definition: KeyStore.py:460
python.KeyStore.CfgKeyStore._items
_items
Definition: KeyStore.py:447
python.KeyStore.CfgItemList.__new__
def __new__(cls, *p, **kw)
Definition: KeyStore.py:68
python.KeyStore.__delattr__
def __delattr__(self, attr)
Definition: KeyStore.py:201
python.Utils.unixtools.FindFile
def FindFile(filename, pathlist, access)
helper -------------------------------------------------------------------—
Definition: unixtools.py:20
python.KeyStore.dict
def dict(self)
Definition: KeyStore.py:321
python.KeyStore.__bool__
def __bool__(self)
Definition: KeyStore.py:206
python.KeyStore.CfgItemList.__deepcopy__
def __deepcopy__(self, memo)
Definition: KeyStore.py:136
python.KeyStore.write
def write(self, fileName, label)
Definition: KeyStore.py:562
python.KeyStore.CfgItemList._children
_children
Definition: KeyStore.py:102
PyAthena::repr
std::string repr(PyObject *o)
returns the string representation of a python object equivalent of calling repr(o) in python
Definition: PyAthenaUtils.cxx:106
Configurable
athena/gaudi ----------------------------------------------------------—
python.KeyStore.CfgItemList.__setstate__
def __setstate__(self, dct)
Definition: KeyStore.py:127
python.KeyStore.clear
def clear(self)
Definition: KeyStore.py:235
python.KeyStore.removeItem
def removeItem(self, item)
Definition: KeyStore.py:209
python.KeyStore.keystore_diff
def keystore_diff(ref, chk, labels=None, ofile=None)
Definition: KeyStore.py:637
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.KeyStore.remove
def remove(self, items)
Definition: KeyStore.py:226
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
python.KeyStore.CfgItemList.__getnewargs__
def __getnewargs__(self)
Definition: KeyStore.py:132
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.KeyStore.add
def add(self, arg)
Definition: KeyStore.py:271
python.KeyStore.loadKeyStoreFromPoolFile
def loadKeyStoreFromPoolFile(keyStore, pool_file, label='transient', items_type='eventdata')
Definition: KeyStore.py:609
python.KeyStore.CfgKeyStore.__getattr__
def __getattr__(self, k)
Definition: KeyStore.py:497
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:191
python.KeyStore.CfgKeyStore.instances
instances
Definition: KeyStore.py:403
python.KeyStore.CfgItemList.__slots__
dictionary __slots__
Definition: KeyStore.py:62
python.KeyStore.CfgKeyStore.__getitem__
def __getitem__(self, k)
Definition: KeyStore.py:476
Trk::open
@ open
Definition: BinningType.h:40
python.KeyStore.CfgKeyStore.keys
def keys(self)
Definition: KeyStore.py:515
python.KeyStore.getProperties
def getProperties(self)
Definition: KeyStore.py:247
python.KeyStore.CfgKeyStore.__new__
def __new__(cls, *p, **kw)
Definition: KeyStore.py:415
lumiFormat.fill
fill
Definition: lumiFormat.py:111
python.KeyStore.CfgItemList.__getattr__
def __getattr__(self, attr)
Definition: KeyStore.py:176
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
python.KeyStore.CfgItemList.__iadd__
def __iadd__(self, itemLists)
Definition: KeyStore.py:151
python.KeyStore.list
def list(self, key=None)
Definition: KeyStore.py:318
python.KeyStore.CfgKeyStore.name
def name(self)
Definition: KeyStore.py:512
pickleTool.object
object
Definition: pickleTool.py:30
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
python.PoolFile.extract_items
def extract_items(pool_file, verbose=True, items_type='eventdata')
Definition: PoolFile.py:446
python.KeyStore.CfgKeyStore
Definition: KeyStore.py:399
python.KeyStore._addItem
def _addItem(self, i)
Definition: KeyStore.py:259
python.KeyStore.removeAll
def removeAll(self)
Definition: KeyStore.py:232
python.KeyStore.read
def read(self, fileName, label)
Definition: KeyStore.py:588
python.KeyStore.allowWildCard
def allowWildCard(self, allow)
Definition: KeyStore.py:299
python.KeyStore.CfgKeyStore.__getnewargs__
def __getnewargs__(self)
Definition: KeyStore.py:472
match
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition: hcg.cxx:356
python.KeyStore.CfgKeyStore.values
def values(self)
Definition: KeyStore.py:518
python.KeyStore.CfgItemList.__iter__
def __iter__(self)
Definition: KeyStore.py:147