def plot_prefreezing_traces(session_index,
                            neurons=None,
                            dtype='events',
                            window=1):
    # Load data and get freezing timestamps.
    session = ff.load_session(session_index)
    freeze_epochs = session.get_freezing_epochs_imaging_framerate()

    if dtype == 'traces':
        data, _ = ca_traces.load_traces(session_index)
        data = zscore(data, axis=1)
    elif dtype == 'events':
        data, _ = ca_events.load_events(session_index)
        data[data > 0] = 1
    else:
        raise ValueError("Invalid data type.")

    if neurons is not None:
        data = data[neurons]
        titles = neuron_number_title(neurons)
    else:
        titles = neuron_number_title(range(len(data)))

    n_neurons = len(data)
    n_freezes = freeze_epochs.shape[0]
    freeze_duration = np.ceil(window * 20).astype(int)

    prefreezing_traces = np.zeros((n_neurons, n_freezes, freeze_duration))

    for n, trace in enumerate(data):
        for i, epoch in enumerate(freeze_epochs):
            start = epoch[0] - freeze_duration
            stop = epoch[0]
            prefreezing_traces[n, i, :] = trace[start:stop]

    if dtype == 'events':
        events = [[(np.where(bout)[0] - freeze_duration) / 20 for bout in cell]
                  for cell in prefreezing_traces]

        f = ScrollPlot(plot_funcs.plot_raster,
                       events=events,
                       window=window,
                       xlabel='Time from start of freezing (s)',
                       ylabel='Freezing bout #',
                       titles=titles)

    elif dtype == 'traces':
        f = ScrollPlot(plot_funcs.plot_heatmap,
                       heatmap=prefreezing_traces,
                       xlabel='Time from start of freezing (s)',
                       ylabel='Freezing bout #',
                       titles=titles)

    else:
        raise ValueError("Invalid data type.")
Exemplo n.º 2
0
def overlay_events(session_index, neurons):
    """
    Plot events on top of traces.
    :param
        session_index: Number corresponding to a session.
        neurons: List of neurons.
    :return
        f: ScrollPlot class.
    """
    # Load events and traces.
    event_times, event_values = load_event_times(session_index)
    traces, t = ca_traces.load_traces(session_index)

    # Plot and scroll.
    titles = neuron_number_title(neurons)
    f = ScrollPlot(plot_funcs.overlay_events,
                   t=t,
                   traces=traces[neurons],
                   event_times=event_times[neurons],
                   event_values=event_values[neurons],
                   xlabel='Time (s)',
                   ylabel='% DF/F',
                   titles=titles)

    return f
Exemplo n.º 3
0
def freezing_trace_heatmap(session_index, neurons='all'):
    # Load the position data.
    session = ff.load_session(session_index)

    # Get freezing epochs.
    freeze_epochs = session.get_freezing_epochs_imaging_framerate()

    # Load trace data.
    traces, t = load_traces(session_index)

    if neurons == 'all':
        n_neurons = len(traces)
        neurons = arange(n_neurons)
    else:
        n_neurons = len(neurons)

    # Get dimensions for heatmap.
    n_freezes = freeze_epochs.shape[0]
    freeze_durations = np.diff(freeze_epochs)
    longest_freeze = freeze_durations.max()

    # Preallocate heatmap.
    freezing_traces = np.full([n_neurons, n_freezes, longest_freeze], np.nan)

    for n in neurons:
        for i, epoch in enumerate(freeze_epochs):
            freezing_traces[n,i,np.arange(freeze_durations[i])] = \
                traces[n,epoch[0]:epoch[1]]

    titles = neuron_number_title(neurons)
    f = ScrollPlot(plot_funcs.heatmap,
                   heatmap=freezing_traces,
                   xlabel='Time from start of freezing (s)',
                   ylabel='Freezing bout #',
                   titles=titles)
Exemplo n.º 4
0
    def plot_traces(self, neurons='all'):
        if neurons == 'all':
            neurons = np.arange(len(self.traces))
            selected_traces = self.aligned_traces
        else:
            selected_traces = [self.aligned_traces[n] for n in neurons]

        titles = neuron_number_title(neurons)

        f = ScrollPlot(plot_funcs.plot_multiple_traces,
                       t=self.ref_time,
                       traces=selected_traces,
                       xlabel='Time from shock (s)',
                       ylabel='Calcium activity (s.d.)',
                       titles=titles)

        return f
Exemplo n.º 5
0
def plot_events(session_index, neurons):
    """
        Plot events as a scatter plot.
        :param
            session_index: Number corresponding to a session.
            neurons: List of neurons.
        :return
            f: ScrollPlot class.
    """
    # Load events.
    event_times, event_values = load_event_times(session_index)

    # Plot and scroll through calcium events.
    titles = neuron_number_title(neurons)
    f = ScrollPlot(plot_funcs.plot_events,
                   event_times=event_times[neurons],
                   event_values=event_values[neurons],
                   xlabel='Time (s)',
                   ylabel='Event magnitude',
                   titles=titles)
    return f
Exemplo n.º 6
0
def plot_traces(session_index, neurons):
    """
    Plot the traces of multiple neurons. You can scroll between neurons!

    :param
        session_index: Number corresponding to a session.
        neurons: List of neurons.
    :return
    """

    # Load the traces.
    traces, t = load_traces(session_index)

    # Scroll through.
    titles = neuron_number_title(neurons)
    f = ScrollPlot(plot_funcs.plot_traces,
                   t=t,
                   traces=traces[neurons],
                   xlabel='Time (s)',
                   ylabel='%DF/F',
                   titles=titles)

    # Gets the ScrollPlot object.
    return f