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)
31 groups = match.groups()
32 if groups[0] not in mergedlines:
34 keys[groups[0]]=groups[1]
37 def merge_keys(ikeys,jkeys):
41 for line in mergedlines:
46 ivalue = int(ikeys[line])
47 jvalue = int(jkeys[line])
48 value = ivalue + jvalue
55 ivalue = float(ikeys[line])
56 jvalue = float(jkeys[line])
57 value = ivalue + jvalue
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")
66 value = min(ivalue,jvalue)
69 value = max(ivalue,jvalue)
71 value = value.strftime("%a %b %d %H:%M:%S %Y")
73 assert(value is not None)
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)
80 def format_keys(keys):
81 output = "\n".join("# %s = %s" % (line,keys[line]) for line in mergedlines)
83 output += "\n# Speedup = %s" % keys["Speedup"]
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)