]> Creatis software - clitk.git/blob - cluster_tools/mergeStatFile.py
Debug RTStruct conversion with empty struc
[clitk.git] / cluster_tools / mergeStatFile.py
1 #!/usr/bin/env python
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', 'ElapsedTimeWoInit', '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         if match is None:
32             continue
33         groups = match.groups()
34         if groups[0] not in mergedlines:
35             continue
36         keys[groups[0]]=groups[1]
37     return keys
38
39 def merge_keys(ikeys,jkeys):
40     mindate = None
41     maxdate = None
42     keys = {}
43     for line in mergedlines:
44         value = None
45
46         if value is None:
47             try:
48                 ivalue = int(ikeys[line])
49                 jvalue = int(jkeys[line])
50                 value = ivalue + jvalue
51                 value = str(value)
52             except ValueError:
53                 pass
54
55         if value is None:
56             try:
57                 ivalue = float(ikeys[line])
58                 jvalue = float(jkeys[line])
59                 value = ivalue + jvalue
60                 value = str(value)
61             except ValueError:
62                 pass
63
64         if value is None:
65                 ivalue = datetime.datetime.strptime(ikeys[line],"%a %b %d %H:%M:%S %Y")
66                 jvalue = datetime.datetime.strptime(jkeys[line],"%a %b %d %H:%M:%S %Y")
67                 if line=="StartDate":
68                     value = min(ivalue,jvalue)
69                     mindate = value
70                 if line=="EndDate":
71                     value = max(ivalue,jvalue)
72                     maxdate = value
73                 value = value.strftime("%a %b %d %H:%M:%S %Y")
74
75         assert(value is not None)
76         keys[line] = value
77     if mindate is not None and maxdate is not None:
78         speedup = float(keys["ElapsedTime"])/total_seconds(maxdate-mindate)
79         keys["Speedup"] = str(speedup)
80     return keys
81
82 def format_keys(keys):
83     output = "\n".join("# %s = %s" % (line,keys[line]) for line in mergedlines)
84     if "Speedup" in keys:
85         output += "\n# Speedup = %s" % keys["Speedup"]
86     return output
87
88 ikeys = parse_stat_file(sys.argv[2])
89 jkeys = parse_stat_file(sys.argv[4])
90 keys  = merge_keys(ikeys,jkeys)
91 output = format_keys(keys)
92 open(sys.argv[6],"w").write(output)