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.")
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
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)
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
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
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