ppc = stim_all[session][1]

    for unit in m2:
        firing_rate = unit.mean()
        firing_rate = firing_rate.iloc[0: 1000]
        baseline = firing_rate.iloc[-500: -100]
        firing_rate = firing_rate - baseline
        if firing_rate.max() < abs(firing_rate.min()):
            np.where(firing_rate == firing_rate.min())
        else:
            np.where(firing_rate == firing_rate.max())
        
    fig = spike_rate.per_unit_spike_rate(stim_all[session][rec_num], ci=ci)
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to all visual stimulations)')
    utils.save(fig_dir / f'unit_spike_rate_all_visual_stim_{duration}s_{area}_{name}')

    #fig = spike_rate.per_unit_spike_rate(stim_short[session][rec_num], ci=ci)
    #name = exp[session].name
    #plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to short visual stimulations)')
    #utils.save(fig_dir / f'unit_spike_rate_short_visual_stim_{duration}s_{area}_{name}')

    #fig = spike_rate.per_unit_spike_rate(stim_long[session][rec_num], ci=ci)
    #name = exp[session].name
    #plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to long visual stimulations)')
    #utils.save(fig_dir / f'unit_spike_rate_long_visual_stim_{duration}s_{area}_{name}')

    #fig = spike_rate.per_unit_spike_rate(stim_left[session][rec_num], ci=ci)
    #name = exp[session].name
    #plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to visual stimulations on the left)')
    #utils.save(fig_dir / f'unit_spike_rate_left_viusal_stim_{duration}s_{area}_{name}')
Ejemplo n.º 2
0
            #('none', len(non_responsives) / num_units),
        ]

        for_df = []
        for response, proportion in summary:
            for_df.append({
                'Session': session,
                'Response': response,
                'Proportion': proportion,
            })
        data[cell_type] = data[cell_type].append(pd.DataFrame(for_df))

fig, axes = plt.subplots(2, 1, sharex=True)

sns.barplot(x="Session",
            y="Proportion",
            hue="Response",
            data=data[0],
            ax=axes[0])
axes[0].set_title('Median spike width < 0.4 ms')

sns.barplot(x="Session",
            y="Proportion",
            hue="Response",
            data=data[1],
            ax=axes[1])
axes[1].set_title('Median spike width >= 0.4 ms')

plt.suptitle("Cued vs stim modulated populations as proportion of cue-active")
utils.save(fig_dir / f'cued_vs_stim_resp_pops_proportions.png')
    linewidth=2.5,
    color=".25",
)

biases = {
    "No bias": counts_no_bias,
    "Push": counts_push_bias,
    "Pull": counts_pull_bias,
    "Both": counts_bimodal,
    "Opposite": counts_opposite,
}
bias_df = pd.DataFrame(biases).melt(value_name="Proportion", var_name="Group")

sns.boxplot(
    data=bias_df,
    x="Group",
    y="Proportion",
    ax=axes[1],
    linewidth=2.5,
)
sns.swarmplot(
    data=bias_df,
    x="Group",
    y="Proportion",
    ax=axes[1],
    linewidth=2.5,
    color=".25",
)
axes[0].set_ylim([0, 1])
utils.save(fig_dir / "resp_groups.pdf")
Ejemplo n.º 4
0
    "C57_1319782",
    "C57_1319785",
]

exp = Experiment(
    mice,
    PushPull,
    '~/duguidlab/Direction_Sensitivity/Data/Neuropixel',
    #'~/duguidlab/CuedBehaviourAnalysis/Data/TrainingJSON',
)

sns.set(font_scale=0.4)
fig_dir = Path('~/duguidlab/visuomotor_control/figures/DS')

# all clusters
fig = clusters.depth_profile(exp, curated=False)
plt.ylim([2000, -250])
plt.suptitle('Cluster depth profile uncurated')
utils.save(fig_dir / f'cluster_depth_profile_uncurated')

#fig = clusters.depth_profile(exp, curated=True)
#plt.ylim([-250, 2000])
#plt.suptitle('Cluster depth profile curated')
#utils.save(fig_dir / f'cluster_depth_profile_curated')

# post-curation good units in the brain
#fig = clusters.depth_profile(exp, curated=True, group='good')
#plt.suptitle('Cluster depth profile good units in brain')
#plt.ylim([2000, 0])
#utils.save(fig_dir / f'cluster_depth_profile_neurons')
exp.set_cache(False)

sns.set(font_scale=0.4)
fig_dir = Path('~/duguidlab/visuomotor_control/figures')

exp.process_behaviour()

hits = exp.align_trials(
    ActionLabels.rewarded_push,
    Events.back_sensor_open,
    'behavioural',
    duration=duration,
)

fig, axes = plt.subplots(5, 1, sharex=True)
channels = hits.columns.get_level_values('unit').unique()

for i, session in enumerate(exp):
    for c in range(5):
        chan_name = channels[c]
        sns.lineplot(
            data=hits[i][rec_num][chan_name][trial],
            estimator=None,
            style=None,
            ax=axes[c]
        )
        ax.set_title(chan_name)

    name = session.name
    utils.save(fig_dir / f'behaviour_alignment_{name}_trial{trial}_{duration}s')
    centre = 1.333333
    istep = p_means.index[1] - p_means.index[0]
    p_roll = ((centre - p_means.loc[1:1.53].idxmin()) / istep).round()
    i_roll = ((centre - i_means.loc[1:1.53].idxmin()) / istep).round()
    for i in p_means:
        p_means[i] = np.roll(p_means[i].values, int(p_roll[i]))
    for i in i_means:
        i_means[i] = np.roll(i_means[i].values, int(i_roll[i]))
    left_clip = int(max(p_roll.max(), i_roll.max()))
    right_clip = int(min(p_roll.min(), i_roll.min()))
    p_means = p_means.iloc[left_clip:right_clip]
    i_means = i_means.iloc[left_clip:right_clip]

    plt.plot(p_means, color='green', alpha=0.5, lw=1)
    plt.plot(i_means, color='orange', alpha=0.5, lw=1)
    utils.save(fig_dir / 'cell_type_waveforms')

if by_ses:
    for session in range(len(exp)):
        name = exp[session].name

        if pyramidals_units[session][0]:
            clusters.session_waveforms(pyramidals[session][rec_num])
            plt.suptitle(f'Session {name} - pyramidal cell waveforms')
            utils.save(fig_dir / f'pyramidal_cell_waveforms_{name}')
        else:
            print("No pyramidals for session", name)

        if interneuron_units[session][0]:
            clusters.session_waveforms(interneurons[session][rec_num])
            plt.suptitle(f'Session {name} - interneuron cell waveforms')
)

pulls = exp.align_trials(
    ActionLabels.rewarded_pull_good_mi,
    Events.motion_index_onset,
    'spike_rate',
    duration=duration,
    units=units,
)

# Only one recording
rec_num = 0

# I wanted to really check that the same units list is seen in all variables
all_unit_ids = [u for s in units for r in s for u in r]
ps_units = pushes.columns.get_level_values('unit').unique().values.copy()
pl_units = pulls.columns.get_level_values('unit').unique().values.copy()
ps_units.sort()
pl_units.sort()
assert all(ps_units == np.unique(all_unit_ids))
assert all(pl_units == np.unique(all_unit_ids))

# Plot
for i, session in enumerate(exp):
    name = session.name

    subplots = spike_rate.per_unit_spike_rate(pushes[i][rec_num], ci='sd')
    spike_rate.per_unit_spike_rate(pulls[i][rec_num], ci='sd', subplots=subplots)
    plt.suptitle(f'Pushes + pulls - per-unit firing rate (aligned to MI onset)')
    utils.save(fig_dir / f'pushpulls_unit_spike_rate_{duration}s_{name}.pdf')
Ejemplo n.º 8
0
        stim_times[ses][rec_num].columns.get_level_values('trial').unique())
    spike_times.single_unit_raster(hit_times[ses][rec_num][unit],
                                   ax=ax,
                                   sample=num_stim)
    spike_times.single_unit_raster(stim_times[ses][rec_num][unit],
                                   ax=ax,
                                   start=num_stim)
    ax.set_axis_off()
    ax.xaxis.set_label_text("")
    ax.yaxis.set_label_text("")

    ax = axes[axbase + 1][i % 4]
    spike_rate.single_unit_spike_rate(hits[ses][rec_num][unit], ax=ax)
    spike_rate.single_unit_spike_rate(stim[ses][rec_num][unit], ax=ax)
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    ax.set_xticks([-2, 0, 2])
    ax.xaxis.set_label_text("")
    ax.yaxis.set_label_text("")

    bottom, top = ax.get_ylim()
    d = top / 5
    bottom -= d
    top += d
    ax.set_ylim(bottom, top)

    if i == 3:
        axbase = 2

utils.save(out)
Ejemplo n.º 9
0
for mouse in mouse_ids:
    mouse_results = results[results['mouse_id'] == mouse]
    max_reward = mouse_results['correct'].max()
    best_day = mouse_results[mouse_results['correct'] == max_reward]
    incorrects.append(best_day['incorrect'].values[0])
    max_rewards.append(max_reward)
    best_days.append(best_day['day'].values[0])

# Get trial data from best days
trials = pd.DataFrame(cohort.get_trials())
trials["grasp_latency"] = trials.end - trials.start
latencies = []

for i, mouse in enumerate(mouse_ids):
    mouse_trials = trials[trials['mouse_id'] == mouse]
    day_trials = mouse_trials[mouse_trials['day'] == best_days[i]]
    corrects = day_trials[day_trials['outcome'] == Outcomes.CORRECT]
    latencies.append(corrects["grasp_latency"])

all_latencies = pd.concat(latencies, axis=1, keys=mouse_ids)

_, axes = plt.subplots(2, 2)
sns.histplot(data=all_latencies, ax=axes[0][0])
sns.boxplot(data=all_latencies, ax=axes[0][1])
sns.violinplot(data=all_latencies, ax=axes[1][0])
sns.stripplot(data=all_latencies, ax=axes[1][1])
utils.save(
    "~/duguidlab/visuomotor_control/figures/srf_grant/reach_behaviour_grasp_latency.pdf"
)
                                           sample=num_stim,
                                           label=False)
    spike_times.per_unit_raster(stim[session][rec_num][resps],
                                start=num_stim,
                                subplots=subplots)

    subplots.to_label.set_xticks([-2000, 0, 2000])
    subplots.to_label.set_xticklabels([-2, 0, 2])
    subplots.legend.text(
        0,
        0.6,
        'cued pushes',
        transform=subplots.legend.transAxes,
        color=palette[0],
    )
    subplots.legend.text(
        0,
        0.3,
        'opto-stim pushes',
        transform=subplots.legend.transAxes,
        color=palette[1],
    )

    name = exp[session].name
    plt.suptitle(
        f'Session {name} - pyramidal - per-unit spike times (aligned to push)')
    utils.save(
        fig_dir /
        f'unit_raster_responsive_PC_cued+stim_push_{duration}s_{name}.png')
    print(name, resps)
Ejemplo n.º 11
0
                    break
                elif ci_bin[97.5] < 0:
                    count_resp += 1
                    break

        if as_proportions:
            data.append((count_resp / count, area, name))
        else:
            data.append((count_resp, area, name))

if as_proportions:
    df = pd.DataFrame(
        data, columns=["Proportion of Neurons", "Brain Area", "Session"])
    sns.boxplot(data=df, x="Brain Area", y="Proportion of Neurons")
    sns.stripplot(data=df,
                  x="Brain Area",
                  y="Proportion of Neurons",
                  color=".25",
                  jitter=0)
    utils.save(fig_dir / f'Proportion_of_Neurons')

else:
    df = pd.DataFrame(data,
                      columns=["Number of Neurons", "Brain Area", "Session"])
    sns.pointplot(data=df,
                  x="Session",
                  hue="Brain Area",
                  y="Number of Neurons",
                  dodge=True)
    utils.save(fig_dir / f'Number_of_Neurons')
Ejemplo n.º 12
0
        pooled.append(values)
    else:
        axes[-1].hist(
            widths[session]['median_ms'].values,
            bins=np.arange(0, 1.1, 0.05),
            alpha=0.6,
        )

if pool:
    axes[-1].hist(
        np.concatenate(pooled),
        bins=np.arange(0, 1.1, 0.05),
        alpha=0.6,
    )

axes[-1].set_title(f"All sessions")
axes[-1].set_ylabel("Count")
axes[-1].axvline(x=0.4, c='red')
axes[-1].set_xlabel("Median spike width (ms)")
axes[-1].text(
    0.95, 0.15,
    f"Total: {sum(counts)}",
    horizontalalignment='right',
    verticalalignment='top',
    transform=axes[-1].transAxes,
    color='0.3',
)

plt.suptitle('Median spike widths - good units in deep layers')
utils.save(fig_dir / 'median_spike_widths_good_deep_units')
Ejemplo n.º 13
0
sns.set(font_scale=0.4)
fig_dir = Path('~/duguidlab/visuomotor_control/figures')
duration = 2

_, axes = plt.subplots(len(exp), 1)

hits = exp.align_trials(
    ActionLabels.cued_shutter_push_full,
    Events.back_sensor_open,
    'spike_rate',
    duration=duration,
    min_depth=500,
    max_depth=1200,
)

for session in range(len(exp)):
    name = exp[session].name
    data = hits[session].stack()
    norm = StandardScaler().fit(data).transform(data)
    num_components = norm.shape[1]
    pca = PCA(n_components=num_components)
    # probably don't need to transform
    pc = pca.fit(norm).transform(norm)

    axes[session].plot(np.cumsum(pca.explained_variance_ratio_))
    axes[session].plot([0, num_components], [0, 1], '--', linewidth=0.4)
    plt.xlabel('Components')
    plt.ylabel('Cumulative explained variance')

utils.save(fig_dir / f"scree_plot_good_deep_units_{duration}s.png")
Ejemplo n.º 14
0
        for unit in cell_type[session][rec_num]:
            depth = info.loc[info["id"] == unit]["real_depth"].values[0]
            if unit in both_resps:
                group = "both"
            elif unit in push_resps:
                group = "push"
            elif unit in pull_resps:
                group = "pull"
            else:
                group = "none"
            data.append((unit, depth, group, cell_type_names[c]))

    df = pd.DataFrame(data, columns=["ID", "depth", "group", "cell type"])
    sns.stripplot(
        x="group",
        order=["none", "push", "pull", "both"],
        y="depth",
        hue="cell type",
        data=df,
        ax=axes[session],
    )
    axes[session].set_ylim(980, 520)
    if session > 0:
        axes[session].get_legend().remove()

    print(exp[session].name, len(non_resps), len(push_resps), len(pull_resps),
          len(both_resps))

plt.gcf().set_size_inches(8, 5)
utils.save(fig_dir / f'push_pull_responsives_by_depth.pdf', nosize=True)
Ejemplo n.º 15
0
        ax2.set_ylim([0, 1])

        # Look in -300ms to +1000ms response window
        if np.any(unit_acc[17:30] > unit_thresh[17:30]):
            sigs.append(unit)

        ax.autoscale(enable=True, tight=True)
        ax.get_xaxis().get_label().set_visible(False)
        ax.get_yaxis().get_label().set_visible(False)
        ax2.get_xaxis().get_label().set_visible(False)
        ax2.get_yaxis().get_label().set_visible(False)
        for spine in ax.spines.values():
            spine.set_linewidth(0.2)
            spine.set_color('gray')
        for spine in ax2.spines.values():
            spine.set_linewidth(0.2)
            spine.set_color('gray')
        ax.tick_params(left=False, labelleft=True, labelbottom=False)
        ax2.tick_params(right=False, labelright=False, labelbottom=False)

    r = len(sigs)
    a = len(units)
    p = round(100 * r / a, 1)
    percs.append(p)
    print(f"{r} / {a} units ({p}%)")
    plt.suptitle(
        f'Push + pull firing rate + coding accuracy per (aligned to MI onset)')
    utils.save(fig_dir / f"firing_rate+unit_coding_accuracies_{session.name}")

print(percs)
Ejemplo n.º 16
0
        resps = [pushes[session][rec_num][unit], pulls[session][rec_num][unit]]

        for action, t in enumerate(resps):
            for b in range(4):
                if 0 < t[b][2.5]:
                    pos[action].append(unit)
                    resp = True
                    break

                elif t[b][97.5] < 0:
                    neg[action].append(unit)
                    resp = True
                    break

        if not resp:
            non_resps.add(unit)

    push_resps = set(pos[0] + neg[0])
    pull_resps = set(pos[1] + neg[1])

    venn2(
        [push_resps, pull_resps],
        ("Pushes", "Pulls"),
        ax=axes[session]
    )
    axes[session].set_title(exp[session].name)
    axes[session].text(0.05, 0.95, len(non_resps))


utils.save(fig_dir / f'push_pull_responsive_sizes.pdf')
Ejemplo n.º 17
0
        stim_responsives = set()
        stim_miss_responsives = set()
        non_responsives = set()

        for unit in cue_resp.index.get_level_values('unit').unique():
            resp = False
            if responsiveness.significant_CI(cue_resp[unit]):
                resp = True
                cue_responsives.add(unit)
            if responsiveness.significant_CI(stim_resp[unit]):
                resp = True
                stim_responsives.add(unit)
            if responsiveness.significant_CI(stim_miss_resp[unit]):
                resp = True
                stim_miss_responsives.add(unit)
            if not resp:
                non_responsives.add(unit)

        venn3([cue_responsives, stim_responsives, stim_miss_responsives],
              ("Cued pushes", "Stim pushes", "Stim misses"),
              ax=axes[session][depth])
        axes[session][depth].set_title(
            f"{exp[session].name} - {depths[depth]}")
        plt.text(0.05,
                 0.95,
                 len(non_responsives),
                 transform=axes[session][depth].transAxes)

utils.save(fig_dir /
           f'Cued vs stim push vs stim miss resp pops, different depths.png')
Ejemplo n.º 18
0
)

pulls = exp.align_trials(
    ActionLabels.rewarded_pull,
    Events.front_sensor_open,
    'spike_rate',
    duration=duration,
    uncurated=True,
)

for session in range(len(exp)):
    # per unit
    fig = spike_rate.per_unit_spike_rate(pushes[session][rec_num], ci='sd')
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to cued push)')
    utils.save(fig_dir / f'unit_spike_rate_cued_push_{duration}s_{name}_sd')

    fig = spike_rate.per_unit_spike_rate(pulls[session][rec_num], ci='sd')
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-unit across-trials firing rate (aligned to cued pull)')
    utils.save(fig_dir / f'unit_spike_rate_cued_pull_{duration}s_{name}_sd')

    # per trial
    fig = spike_rate.per_trial_spike_rate(pushes[session][rec_num], ci='sd')
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-trial across-units firing rate (aligned to cued push)')
    utils.save(fig_dir / f'trial_spike_rate_cued_push_{duration}s_{name}_sd')

    fig = spike_rate.per_trial_spike_rate(pulls[session][rec_num], ci='sd')
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-trial across-units firing rate (aligned to cued pull)')
Ejemplo n.º 19
0
#    fig = spike_times.per_unit_histogram(stim, session, bin_ms=bin_ms, duration=duration)
#    name = exp[session].name
#    plt.suptitle(f'Session {name} - per-unit across-trials spike times (aligned to stim push)')
#    save(f'unit_spike_histograms_stim_{duration}s_{name}_in_brain.png')
#
#for session in range(len(exp)):
#    fig = spike_times.per_trial_histogram(stim, session, bin_ms=bin_ms, duration=duration)
#    name = exp[session].name
#    plt.suptitle(f'Session {name} - per-trial across-unit spike times (aligned to stim push)')
#    save(f'trial_spike_histograms_stim_{duration}s_{name}_in_brain.png')


stim_miss = exp.align_trials(
    ActionLabels.uncued_laser_nopush,
    Events.laser_onset,
    'spike_times',
    duration=duration,
)

for session in range(len(exp)):
    fig = spike_times.per_unit_histogram(stim_miss, session, bin_ms=bin_ms, duration=duration)
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-unit across-trials spike times (aligned to nopush stim)')
    utils.save(fig_dir / f'unit_spike_histograms_stim-miss_{duration}s_{name}_in_brain')

for session in range(len(exp)):
    fig = spike_times.per_trial_histogram(stim_miss, session, bin_ms=bin_ms, duration=duration)
    name = exp[session].name
    plt.suptitle(f'Session {name} - per-trial across-unit spike times (aligned to nopush stim)')
    utils.save(fig_dir / f'trial_spike_histograms_stim-miss_{duration}s_{name}_in_brain')
Ejemplo n.º 20
0
]

exp = Experiment(
    mice,
    PushPull,
    '~/duguidlab/Direction_Sensitivity/Data/Neuropixel',
)

hits = exp.align_trials(
    ActionLabels.rewarded_push,
    Events.back_sensor_open,
    'motion_index',
    duration=duration,
)


for i, session in enumerate(exp):
    fig, axes = plt.subplots(10, 1, sharex=True)

    for t in range(10):
        sns.lineplot(
            data=hits[i][rec_num][0][t],
            estimator=None,
            style=None,
            ax=axes[t]
        )
        axes[t].set_title(f"Trial {t}")

    name = session.name
    utils.save(fig_dir / f'motion_index_aligned_to_tone_{name}_{duration}s')
        alpha=0.8,
        linewidth=0.8,
        fmt='.',
    )
    axes[0][session].set_xlim(-10, 50)
    axes[0][session].set_ylim(-10, 50)
    axes[0][session].set_aspect('equal')
    results[exp[session].name] = as_df
    num_resp = len(pos) + len(neg)
    weights.extend([1/num_resp] * num_resp)

all_results = pd.concat(results)
all_results.reset_index(level=0, inplace=True)
#sns.scatterplot(
#    data=all_results,
#    x='Cued',
#    y='Stim',
#    hue='level_0',
#    ax=axes[1][0],
#    legend=None,
#)
axes[1][0].set_aspect('equal')
axes[1][0].set_xlim(-10, 50)
axes[1][0].set_ylim(-10, 50)
plt.suptitle('Cued vs stim push median dHz')

for ax in axes[1][1:]:
    ax.set_visible(False)

utils.save(fig_dir / f'cued_vs_stim_push_median_dHz')
            else:
                group = "none"
            data.append((unit, depth, group, cell_type_names[c]))

    labels = [
        "none", "push_only", "pull_only", "push_bias", "pull_bias", "no_bias",
        "both_bias"
    ]
    df = pd.DataFrame(data, columns=["ID", "depth", "group", "cell type"])
    sns.stripplot(
        x="group",
        order=labels,
        y="depth",
        hue="cell type",
        data=df,
        ax=axes[session],
    )
    axes[session].set_ylim(980, 520)
    if session > 0:
        axes[session].get_legend().remove()

    axes[session].set_xticklabels(labels, rotation=45)

    print(exp[session].name, len(non_resps), "    ", len(push_only), "    ",
          len(pull_only), "    ", len(push_bias), "    ", len(pull_bias),
          "    ", len(no_bias), "    ", len(both_bias))

plt.gcf().set_size_inches(8, 5)
utils.save(fig_dir / f'push_pull_responsives_by_depth_and_bias_{step}.pdf',
           nosize=True)
Ejemplo n.º 23
0
sns.set(font_scale=0.4)
fig_dir = Path('~/duguidlab/visuomotor_control/figures/srf_grant')

if rates_not_rasters:
    firing_rates = exp.align_trials(
        ActionLabels.rewarded_push,
        Events.back_sensor_open,
        'spike_rate',
        duration=duration,
    )

    # IPN
    ses = exp[ses_ipn_gpi].name
    spike_rate.per_unit_spike_rate(firing_rates[ses_ipn_gpi][ipn], ci='sd')
    plt.suptitle(f'IPN - per-unit across-trials firing rate (aligned to push)')
    utils.save(fig_dir / f'IPN_unit_spike_rate_{duration}s_{ses}.png')

    # GPi
    spike_rate.per_unit_spike_rate(firing_rates[ses_ipn_gpi][gpi], ci='sd')
    plt.suptitle(f'GPi - per-unit across-trials firing rate (aligned to push)')
    utils.save(fig_dir / f'GPi_unit_spike_rate_{duration}s_{ses}.png')

    # MTh
    ses = exp[ses_m1_mth].name
    spike_rate.per_unit_spike_rate(firing_rates[ses_m1_mth][mth], ci='sd')
    plt.suptitle(f'Motor thalamus - per-unit across-trials firing rate (aligned to push)')
    utils.save(fig_dir / f'MTh_unit_spike_rate_{duration}s_{ses}.png')

else:
    times = exp.align_trials(
        ActionLabels.rewarded_push,
Ejemplo n.º 24
0
# Plot
for session in range(len(exp)):
    subplots = spike_times.per_unit_raster(pushes[session][rec_num],
                                           label=False)
    num_pushes = len(
        pushes[session][rec_num].columns.get_level_values('trial').unique())
    spike_times.per_unit_raster(pulls[session][rec_num],
                                start=num_pushes,
                                subplots=subplots)

    subplots.to_label.set_xticks([-2000, 0, 2000])
    subplots.to_label.set_xticklabels([-2, 0, 2])
    subplots.legend.text(
        0,
        0.6,
        'Pushes',
        transform=subplots.legend.transAxes,
        color=palette[0],
    )
    subplots.legend.text(
        0,
        0.3,
        'Pulls',
        transform=subplots.legend.transAxes,
        color=palette[1],
    )

    name = exp[session].name
    plt.suptitle(f'Session {name} - pyramidal - per-unit spike times')
    utils.save(fig_dir / f'unit_raster_PC_{duration}s_{name}.png')
Ejemplo n.º 25
0
import matplotlib.pyplot as plt
import seaborn as sns

from pixels import Experiment
from pixels.behaviours.reach import VisualOnly
from pixtools import clusters, utils

mice = [       
 ##  'HFR19',
    'HFR20',
 ##  'HFR21',
 ##  'HFR22',
 ##  'HFR23',
]

exp = Experiment(
    mice,
    VisualOnly,
    '~/duguidlab/visuomotor_control/neuropixels',
    '~/duguidlab/CuedBehaviourAnalysis/Data/TrainingJSON',
)

sns.set(font_scale=0.4)
fig_dir = Path('~/duguidlab/visuomotor_control/AZ_notes')

fig = clusters.depth_profile(exp, curated=True, in_brain=True)
plt.ylim([1750, -250])
plt.suptitle('Cluster depth profile')
utils.save(fig_dir / f'cluster_depth_profile')
Ejemplo n.º 26
0
            else:
                stim_responsives_neg.add(unit)
        #res = responsiveness.significant_CI(stim_miss_resp[unit])
        #if res:
        #    resp = True
        #    if res > 0:
        #        stim_miss_responsives_pos.add(unit)
        #    else:
        #        stim_miss_responsives_neg.add(unit)
        if not resp:
            non_responsives.add(unit)

    print(
        f"session: {exp[session].name}, {len(cue_responsives_pos)}, {len(cue_responsives_neg)}"
    )
    venn2([cue_responsives_pos, stim_responsives_pos],
          ("Cued pushes", "Stim pushes", "Stim misses"),
          ax=axes[session][0])
    venn2([cue_responsives_neg, stim_responsives_neg],
          ("Cued pushes", "Stim pushes"),
          ax=axes[session][0])
    axes[session][0].set_title(f"{exp[session].name} - positive")
    axes[session][1].set_title(f"{exp[session].name} - negative")
    plt.text(0.05,
             0.95,
             len(non_responsives),
             transform=axes[session][0].transAxes)

utils.save(fig_dir /
           f'Cued_vs_stim_push_vs_stim_miss_resp_pops_-_directions.png')