def __plot_rF_curve( rf, patch_width, mode, p, theta, ax, fixed_axis_x=False, interp_smooth=140, ): from receptivefield import convert_rfvector_to_rgbmatrix rf_m = convert_rfvector_to_rgbmatrix(rf, patch_width, patch_width, mode, swap=False, flip=False) X = N.arange(0, patch_width, 1) X_smooth = N.linspace(0, patch_width-1, interp_smooth) real_mu = (N.round(p[0]), N.round(p[1])) mu = real_mu[0] if fixed_axis_x else real_mu[1] if fixed_axis_x: coords = [(i, mu) for i in xrange(0, patch_width)] else: coords = [(mu, i) for i in xrange(0, patch_width)] r_coords = [rot(theta, (c[0],c[1]), real_mu) for c in coords] r_coords = [(round(c[0]),round(c[1])) for c in r_coords] def rot_values(channel, rotated_coords): return N.array([rf_m.T[channel][c[0],c[1]] for c in rotated_coords]) from scipy.interpolate import interp1d def interp(values): return interp1d(X, values, kind='cubic') plt.ylim(-1., 1.) if mode=='rgb': ax.plot(X_smooth, interp(rot_values(0, r_coords))(X_smooth), color='red', linewidth=2.0) ax.plot(X_smooth, interp(rot_values(1, r_coords))(X_smooth), color='green', linewidth=2.0) ax.plot(X_smooth, interp(rot_values(2, r_coords))(X_smooth), color='blue', linewidth=2.0) elif mode=='rg' or mode=='rg_vs_b': ax.plot(X_smooth, interp(rot_values(0, r_coords))(X_smooth), color='red', linewidth=2.0) ax.plot(X_smooth, interp(rot_values(1, r_coords))(X_smooth), color='green', linewidth=2.0) elif mode=='lum': ax.plot(X_smooth, interp(rot_values(0, r_coords))(X_smooth), color='black', linewidth=2.0) ax.set_aspect(patch_width/2) return mu
def write_rf_fit_debug_fig( outfile, rf, patch_width, mode, p=None, rf_reconstr=None, rf_reconstr_err=None, model='dog', scale=2, s_scale=None, alpha=1., dpi=216, draw_ellipsoid=True, title=None, no_title=False, ellipsoid_line_width=.5, ): rf_name = title if title != None else 'RF' rec_name = title + 'rec. ' if title != None else 'rec.' if s_scale == None: s_scale = scale cmap = colormap_for_mode(mode) from receptivefield import convert_rfvector_to_rgbmatrix from ..analyze.cluster import __transpose_zero_to_one rf_mat = convert_rfvector_to_rgbmatrix(rf, patch_width, patch_width, mode, swap=True, flip=False) rf_mat = __transpose_zero_to_one(rf_mat) dic_rf = {'name':'' if no_title else rf_name, 'value':rf_mat, 'maxmin':False, 'cmap':cmap, 'balance':False} mu_x, mu_y = 0, 0 theta = 0 if not p is None: if model=='dog': ''' 0 1 2 3 ... params: mu_x mu_y r_c r_s ...''' mu_x, mu_y = p[1], p[0] theta = 0 rhc, rwc = p[2], p[2] rhs, rws = p[3], p[3] elif model=='edog': ''' 0 1 2 3 4 5 ... params: mu_x mu_y sigma_x sigma_y c_to_s_ratio theta ...''' if p[4] > 1: rwc=p[2]*scale ; rhc=p[3]*scale ; rws=p[2]*p[4]*s_scale ; rhs=p[3]*p[4]*s_scale else: rwc=p[2]*p[4]*scale ; rhc=p[3]*p[4]*scale ; rws=p[2]*s_scale ; rhs=p[3]*s_scale mu_x, mu_y = p[1], p[0] theta = p[5] theta = N.pi-180/N.pi*theta ellip_c = [mu_x, mu_y, rwc, rhc, -theta, ellipsoid_line_width, [.0,.0,.0], 'none'] ellip_s = [mu_x, mu_y, rws, rhs, -theta, ellipsoid_line_width, [.0,.0,.0], 'none'] dic_rf['theta'] = theta dic_rf['patch_width'] = patch_width plots = [dic_rf] if not p is None and draw_ellipsoid: nones = N.ones(rf_mat.shape) dic_ellip = {'name':'' if no_title else 'fit', 'value':nones, 'maxmin':False, 'cmap':'Greys', 'balance':False, 'invertaxis':True, 'theta':theta, 'patch_width':patch_width, 'drawlines':True} dic_ellip['ellipsoid_c'] = ellip_c dic_ellip['ellipsoid_s'] = ellip_s plots = plots + [dic_ellip] if True: h_dic_curve = {'name':'' if no_title else 'primary axis', 'value':rf, 'mu_xy':(mu_x,mu_y), 'theta':theta, 'patch_width':patch_width, 'horizontal':False, 'mode':mode, 'drawlines':True} plots = plots + [h_dic_curve] w_dic_curve = {'name':'' if no_title else 'secondary axis', 'value':rf, 'mu_xy':(mu_x,mu_y), 'theta':theta, 'patch_width':patch_width, 'horizontal':True, 'mode':mode, 'drawlines':True} plots = plots + [w_dic_curve] if not rf_reconstr is None: rec_mat = convert_rfvector_to_rgbmatrix(rf_reconstr, patch_width, patch_width, mode, swap=True, flip=False) rec_mat = __transpose_zero_to_one(rec_mat) dic_rec = {'name':'' if no_title else rec_name, 'value':rec_mat, 'maxmin':False, 'cmap':cmap, 'balance':False} dic_rec['theta'] = theta dic_rec['patch_width'] = patch_width plots = plots + [dic_rec] if not rf_reconstr_err is None: err_mat = convert_rfvector_to_rgbmatrix(rf_reconstr_err, patch_width, patch_width, mode, swap=True, flip=False) err_mat = __transpose_zero_to_one(err_mat) str_err = str(N.round(N.max(rf_reconstr_err),6)) dic_err = {'name':'' if no_title else 'error '+str_err, 'value':err_mat, 'maxmin':False, 'cmap':cmap, 'balance':True, 'invertaxis':True} plots = plots + [dic_err] if True: h_dic_curve = {'name':'' if no_title else 'primary axis', 'value':rf_reconstr, 'mu_xy':(mu_x,mu_y), 'theta':theta, 'patch_width':patch_width, 'horizontal':False, 'mode':mode, 'drawlines':True} plots = plots + [h_dic_curve] w_dic_curve = {'name':'' if no_title else 'secondary axis', 'value':rf_reconstr, 'mu_xy':(mu_x,mu_y), 'theta':theta, 'patch_width':patch_width, 'horizontal':True, 'mode':mode, 'drawlines':True} plots = plots + [w_dic_curve] write_row_col_fig(plots, 2, 4, outfile, dpi=dpi, alpha=1.0, fontsize=5.5, no_labels=no_title) print 'file:', outfile, 'written.'