Exemplo n.º 1
0
def plot_odor_plume(config, gm):

    fig = plt.figure()
    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes(fig)
    
    # get static plume
    static_time = 12.
    gm_static = gm.get_gaussian_model_at_time_t(static_time)
    
    # set x axis to be huge
    gm_static.parameters['mean_0'] = 0
    gm_static.parameters['std_0'] = 10000000000000000
    
    #xlim, ylim, resolution, axis=2, axis_slice=0)
    odor_image_xy, extent_xy = gm_static.get_array_2d_slice([-.2,1], [-.15,.15], .001, axis=2, axis_slice=.04)
    odor_image_xz, extent_xz = gm_static.get_array_2d_slice([-.2,1], [-.15,.15], .001, axis=1, axis_slice=.01)
    odor_image_yz, extent_yz = gm_static.get_array_2d_slice([-.15,.15], [-.15,.15], .001, axis=0, axis_slice=0)
    
    ax_xy.imshow(odor_image_xy, extent=extent_xy, origin='lower')
    ax_xz.imshow(odor_image_xz, extent=extent_xz, origin='lower')
    ax_yz.imshow(odor_image_yz, extent=extent_yz, origin='lower')
    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    
    figure_path = os.path.join(config.path, config.figure_path)
    save_figure_path = os.path.join(figure_path, 'odor_traces/')
    pdf_name_with_path = os.path.join(save_figure_path, 'odor_plume_model.pdf')


    fig.savefig(pdf_name_with_path, format='pdf')    
Exemplo n.º 2
0
def plot_post_traces(path, config, dataset, keys=None, save=True):
    if keys is None:
        keys = dataset.trajecs.keys()
        
    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()
    
    for key in keys:
        trajec = dataset.trajecs[key]
        
        if trajec.post_behavior != 'landing':
            if trajec.odor_stimulus != 'none':
                if trajec.distance_to_post[-1] < 0.01:
                
                    print key
                    plot_odor_trace_on_ax(path, config, dataset, keys=[key], axis='xy', ax=ax_xy, show_post=config.post)
                    plot_odor_trace_on_ax(path, config, dataset, keys=[key], axis='xz', ax=ax_xz, show_post=config.post)
                    plot_odor_trace_on_ax(path, config, dataset, keys=[key], axis='yz', ax=ax_yz, show_post=config.post)
                    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    
    if save:
        figname = None
        figure_path = os.path.join(path, config.figure_path)
        save_figure_path = os.path.join(figure_path, 'odor_traces/')
        
        if figname is None:
            figname = save_figure_path + 'trajec_ending_near_post' + '.pdf'
        else:
            figname = os.path.join(save_figure_path, figname)
        plt.savefig(figname, format='pdf')
Exemplo n.º 3
0
def plot_all_heatmaps(
    config, dataset, save_figure_path="", figname=None, keys=None, frames=None, title=None, save=False
):

    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()

    plot_heatmap(
        config, dataset, axis="xy", save_figure_path="", figname=None, keys=keys, frames=frames, ax=ax_xy, save=False
    )
    plot_heatmap(
        config, dataset, axis="xz", save_figure_path="", figname=None, keys=keys, frames=frames, ax=ax_xz, save=False
    )
    plot_heatmap(
        config, dataset, axis="yz", save_figure_path="", figname=None, keys=keys, frames=frames, ax=ax_yz, save=False
    )

    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)

    if title is not None:
        plt.suptitle(title)

    if save:
        if figname is None:
            figname = save_figure_path + "heatmap_" + "all_axes" + ".pdf"
        else:
            figname = save_figure_path + figname
        plt.savefig(figname, format="pdf")
def plot_births_and_deaths(config, dataset, keys=None):
    if keys is None:
        keys = dataset.trajecs.keys()

    def make_plot(ax, births, deaths, keys, axis="yz"):

        if axis == "yz":
            x_births = births[:, [1]]
            y_births = births[:, [2]]
            x_deaths = deaths[:, [1]]
            y_deaths = deaths[:, [2]]

        if axis == "xy":
            x_births = births[:, [0]]
            y_births = births[:, [1]]
            x_deaths = deaths[:, [0]]
            y_deaths = deaths[:, [1]]

        if axis == "xz":
            x_births = births[:, [0]]
            y_births = births[:, [2]]
            x_deaths = deaths[:, [0]]
            y_deaths = deaths[:, [2]]

        fpl.scatter(
            ax, x_births.flatten(), y_births.flatten(), color="green", radius=0.005, alpha=1, use_ellipses=False
        )
        fpl.scatter(ax, x_deaths.flatten(), y_deaths.flatten(), color="red", radius=0.005, alpha=1, use_ellipses=False)

    def collect_births_and_deaths(keys):
        births = []
        deaths = []
        for key in keys:
            trajec = dataset.trajecs[key]
            births.append(trajec.positions[0])
            deaths.append(trajec.positions[-1])
        return np.array(births), np.array(deaths)

    births, deaths = collect_births_and_deaths(keys)

    fig = plt.figure(figsize=(8, 4))
    axes = xyz_axis_grid.get_axes(config, fig, figure_padding=[0.15, 0.15, 0.15, 0.15], subplot_padding=0.01)
    fig = axes["xy"].figure

    make_plot(axes["xy"], births, deaths, keys, axis="xy")
    make_plot(axes["xz"], births, deaths, keys, axis="xz")
    make_plot(axes["yz"], births, deaths, keys, axis="yz")

    xyz_axis_grid.set_spines(config, axes, spines=True)

    name = "births_and_deaths.pdf"
    path = os.path.join(config.path, FIGURE_PATH)
    filename = os.path.join(path, name)
    fig.savefig(filename, format="pdf")
Exemplo n.º 5
0
def plot_trace_ends(path, config, dataset, keys=None, show_saccades=False, save=True):
    if keys is None:
        keys = dataset.trajecs.keys()
        
    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()
    
    if config.post:
        height = config.post_center[2]-config.ticks['z'][0]
        post = patches.Circle(config.post_center[0:2], config.post_radius, color='black')
        ax_xy.add_artist(post)
        post = patches.Rectangle([config.post_center[0]-1*config.post_radius, config.ticks['z'][0]], config.post_radius*2, height, color='black')
        ax_xz.add_artist(post)
        post = patches.Rectangle([config.post_center[1]-1*config.post_radius, config.ticks['z'][0]], config.post_radius*2, height, color='black')
        ax_yz.add_artist(post)    
    
    for key in keys:
        trajec = dataset.trajecs[key]
        
        if trajec.post_behavior == 'landing':
            color = 'green'
        else:
            color = 'red'
        
        if np.max(trajec.distance_to_post) > 0.05:
        
            
            if trajec.positions[-1][2] < 0.0:
                ax_xy.plot(trajec.positions[-1][0],trajec.positions[-1][1],'.', color=color, markersize=1, alpha=0.7)
            
            if np.abs(trajec.positions[-1][1]) < 0.03:
                ax_xz.plot(trajec.positions[-1][0],trajec.positions[-1][2],'.', color=color, markersize=1, alpha=0.7)
                
            if np.abs(trajec.positions[-1][0]) < 0.05:
                ax_yz.plot(trajec.positions[-1][1],trajec.positions[-1][2],'.', color=color, markersize=1, alpha=0.7)

    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    
    if save:
        figname = None
        figure_path = os.path.join(path, config.figure_path)
        save_figure_path = os.path.join(figure_path, 'odor_traces/')
        
        if figname is None:
            figname = save_figure_path + 'trajec_ends' + '.pdf'
        else:
            figname = os.path.join(save_figure_path, figname)
        plt.savefig(figname, format='pdf')
def plot_all_heatmaps(config, dataset, save_figure_path='', figname=None, keys=None, frames=None, title=None, save=False):
    
    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()

    plot_heatmap(config, dataset, axis='xy', save_figure_path='', figname=None, keys=keys, frames=frames, ax=ax_xy, save=False)
    plot_heatmap(config, dataset, axis='xz', save_figure_path='', figname=None, keys=keys, frames=frames, ax=ax_xz, save=False)
    plot_heatmap(config, dataset, axis='yz', save_figure_path='', figname=None, keys=keys, frames=frames, ax=ax_yz, save=False)
    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    
    if title is not None:
        plt.suptitle(title)

    if save:
        if figname is None:
            figname = save_figure_path + 'heatmap_' + 'all_axes' + '.pdf'
        else:
            figname = save_figure_path + figname
        plt.savefig(figname, format='pdf')
Exemplo n.º 7
0
def plot_odor_traces(path, config, dataset, keys=None, show_saccades=False, frames_to_show_before_odor='all', frames_to_show_after_odor='all', save=False, odor_multiplier=1, frameranges=None):

    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()
    
    plot_odor_trace_on_ax(path, config, dataset, keys=keys, axis='xy', show_saccades=show_saccades, frames_to_show_before_odor=frames_to_show_before_odor, frames_to_show_after_odor=frames_to_show_after_odor, ax=ax_xy, odor_multiplier=odor_multiplier, show_post=config.post, frameranges=frameranges)
    
    plot_odor_trace_on_ax(path, config, dataset, keys=keys, axis='xz', show_saccades=show_saccades, frames_to_show_before_odor=frames_to_show_before_odor, frames_to_show_after_odor=frames_to_show_after_odor, ax=ax_xz, odor_multiplier=odor_multiplier, show_post=config.post, frameranges=frameranges)
    
    plot_odor_trace_on_ax(path, config, dataset, keys=keys, axis='yz', show_saccades=show_saccades, frames_to_show_before_odor=frames_to_show_before_odor, frames_to_show_after_odor=frames_to_show_after_odor, ax=ax_yz, odor_multiplier=odor_multiplier, show_post=config.post, frameranges=frameranges)
    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    
    if save:
        figname = None
        figure_path = os.path.join(path, config.figure_path)
        save_figure_path = os.path.join(figure_path, 'odor_traces/')
        
        if figname is None:
            figname = save_figure_path + 'odor_trace' + '.pdf'
        else:
            figname = os.path.join(save_figure_path, figname)
        plt.savefig(figname, format='pdf')
def plot_heatmaps(config, dataset, keys=None, zslice="all", xz_axis_z_velocity_range=[-100, 100]):
    if keys is None:
        keys = dataset.trajecs.keys()

    def make_plot(ax, keys, axis="yz"):
        n_frames = 0
        for key in keys:
            trajec = dataset.trajecs[key]
            n_frames += trajec.length

        binres = 0.003
        binsx = np.linspace(config.xlim[0], config.xlim[1], int((config.xlim[1] - config.xlim[0]) / binres))
        binsy = np.linspace(config.ylim[0], config.ylim[1], int((config.ylim[1] - config.ylim[0]) / binres))
        binsz = np.linspace(config.zlim[0], config.zlim[1], int((config.zlim[1] - config.zlim[0]) / binres))

        if axis == "xy":
            depth = config.zlim[1] - config.zlim[0]
        elif axis == "yz":
            depth = config.xlim[1] - config.xlim[0]
        elif axis == "xz":
            depth = config.ylim[1] - config.ylim[0]
        colornorm = [0, 0.0003 * n_frames * depth]
        colormap = "hot"
        print n_frames

        depth_range = [-2, 2]

        # get rid of errant walking flies
        if axis == "xz":
            velocity_range = xz_axis_z_velocity_range
        else:
            velocity_range = [-100, 100]

        img = fap.heatmap(
            ax,
            dataset,
            axis=axis,
            keys=keys,
            xticks=config.ticks["x"],
            yticks=config.ticks["y"],
            zticks=config.ticks["z"],
            rticks=config.ticks["r"],
            colornorm=colornorm,
            normalize_for_speed=False,
            bins=[binsx, binsy, binsz],
            depth_range=depth_range,
            colormap=colormap,
            return_img=False,
            velocity_range=velocity_range,
        )

    fig = plt.figure(figsize=(8, 5))
    axes = xyz_axis_grid.get_axes(config, fig, figure_padding=[0.15, 0.15, 0.15, 0.15], subplot_padding=0.01)
    fig = axes["xy"].figure

    make_plot(axes["xy"], keys, axis="xy")
    make_plot(axes["xz"], keys, axis="xz")
    make_plot(axes["yz"], keys, axis="yz")

    xyz_axis_grid.set_spines(config, axes, spines=True)

    name = "diagnostic_heatmaps.pdf"
    path = os.path.join(config.path, FIGURE_PATH)
    filename = os.path.join(path, name)
    fig.savefig(filename, format="pdf")
def plot_saccade_positions(pp, threshold_odor, path, config, dataset, odor_stimulus, keys=None):

    ax_xy, ax_xz, ax_yz = xyz_axis_grid.get_axes()
    

    if odor_stimulus is 'on':
        n = 0
        for key in keys:
            if n > 1000:
                break
            trajec = dataset.trajecs[key]
            frames_in_odor = np.where(trajec.odor > threshold_odor)[0]
            odor_blocks = hf.find_continuous_blocks(frames_in_odor, 5, return_longest_only=False)
            
            for block in odor_blocks:
                if len(block) < 5:
                    continue
                first_sac = None
                for sac in trajec.saccades:
                    if trajec.positions[sac[0],0] < -0.1 or trajec.positions[sac[0],0] > 0.9:
                        continue
                    if np.abs(trajec.positions[sac[0],1]) > 0.05:
                        continue
                    if trajec.positions[sac[0],2] > 0.05 or trajec.positions[sac[0],2] < -0.01:
                        continue
                        
                    if sac[0] > block[0]:
                        if first_sac is None:
                            first_sac = sac
                            break
                        
                if first_sac is not None:
                    sac = first_sac
                    n += 1
                    f = np.argmax(np.abs(trajec.heading_smooth_diff[sac])) + sac[0]
                    
                    ax_xy.plot(trajec.positions[f,0], trajec.positions[f,1], '.', color='black')
                    ax_xz.plot(trajec.positions[f,0], trajec.positions[f,2], '.', color='black')
                    ax_yz.plot(trajec.positions[f,1], trajec.positions[f,2], '.', color='black')
    
    if odor_stimulus is 'none':
        n = 0
        for key in keys:
            if n > 1000:
                break
            trajec = dataset.trajecs[key]
            
            for sac in trajec.saccades:
                if trajec.positions[sac[0],0] < -0.1 or trajec.positions[sac[0],0] > 0.9:
                    continue
                if np.abs(trajec.positions[sac[0],1]) > 0.05:
                    continue
                if trajec.positions[sac[0],2] > 0.05 or trajec.positions[sac[0],2] < -0.01:
                    continue
                        
                n += 1
                f = np.argmax(np.abs(trajec.heading_smooth_diff[sac])) + sac[0]
                
                ax_xy.plot(trajec.positions[f,0], trajec.positions[f,1], '.', color='black')
                ax_xz.plot(trajec.positions[f,0], trajec.positions[f,2], '.', color='black')
                ax_yz.plot(trajec.positions[f,1], trajec.positions[f,2], '.', color='black')
    
    xyz_axis_grid.set_spines_and_labels(ax_xy, ax_xz, ax_yz)
    pp.savefig()
    plt.close('all')