diff options
Diffstat (limited to 'results/results.py')
| -rwxr-xr-x | results/results.py | 363 |
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() |
