+import matplotlib.pyplot as plt
+from matplotlib import cm
+import time
+import sys
+import pickle
+import multiprocessing
+
+import gridf
+
+def job1(args):
+ X, Y, im_l, a, b, c, d, s, v1, k, hough, size = args
+ return [gridf.distance(im_l,
+ gridf.get_grid(a + X[y] * s * v1,
+ b + Y[y] * s * v1,
+ c, d, hough, size),
+ size) for y in range(2 * k)]
+def job2(args):
+ X, Y, im_l, a, b, c, d, s, v1, v2, k, hough, size = args
+ return [gridf.distance(im_l,
+ gridf.get_grid(a, b, c+ X[y] * s * v2,
+ d + Y[y] * s * v2,
+ hough, size),
+ size) for y in range(2 * k)]
+
+def error_surface(im_l, a, b, c, d, hough, size, v1, v2):
+ X = []
+ Y = []
+ Z = []
+ s = 0.001
+ k = 250
+ for i in range(-k, k):
+ X.append(range(-k, k))
+ Y.append(2*k*[i])
+
+ tasks = [(X[x], Y[x], im_l, a, b, c, d, s, v1, v2, k, hough, size) for x in xrange(0, 2 * k)]
+
+ pool = multiprocessing.Pool(None)
+
+ start = time.time()
+ Z = pool.map(job2, tasks, 1)
+ print time.time() - start
+
+ s_file = open('surface' + str(k), 'w')
+ pickle.dump((X, Y, Z), s_file)
+ s_file.close()
+ plt.imshow(Z, cmap=cm.jet, interpolation='bicubic',
+ origin='upper', extent=(-k, k, -k, k), aspect='equal')
+ plt.colorbar()
+
+ plt.show()