The Gaudi Framework  v29r0 (ff2e7097)
GenerateGaudiOpts.py
Go to the documentation of this file.
1 import os
2 import sys
3 import time
4 from xml.etree import ElementTree
5 
6 
7 def generateOptions(counter, cmask, invmask, sampling_period, startatevent, storeresultsat, family):
8  cmask = map(int, cmask)
9  invmask = map(int, invmask)
10  sampling_period = map(int, sampling_period)
11  startatevent = int(startatevent)
12 
13  from Configurables import ApplicationMgr, AuditorSvc, PerfMonAuditor
14  app = ApplicationMgr()
15  app.AuditAlgorithms = 1
16  pfaud = PerfMonAuditor()
17  try:
18  pfaud.EVENT0 = counter[0]
19  pfaud.SP0 = sampling_period[0]
20  pfaud.INV0 = int(invmask[0])
21  pfaud.CMASK0 = int(cmask[0])
22  pfaud.EVENT1 = counter[1]
23  pfaud.SP1 = sampling_period[1]
24  pfaud.INV1 = int(invmask[1])
25  pfaud.CMASK1 = int(cmask[1])
26  pfaud.EVENT2 = counter[2]
27  pfaud.SP2 = sampling_period[2]
28  pfaud.INV2 = int(invmask[2])
29  pfaud.CMASK2 = int(cmask[2])
30  pfaud.EVENT3 = counter[3]
31  pfaud.SP3 = sampling_period[3]
32  pfaud.INV3 = int(invmask[3])
33  pfaud.CMASK3 = int(cmask[3])
34  except IndexError:
35  pass
36  pfaud.FAMILY = family
37  # for <2.5 Python use: test and true_value or false_value
38  pfaud.PREFIX = "%s_%s" % (
39  storeresultsat, "S" if sampling_period[0] > 0 else "C")
40  pfaud.SAMPLE = int(sampling_period[0] > 0)
41  pfaud.START_AT_EVENT = startatevent
42  #pfaud.LEVEL = 5
43  AuditorSvc().Auditors.append(pfaud)
44  print pfaud
45 
46 
47 class XmlDictObject(dict):
48  """
49  Adds object like functionality to the standard dictionary.
50  """
51 
52  def __init__(self, initdict=None):
53  if initdict is None:
54  initdict = {}
55  dict.__init__(self, initdict)
56 
57  def __getattr__(self, item):
58  return self.__getitem__(item)
59 
60  def __setattr__(self, item, value):
61  self.__setitem__(item, value)
62 
63  def __str__(self):
64  if self.has_key('_text'):
65  return self.__getitem__('_text')
66  else:
67  return ''
68 
69  @staticmethod
70  def Wrap(x):
71  """
72  Static method to wrap a dictionary recursively as an XmlDictObject
73  """
74 
75  if isinstance(x, dict):
76  return XmlDictObject((k, XmlDictObject.Wrap(v)) for (k, v) in x.iteritems())
77  elif isinstance(x, list):
78  return [XmlDictObject.Wrap(v) for v in x]
79  else:
80  return x
81 
82  @staticmethod
83  def _UnWrap(x):
84  if isinstance(x, dict):
85  return dict((k, XmlDictObject._UnWrap(v)) for (k, v) in x.iteritems())
86  elif isinstance(x, list):
87  return [XmlDictObject._UnWrap(v) for v in x]
88  else:
89  return x
90 
91  def UnWrap(self):
92  """
93  Recursively converts an XmlDictObject to a standard dictionary and returns the result.
94  """
95 
96  return XmlDictObject._UnWrap(self)
97 
98 
99 def _ConvertDictToXmlRecurse(parent, dictitem):
100  assert type(dictitem) is not type([])
101 
102  if isinstance(dictitem, dict):
103  for (tag, child) in dictitem.iteritems():
104  if str(tag) == '_text':
105  parent.text = str(child)
106  elif type(child) is type([]):
107  # iterate through the array and convert
108  for listchild in child:
109  elem = ElementTree.Element(tag)
110  parent.append(elem)
111  _ConvertDictToXmlRecurse(elem, listchild)
112  else:
113  elem = ElementTree.Element(tag)
114  parent.append(elem)
115  _ConvertDictToXmlRecurse(elem, child)
116  else:
117  parent.text = str(dictitem)
118 
119 
120 def ConvertDictToXml(xmldict):
121  """
122  Converts a dictionary to an XML ElementTree Element
123  """
124 
125  roottag = xmldict.keys()[0]
126  root = ElementTree.Element(roottag)
127  _ConvertDictToXmlRecurse(root, xmldict[roottag])
128  return root
129 
130 
131 def _ConvertXmlToDictRecurse(node, dictclass):
132  nodedict = dictclass()
133 
134  if len(node.items()) > 0:
135  # if we have attributes, set them
136  nodedict.update(dict(node.items()))
137 
138  for child in node:
139  # recursively add the element's children
140  newitem = _ConvertXmlToDictRecurse(child, dictclass)
141  if nodedict.has_key(child.tag):
142  # found duplicate tag, force a list
143  if type(nodedict[child.tag]) is type([]):
144  # append to existing list
145  nodedict[child.tag].append(newitem)
146  else:
147  # convert to list
148  nodedict[child.tag] = [nodedict[child.tag], newitem]
149  else:
150  # only one, directly set the dictionary
151  nodedict[child.tag] = newitem
152 
153  if node.text is None:
154  text = ''
155  else:
156  text = node.text.strip()
157 
158  if len(nodedict) > 0:
159  # if we have a dictionary add the text as a dictionary value (if there is any)
160  if len(text) > 0:
161  nodedict['_text'] = text
162  else:
163  # if we don't have child nodes or attributes, just set the text
164  nodedict = text
165 
166  return nodedict
167 
168 
169 def ConvertXmlToDict(root, dictclass=XmlDictObject):
170  """
171  Converts an XML file or ElementTree Element to a dictionary
172  """
173 
174  # If a string is passed in, try to open it as a file
175  if type(root) == type(''):
176  root = ElementTree.parse(root).getroot()
177  elif not isinstance(root, ElementTree.Element):
178  raise TypeError, 'Expected ElementTree.Element or file path string'
179 
180  return dictclass({root.tag: _ConvertXmlToDictRecurse(root, dictclass)})
def generateOptions(counter, cmask, invmask, sampling_period, startatevent, storeresultsat, family)
def _ConvertXmlToDictRecurse(node, dictclass)
Performance Monitoring Auditor that uses Perfmon2 library to monitor algorithms.
struct GAUDI_API map
Parametrisation class for map-like implementation.
def _ConvertDictToXmlRecurse(parent, dictitem)
def ConvertXmlToDict(root, dictclass=XmlDictObject)
The Application Manager class.