def tester(n, m): N = global_N test_data = tv.sin_cos_arr(N, n, m) from upsample import upsample test_data = upsample(test_data, factor=4) dd = field_trace.Derivator(test_data) nulls = field_trace.find_null_cells_minimize(dd) cell_locs = [null.loc for null in nulls] null_locs = [(null.x0, null.y0) for null in nulls] print 4*n*m, len(nulls) if 0: X, Y = zip(*null_locs) import pylab as pl pl.ion() pl.imshow(test_data) pl.scatter(Y, X) X, Y = zip(*cell_locs) pl.scatter(Y, X, c='r') raw_input("enter to continue") pl.close('all')
def test_level_set(): N = 64 n, m = 1, 4 test_data = tv.sin_cos_arr(N, n, m) dd = field_trace.Derivator(test_data) nulls = field_trace.find_null_cells(dd) saddles = [null for null in nulls if null.is_saddle()] peaks = [null for null in nulls if not null.is_saddle()] saddle0s = [(s.x0, s.y0) for s in saddles] peak0s = [(p.x0, p.y0) for p in peaks] x0, y0 = saddle0s[0] psi_interp = Interp2DPeriodic(N, N, test_data) level_val = psi_interp.eval(x0, y0) level_sets = [null.levelset for null in nulls] mask = field_trace.marked_to_mask(test_data.shape, level_sets) masked_data = test_data.copy() masked_data[mask] = test_data.max() if 0: import pylab as pl pl.ion() pl.imshow(masked_data, cmap='hot', interpolation='nearest') # # Plot the grid points # if 0: # X = np.linspace(0, dta.shape[0]-1, dta.shape[0]) # for i in range(dta.shape[0]): # Y = np.zeros(dta.shape[1]) # Y.fill(i) # pl.scatter(Y, X, c='m') X, Y = zip(*saddle0s) pl.scatter(Y, X, c='k') X, Y = zip(*peak0s) pl.scatter(Y, X, c='b') raw_input("enter to continue")
def test_derivator(): N = global_N n, m = 10, 3 test_data = tv.sin_cos_arr(N, n, m) dd = field_trace.Derivator(test_data) psi_1 = vcalc.cderivative(test_data, 'X_DIR') psi_2 = vcalc.cderivative(test_data, 'Y_DIR') ok_(np.allclose(dd.deriv1, psi_1)) ok_(np.allclose(dd.deriv2, psi_2)) ok_(np.allclose(dd.perp_deriv1, psi_2)) ok_(np.allclose(dd.perp_deriv2, -psi_1)) psi_11 = vcalc.cderivative(test_data, 'X_DIR', order=2) psi_22 = vcalc.cderivative(test_data, 'Y_DIR', order=2) psi_12 = vcalc.cderivative(test_data, 'X_DIR') psi_12 = vcalc.cderivative(psi_12, 'Y_DIR') Xlen = float(N) psi_11_interp = Interp2DPeriodic(Xlen, Xlen, psi_11) psi_22_interp = Interp2DPeriodic(Xlen, Xlen, psi_22) psi_12_interp = Interp2DPeriodic(Xlen, Xlen, psi_12) num_pts = 100 rand_Xs = np.random.uniform(0.0, float(N), num_pts) rand_Ys = np.random.uniform(0.0, float(N), num_pts) def compare_interps(dd_interp, interp, xys): dd_interps = [dd_interp.eval(x, y) for (x, y) in zip(*xys)] interps = [interp.eval(x, y) for (x, y) in zip(*xys)] ok_(np.allclose(dd_interps, interps)) compare_interps(dd.deriv12_interp, psi_12_interp, [rand_Xs, rand_Ys]) compare_interps(dd.deriv11_interp, psi_11_interp, [rand_Xs, rand_Ys]) compare_interps(dd.deriv22_interp, psi_22_interp, [rand_Xs, rand_Ys])