summaryrefslogtreecommitdiff
path: root/results/results.py
diff options
context:
space:
mode:
Diffstat (limited to 'results/results.py')
-rwxr-xr-xresults/results.py363
1 files changed, 363 insertions, 0 deletions
diff --git a/results/results.py b/results/results.py
new file mode 100755
index 0000000..c589178
--- /dev/null
+++ b/results/results.py
@@ -0,0 +1,363 @@
+#!/usr/bin/env python3
+
+from decimal import Decimal
+import os.path
+
+import pandas
+import numpy
+import pprint
+
+phaseNames = [
+ 'prePre',
+ 'preMix',
+ 'prePost',
+ 'realPre',
+ 'realMix',
+ 'realPost'
+]
+
+runNames = [
+ '100_mg',
+ '100_ec',
+ '200_mg',
+ '200_ec',
+ '300_mg',
+ '300_ec',
+ '400_mg',
+ '400_ec',
+ '500_mg',
+ '500_ec'
+]
+
+nodeNames = [
+ 'node1',
+ 'node2',
+ 'node3'
+]
+
+fileNames = [
+ 'result_node1_100_OFF.csv',
+ 'result_node1_100_ON.csv',
+ 'result_node1_200_OFF.csv',
+ 'result_node1_200_ON.csv',
+ 'result_node1_300_OFF.csv',
+ 'result_node1_300_ON.csv',
+ 'result_node1_400_OFF.csv',
+ 'result_node1_400_ON.csv',
+ 'result_node1_500_OFF.csv',
+ 'result_node1_500_ON.csv',
+ 'result_node2_100_OFF.csv',
+ 'result_node2_100_ON.csv',
+ 'result_node2_200_OFF.csv',
+ 'result_node2_200_ON.csv',
+ 'result_node2_300_OFF.csv',
+ 'result_node2_300_ON.csv',
+ 'result_node2_400_OFF.csv',
+ 'result_node2_400_ON.csv',
+ 'result_node2_500_OFF.csv',
+ 'result_node2_500_ON.csv',
+ 'result_node3_100_OFF.csv',
+ 'result_node3_100_ON.csv',
+ 'result_node3_200_OFF.csv',
+ 'result_node3_200_ON.csv',
+ 'result_node3_300_OFF.csv',
+ 'result_node3_300_ON.csv',
+ 'result_node3_400_OFF.csv',
+ 'result_node3_400_ON.csv',
+ 'result_node3_500_OFF.csv',
+ 'result_node3_500_ON.csv'
+]
+
+usedcolnames = [
+ 'pre_pre_startuser_time',
+ 'pre_pre_enduser_time',
+ 'pre_mix_startuser_time',
+ 'pre_mix_enduser_time',
+ 'pre_post_startuser_time',
+ 'pre_post_enduser_time',
+ 'real_pre_startuser_time',
+ 'real_pre_enduser_time',
+ 'real_mix_startuser_time',
+ 'real_mix_enduser_time',
+ 'real_post_startuser_time',
+ 'real_post_enduser_time'
+]
+
+def getColumn(data, start, end):
+ startCol = getattr(data, start).tolist()[1:]
+ endCol = getattr(data, end).tolist()[1:]
+
+ difference = [(Decimal(a) - Decimal(b)) / Decimal(1000000000) for a, b in zip(endCol, startCol)]
+ return difference
+
+def getColumnAverage(data, start, end):
+
+ difference = getColumn(data, start, end)
+ difference.sort()
+ del difference[-10:]
+
+ arr = numpy.array(difference)
+ mean = numpy.mean(arr)
+ stdev = numpy.std(arr)
+
+ return {
+ 'mean': mean,
+ 'stdev': stdev
+ }
+
+def getPhaseAverages(filename):
+ colNames = open(filename).readline().rstrip().split(', ')
+
+ stats = dict()
+
+ data = pandas.read_csv(filename, names=colNames)
+
+ for start, end, name in zip(usedcolnames[::2], usedcolnames[1::2], phaseNames):
+ stats[name] = getColumnAverage(data, start, end)
+
+ return stats
+
+def getRunAverages(runFiles):
+
+ stats = dict()
+ for runName, file in zip(runNames, runFiles):
+ stats[runName] = getPhaseAverages(file)
+
+ return stats
+
+def getNodeAverages():
+
+ nodeData = dict()
+ for node in nodeNames:
+ startIndex = nodeNames.index(node) * 10
+ endIndex = startIndex + 10
+ nodeData[node] = getRunAverages(fileNames[startIndex:endIndex])
+
+ return nodeData
+
+def writeRawTableFile(csvfilename, tabfilename):
+ colNames = open(csvfilename).readline().rstrip().split(', ')
+
+ data = pandas.read_csv(csvfilename, names=colNames)
+ columnList = list()
+ for start, end in zip(usedcolnames[::2], usedcolnames[1::2]):
+ column = getColumn(data, start, end)
+ columnList.append(column)
+
+ with open(tabfilename, 'w') as tabfile:
+ tabfile.write(r'prepre (s) & premix (s) & prepost (s) & realpre (s) & realmix (s) & realpost (s) \\\hline\hline' + '\n')
+ for x in zip(*columnList):
+ tabfile.write(' & '.join(["{0:.3f}".format(y) for y in x]) + r' \\\hline' + '\n')
+
+
+def writeRawResultTableFiles(fileNames):
+ for fileName in fileNames:
+ tabFileName = os.path.splitext(fileName)[0] + ".tab"
+ writeRawTableFile(fileName, tabFileName)
+
+def writeSummaryLines(data, file, run):
+ for node in nodeNames:
+ nodeData = data[node][run]
+ row = list()
+ row.append(node)
+ phaseData = ['{0:.3f} ({1:.3f})'.format(x['mean'], x['stdev']) for x in [nodeData[phase] for phase in phaseNames]]
+ row = row + phaseData
+ file.write(" & ".join(row) + r' \\\hline' + '\n')
+
+def writeSummaryTables(data):
+ with open('ec_summary.tab', 'w') as tabFile:
+ tabFile.write(r'Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline' + '\n')
+ writeSummaryLines(data, tabFile, '500_ec')
+
+ with open('mg_summary.tab', 'w') as tabFile:
+ tabFile.write(r'Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline' + '\n')
+ writeSummaryLines(data, tabFile, '500_mg')
+
+def writeGraph(data, phaseName):
+ graphData = dict()
+
+ for node in nodeNames:
+ mgData = list()
+ ecData = list()
+
+ phaseData = data[node]
+ for mgKey, ecKey in zip(runNames[::2], runNames[1::2]):
+ mgData.append(phaseData[mgKey][phaseName])
+ ecData.append(phaseData[ecKey][phaseName])
+
+ graphData[node] = {'ec': ecData, 'mg': mgData}
+
+ with open('{0}.graph'.format(phaseName), 'w') as graphFile:
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=red] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['ec'][0]['mean'],
+ graphData['node1']['ec'][1]['mean'],
+ graphData['node1']['ec'][2]['mean'],
+ graphData['node1']['ec'][3]['mean'],
+ graphData['node1']['ec'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n1ec_top,color=red!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['ec'][0]['mean'] + graphData['node1']['ec'][0]['stdev'],
+ graphData['node1']['ec'][1]['mean'] + graphData['node1']['ec'][1]['stdev'],
+ graphData['node1']['ec'][2]['mean'] + graphData['node1']['ec'][2]['stdev'],
+ graphData['node1']['ec'][3]['mean'] + graphData['node1']['ec'][3]['stdev'],
+ graphData['node1']['ec'][4]['mean'] + graphData['node1']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n1ec_down,color=red!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['ec'][0]['mean'] - graphData['node1']['ec'][0]['stdev'],
+ graphData['node1']['ec'][1]['mean'] - graphData['node1']['ec'][1]['stdev'],
+ graphData['node1']['ec'][2]['mean'] - graphData['node1']['ec'][2]['stdev'],
+ graphData['node1']['ec'][3]['mean'] - graphData['node1']['ec'][3]['stdev'],
+ graphData['node1']['ec'][4]['mean'] - graphData['node1']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[red!50,fill opacity=0.5] fill between[of=n1ec_top and n1ec_down];' + '\n\n')
+
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=green] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['ec'][0]['mean'],
+ graphData['node2']['ec'][1]['mean'],
+ graphData['node2']['ec'][2]['mean'],
+ graphData['node2']['ec'][3]['mean'],
+ graphData['node2']['ec'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n2ec_top,color=green!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['ec'][0]['mean'] + graphData['node2']['ec'][0]['stdev'],
+ graphData['node2']['ec'][1]['mean'] + graphData['node2']['ec'][1]['stdev'],
+ graphData['node2']['ec'][2]['mean'] + graphData['node2']['ec'][2]['stdev'],
+ graphData['node2']['ec'][3]['mean'] + graphData['node2']['ec'][3]['stdev'],
+ graphData['node2']['ec'][4]['mean'] + graphData['node2']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n2ec_down,color=green!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['ec'][0]['mean'] - graphData['node2']['ec'][0]['stdev'],
+ graphData['node2']['ec'][1]['mean'] - graphData['node2']['ec'][1]['stdev'],
+ graphData['node2']['ec'][2]['mean'] - graphData['node2']['ec'][2]['stdev'],
+ graphData['node2']['ec'][3]['mean'] - graphData['node2']['ec'][3]['stdev'],
+ graphData['node2']['ec'][4]['mean'] - graphData['node2']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[green!50,fill opacity=0.5] fill between[of=n2ec_top and n2ec_down];' + '\n\n')
+
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=blue] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['ec'][0]['mean'],
+ graphData['node3']['ec'][1]['mean'],
+ graphData['node3']['ec'][2]['mean'],
+ graphData['node3']['ec'][3]['mean'],
+ graphData['node3']['ec'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n3ec_top,color=blue!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['ec'][0]['mean'] + graphData['node3']['ec'][0]['stdev'],
+ graphData['node3']['ec'][1]['mean'] + graphData['node3']['ec'][1]['stdev'],
+ graphData['node3']['ec'][2]['mean'] + graphData['node3']['ec'][2]['stdev'],
+ graphData['node3']['ec'][3]['mean'] + graphData['node3']['ec'][3]['stdev'],
+ graphData['node3']['ec'][4]['mean'] + graphData['node3']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n3ec_down,color=blue!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['ec'][0]['mean'] - graphData['node3']['ec'][0]['stdev'],
+ graphData['node3']['ec'][1]['mean'] - graphData['node3']['ec'][1]['stdev'],
+ graphData['node3']['ec'][2]['mean'] - graphData['node3']['ec'][2]['stdev'],
+ graphData['node3']['ec'][3]['mean'] - graphData['node3']['ec'][3]['stdev'],
+ graphData['node3']['ec'][4]['mean'] - graphData['node3']['ec'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[blue!50,fill opacity=0.5] fill between[of=n3ec_top and n3ec_down];' + '\n\n')
+
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=yellow] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['mg'][0]['mean'],
+ graphData['node1']['mg'][1]['mean'],
+ graphData['node1']['mg'][2]['mean'],
+ graphData['node1']['mg'][3]['mean'],
+ graphData['node1']['mg'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n1mg_top,color=yellow!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['mg'][0]['mean'] + graphData['node1']['mg'][0]['stdev'],
+ graphData['node1']['mg'][1]['mean'] + graphData['node1']['mg'][1]['stdev'],
+ graphData['node1']['mg'][2]['mean'] + graphData['node1']['mg'][2]['stdev'],
+ graphData['node1']['mg'][3]['mean'] + graphData['node1']['mg'][3]['stdev'],
+ graphData['node1']['mg'][4]['mean'] + graphData['node1']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n1mg_down,color=yellow!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node1']['mg'][0]['mean'] - graphData['node1']['mg'][0]['stdev'],
+ graphData['node1']['mg'][1]['mean'] - graphData['node1']['mg'][1]['stdev'],
+ graphData['node1']['mg'][2]['mean'] - graphData['node1']['mg'][2]['stdev'],
+ graphData['node1']['mg'][3]['mean'] - graphData['node1']['mg'][3]['stdev'],
+ graphData['node1']['mg'][4]['mean'] - graphData['node1']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[yellow!50,fill opacity=0.5] fill between[of=n1mg_top and n1mg_down];' + '\n\n')
+
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=orange] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['mg'][0]['mean'],
+ graphData['node2']['mg'][1]['mean'],
+ graphData['node2']['mg'][2]['mean'],
+ graphData['node2']['mg'][3]['mean'],
+ graphData['node2']['mg'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n2mg_top,color=orange!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['mg'][0]['mean'] + graphData['node2']['mg'][0]['stdev'],
+ graphData['node2']['mg'][1]['mean'] + graphData['node2']['mg'][1]['stdev'],
+ graphData['node2']['mg'][2]['mean'] + graphData['node2']['mg'][2]['stdev'],
+ graphData['node2']['mg'][3]['mean'] + graphData['node2']['mg'][3]['stdev'],
+ graphData['node2']['mg'][4]['mean'] + graphData['node2']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n2mg_down,color=orange!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node2']['mg'][0]['mean'] - graphData['node2']['mg'][0]['stdev'],
+ graphData['node2']['mg'][1]['mean'] - graphData['node2']['mg'][1]['stdev'],
+ graphData['node2']['mg'][2]['mean'] - graphData['node2']['mg'][2]['stdev'],
+ graphData['node2']['mg'][3]['mean'] - graphData['node2']['mg'][3]['stdev'],
+ graphData['node2']['mg'][4]['mean'] - graphData['node2']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[orange!50,fill opacity=0.5] fill between[of=n2mg_top and n2mg_down];' + '\n\n')
+
+ graphFile.write(r'%--------------------------------------------------------------------' + '\n')
+ graphFile.write(r'\addplot[color=black] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['mg'][0]['mean'],
+ graphData['node3']['mg'][1]['mean'],
+ graphData['node3']['mg'][2]['mean'],
+ graphData['node3']['mg'][3]['mean'],
+ graphData['node3']['mg'][4]['mean']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n3mg_top,color=black!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['mg'][0]['mean'] + graphData['node3']['mg'][0]['stdev'],
+ graphData['node3']['mg'][1]['mean'] + graphData['node3']['mg'][1]['stdev'],
+ graphData['node3']['mg'][2]['mean'] + graphData['node3']['mg'][2]['stdev'],
+ graphData['node3']['mg'][3]['mean'] + graphData['node3']['mg'][3]['stdev'],
+ graphData['node3']['mg'][4]['mean'] + graphData['node3']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[name path=n3mg_down,color=black!70] coordinates {{(0,0)(100,{0:.3f})(200,{1:.3f})(300,{2:.3f})(400,{3:.3f})(500,{4:.3f})}};'.format(
+ graphData['node3']['mg'][0]['mean'] - graphData['node3']['mg'][0]['stdev'],
+ graphData['node3']['mg'][1]['mean'] - graphData['node3']['mg'][1]['stdev'],
+ graphData['node3']['mg'][2]['mean'] - graphData['node3']['mg'][2]['stdev'],
+ graphData['node3']['mg'][3]['mean'] - graphData['node3']['mg'][3]['stdev'],
+ graphData['node3']['mg'][4]['mean'] - graphData['node3']['mg'][4]['stdev']
+ ) + '\n')
+ graphFile.write(r'\addplot[black!50,fill opacity=0.5] fill between[of=n3mg_top and n3mg_down];' + '\n\n')
+
+def writeGraphs(data):
+ for phaseName in phaseNames:
+ writeGraph(data, phaseName)
+
+def writeAppendixTable(data, run):
+ with open(run + '.tab', 'w') as tabFile:
+ tabFile.write(r'Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline' + '\n')
+ for node in nodeNames:
+ nodeData = data[node][run]
+ row = list()
+ row.append(node)
+ phaseData = ['{0:.3f} ({1:.3f})'.format(x['mean'], x['stdev']) for x in [nodeData[phase] for phase in phaseNames]]
+ row = row + phaseData
+ tabFile.write(' & '.join(row) + r' \\\hline' + '\n')
+
+def writeAppendixTables(data):
+ for run in runNames:
+ writeAppendixTable(data, run)
+
+def writeResults():
+ writeRawResultTableFiles(fileNames)
+
+ data = getNodeAverages()
+
+ writeSummaryTables(data)
+ writeGraphs(data)
+ writeAppendixTables(data)
+
+writeResults()