Source code for moten.viz

'''
'''
# Anwar O. Nunez-Elizalde (Apr, 2020)
#
# Updates:
#
#
#
import numpy as np

from moten.core import (mk_spatiotemporal_gabor,
                        generate_3dgabor_array,
                        dotspatial_frames,
                        dotdelay_frames,
                        mk_3d_gabor,
                        )

[docs]def plot_3dgabor(vhsize=(576, 1024), gabor_params_dict={}, background=None, title=None, speed=1.0, time_padding=False): '''Show an animation of the 3D Gabor Parameters ---------- ''' import matplotlib.pyplot as plt import matplotlib.animation as animation # get the 3D gabor as an array spatiotemporal_gabor_components = mk_3d_gabor(vhsize, **gabor_params_dict) gabor_video = mk_spatiotemporal_gabor(*spatiotemporal_gabor_components) assert gabor_video.min() >= -1 and gabor_video.max() <= 1 ## TODO: wrap plot_3dgabor_array # generate individual frames fps = gabor_params_dict['stimulus_fps'] nframes = gabor_video.shape[-1] fig, ax = plt.subplots() images = [] for frameidx in range(nframes): if background is None: image_view = gabor_video[..., frameidx] else: gmask = np.abs(gabor_video[...,frameidx]) > 0.01 image_view = background[frameidx].copy() image_view[gmask] *= gabor_video[...,frameidx][gmask] im = ax.imshow(image_view, vmin=-1, vmax=1, cmap='coolwarm' if background is None else 'Greys') framenum = ax.text(0,0,'frame #%04i/%04i (fps=%i)'%(frameidx+1, nframes, fps)) images.append([framenum, im]) # create animation repeat_delay = 1000*(fps - np.mod(nframes, fps))/fps if time_padding else 0.0 ani = animation.ArtistAnimation(fig, images, interval=(1000*(1./fps))*speed, blit=False, repeat=True, repeat_delay=repeat_delay) fig.suptitle(title) return ani
[docs]def plot_3dgabor_array(gabor_video, fps=24, aspect_ratio=1.0, title=None, background=False, speed=1.0, time_padding=False): ''' ''' import matplotlib.pyplot as plt import matplotlib.animation as animation # generate individual frames nframes = gabor_video.shape[-1] fig, ax = plt.subplots() images = [] for frameidx in range(nframes): if background is None: gabor_view = gabor_video[..., frameidx] else: gabor_view = background[frameidx]*gabor_video[...,frameidx] im = ax.imshow(gabor_view, vmin=-1, vmax=1, cmap='coolwarm') framenum = ax.text(0,0,'frame #%04i/%04i (fps=%i)'%(frameidx+1, nframes, fps)) images.append([framenum, im]) # create animation repeat_delay = 1000*(fps - np.mod(nframes, fps))/fps if time_padding else 0.0 ani = animation.ArtistAnimation(fig, images, interval=(1000*(1./fps))*speed, blit=False, repeat=True, repeat_delay=repeat_delay) fig.suptitle(title) return ani