]> Creatis software - clitk.git/blob - cluster_tools/mergeStatFile.py
merging
[clitk.git] / cluster_tools / mergeStatFile.py
1 #!/usr/bin/env python2
2 # coding: utf-8
3
4 import sys
5 import re
6 import datetime
7
8 linere = re.compile(r'''^#\s+([a-zA-Z]+)\s+=\s(.*)$''')
9 mergedlines = ['NumberOfRun', 'NumberOfEvents', 'NumberOfTracks', 'NumberOfSteps', 'NumberOfGeometricalSteps', 'NumberOfPhysicalSteps', 'ElapsedTime', 'StartDate', 'EndDate']
10
11 assert(len(sys.argv)==7)
12 assert(sys.argv[1]=="-i")
13 assert(sys.argv[3]=="-j")
14 assert(sys.argv[5]=="-o")
15
16 def total_seconds(deltat):
17     try:
18         return float(deltat.total_seconds())
19     except AttributeError: # total_seconds defined in 2.7
20         total = 0.
21         total += deltat.seconds
22         total += deltat.microseconds*1e-6
23         total += deltat.days*3600.*24.
24         return total
25
26 def parse_stat_file(filename):
27     keys = {}
28     for line in open(filename,"r").readlines():
29         match = linere.match(line)
30         assert(match is not None)
31         groups = match.groups()
32         if groups[0] not in mergedlines:
33             continue
34         keys[groups[0]]=groups[1]
35     return keys
36
37 def merge_keys(ikeys,jkeys):
38     mindate = None
39     maxdate = None
40     keys = {}
41     for line in mergedlines:
42         value = None
43
44         if value is None:
45             try:
46                 ivalue = int(ikeys[line])
47                 jvalue = int(jkeys[line])
48                 value = ivalue + jvalue
49                 value = str(value)
50             except ValueError:
51                 pass
52
53         if value is None:
54             try:
55                 ivalue = float(ikeys[line])
56                 jvalue = float(jkeys[line])
57                 value = ivalue + jvalue
58                 value = str(value)
59             except ValueError:
60                 pass
61
62         if value is None:
63                 ivalue = datetime.datetime.strptime(ikeys[line],"%a %b %d %H:%M:%S %Y")
64                 jvalue = datetime.datetime.strptime(jkeys[line],"%a %b %d %H:%M:%S %Y")
65                 if line=="StartDate":
66                     value = min(ivalue,jvalue)
67                     mindate = value
68                 if line=="EndDate":
69                     value = max(ivalue,jvalue)
70                     maxdate = value
71                 value = value.strftime("%a %b %d %H:%M:%S %Y")
72
73         assert(value is not None)
74         keys[line] = value
75     if mindate is not None and maxdate is not None:
76         speedup = float(keys["ElapsedTime"])/total_seconds(maxdate-mindate)
77         keys["Speedup"] = str(speedup)
78     return keys
79
80 def format_keys(keys):
81     output = "\n".join("# %s = %s" % (line,keys[line]) for line in mergedlines)
82     if "Speedup" in keys:
83         output += "\n# Speedup = %s" % keys["Speedup"]
84     return output
85
86 ikeys = parse_stat_file(sys.argv[2])
87 jkeys = parse_stat_file(sys.argv[4])
88 keys  = merge_keys(ikeys,jkeys)
89 output = format_keys(keys)
90 open(sys.argv[6],"w").write(output)
91