8 linere = re.compile(r'''^#\s+([a-zA-Z]+)\s+=\s(.*)$''')
9 mergedlines = ['NumberOfRun', 'NumberOfEvents', 'NumberOfTracks', 'NumberOfSteps', 'NumberOfGeometricalSteps', 'NumberOfPhysicalSteps', 'ElapsedTimeWoInit', 'ElapsedTime', 'StartDate', 'EndDate']
11 assert(len(sys.argv)==7)
12 assert(sys.argv[1]=="-i")
13 assert(sys.argv[3]=="-j")
14 assert(sys.argv[5]=="-o")
16 def total_seconds(deltat):
18 return float(deltat.total_seconds())
19 except AttributeError: # total_seconds defined in 2.7
21 total += deltat.seconds
22 total += deltat.microseconds*1e-6
23 total += deltat.days*3600.*24.
26 def parse_stat_file(filename):
28 for line in open(filename,"r").readlines():
29 match = linere.match(line)
30 #assert(match is not None)
33 groups = match.groups()
34 if groups[0] not in mergedlines:
36 keys[groups[0]]=groups[1]
39 def merge_keys(ikeys,jkeys):
43 for line in mergedlines:
48 ivalue = int(ikeys[line])
49 jvalue = int(jkeys[line])
50 value = ivalue + jvalue
57 ivalue = float(ikeys[line])
58 jvalue = float(jkeys[line])
59 value = ivalue + jvalue
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")
68 value = min(ivalue,jvalue)
71 value = max(ivalue,jvalue)
73 value = value.strftime("%a %b %d %H:%M:%S %Y")
75 assert(value is not None)
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)
82 def format_keys(keys):
83 output = "\n".join("# %s = %s" % (line,keys[line]) for line in mergedlines)
85 output += "\n# Speedup = %s" % keys["Speedup"]
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)