The Gaudi Framework  v32r2 (46d42edc)
jsonFromLHCbLog.py
Go to the documentation of this file.
1 from __future__ import print_function
2 from pygraph.classes.graph import graph
3 
4 
5 def load_brunel_scenario(filename):
6  gr = graph()
7  algs = {}
8  timing = {}
9  objs = []
10  curr = None
11  order = 0
12  nodes = ('/Event', '/Event/Rec', '/Event/DAQ')
13  for l in open(filename).readlines():
14  if l.find('StoreTracer') == 0:
15  if l.find('Executing Algorithm') != -1:
16  alg = l.split()[-1]
17  if alg not in algs.keys():
18  algs[alg] = (order, set(), set())
19  curr = alg
20  order += 1
21  elif l.find('Done with Algorithm') != -1:
22  curr = None
23  elif l.find('[EventDataSvc]') != -1 and curr:
24  obj = l.split()[-1]
25  if obj in nodes:
26  continue
27  if obj.find('/Event/') == 0:
28  obj = obj[7:]
29  obj = obj.replace('/', '_')
30  if obj not in objs:
31  objs.append(obj)
32  talg = algs[curr]
33  if l.find('RETRIEVE') != -1:
34  if obj not in talg[1]:
35  talg[1].add(obj)
36  elif l.find('REGOBJ') != -1:
37  if obj not in talg[2]:
38  talg[2].add(obj)
39  if l.find("TimingAuditor") != -1:
40  algo = l.split()[2] # .rstrip("|")
41  index = 13
42  if algo.endswith("|"):
43  index = 12
44  algo = algo.rstrip("|")
45  if algo in algs.keys():
46  timing[algo] = l.split()[index]
47  else:
48  for name in algs.keys():
49  if name.startswith(algo):
50  timing[name] = l.split()[index]
51 
52  all_algos = []
53  for i, (alg, deps) in enumerate(algs.items()):
54  if alg in ["PatPVOffline", "PrsADCs"]:
55  continue
56  if deps[1] or deps[2]:
57  inputs = []
58  inputs = [
59  item for item in deps[1]
60  if item not in ("DAQ_ODIN",
61  "DAQ_RawEvent") and item not in deps[2]
62  ]
63  outputs = [item for item in deps[2]]
64  new_algo = {
65  "name": alg,
66  "inputs": inputs,
67  "outputs": outputs,
68  "runtimes_wall": [float(timing[alg])]
69  }
70  all_algos.append(new_algo)
71  return all_algos
72 
73 
74 
75 if __name__ == "__main__":
76  json = {}
77  json["algorithms"] = load_brunel_scenario("Brunel.TES.trace.log")
78  print(json)
def load_brunel_scenario(filename)