diff --git a/bin/resultifier.py b/bin/resultifier.py
new file mode 100644
index 0000000..becaae5
--- /dev/null
+++ b/bin/resultifier.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+import sys
+import time
+
+import pickle
+
+import numpy as np
+
+from optparse import OptionParser
+
+import progressbar
+
+import interp.bootstrap
+
+from interp.grid.gmsh import ggrid
+from interp.tools import *
+
+def get_right_exact_func(dimension, baker = False):
+ f = None
+ if dimension == 3:
+ if baker:
+ f = baker_exact_3D
+ else:
+ f =friendly_exact_3D
+ elif dimension == 2:
+ if baker:
+ f = baker_exact_2D
+ else:
+ f = friendly_exact_2D
+ return f
+
+if __name__ == '__main__':
+
+ parser = OptionParser(usage = "%prog [options] ")
+
+ parser.add_option("-v", "--verbose",
+ action="store_true", dest="verbose", default=False,
+ help="verbose flag")
+
+ parser.add_option("-b", "--baker",
+ action="store_true", dest="baker", default=False,
+ help="use more impressive baker funcs")
+
+
+ (options, args) = parser.parse_args()
+ if len(args) != 2:
+ parser.print_usage()
+ sys.exit(1)
+
+ source, dest = args
+
+ dest = pickle.load(open(dest, 'r'))
+
+ dimension = int(source.split('.')[1][0])
+
+ g = ggrid(source, dimension)
+ g.q = np.array([get_right_exact_func(dimension, options.baker)(x) for x in g.verts])
+
+ exacts = (baker_exact_2D, friendly_exact_2D)
+ orders = [2,3,4,5]
+ extras = [4,6,8,12,16,20,32,48,64,96,128,192,256]
+
+ for exact_func in exacts:
+ g.q = np.array([exact_func(x) for x in g.verts])
+ for order in orders:
+ for extra in extras:
+ for d in dest:
+ results = {True:0, False:0}
+ errors = []
+ s = time.time()
+ for X in d:
+ a = g.run_baker(X[:2], order = order, extra_points = extra)
+ exact = exact_func(X[:2])
+ results[improved_answer(a,exact)] += 1
+ current_error = exact - a['final']
+ errors.append(current_error)
+ e = time.time()
+ print exact_func.__name__, order, extra, results[True] / float(len(d)), rms(errors), e-s