Source code for spykeutils.plot.correlogram

from guiqwt.builder import make
from guiqwt.baseplot import BasePlot
from guiqwt.plot import BaseCurveWidget
import quantities as pq
import scipy as sp

from .. import SpykeException
from ..progress_indicator import ProgressIndicator
from ..correlations import correlogram
from dialog import PlotDialog
import helper


@helper.needs_qt
[docs]def cross_correlogram(trains, bin_size, max_lag=500 * pq.ms, border_correction=True, time_unit=pq.ms, progress=None): """ Create (cross-)correlograms from a dictionary of spike train lists for different units. :param dict trains: Dictionary of :class:`neo.core.SpikeTrain` lists. :param bin_size: Bin size (time). :type bin_size: Quantity scalar :param max_lag: Maximum time lag for which spikes are considered (end time of calculated correlogram). :type max_lag: Quantity scalar :param bool border_correction: Apply correction for less data at higher timelags. :param Quantity time_unit: Unit of X-Axis. :param progress: Set this parameter to report progress. :type progress: :class:`spykeutils.progress_indicator.ProgressIndicator` """ if not trains: raise SpykeException('No spike trains for correlogram') if not progress: progress = ProgressIndicator() win_title = 'Correlogram | Bin size ' + str(bin_size) progress.begin('Creating correlogram') progress.set_status('Calculating...') win = PlotDialog(toolbar=True, wintitle=win_title, min_plot_width=150, min_plot_height=100) correlograms, bins = correlogram( trains, bin_size, max_lag, border_correction, time_unit, progress) x = bins[:-1] + bin_size / 2 crlgs = [] indices = correlograms.keys() for i1 in xrange(len(indices)): for i2 in xrange(i1, len(indices)): crlgs.append( (correlograms[indices[i1]][indices[i2]], indices[i1], indices[i2])) columns = int(sp.sqrt(len(crlgs))) legends = [] for i, c in enumerate(crlgs): legend_items = [] pW = BaseCurveWidget(win) plot = pW.plot plot.set_antialiasing(True) plot.add_item(make.curve(x, c[0])) # Create legend color = helper.get_object_color(c[1]) color_curve = make.curve( [], [], c[1].name, color, 'NoPen', linewidth=1, marker='Rect', markerfacecolor=color, markeredgecolor=color) legend_items.append(color_curve) plot.add_item(color_curve) if c[1] != c[2]: color = helper.get_object_color(c[2]) color_curve = make.curve( [], [], c[2].name, color, 'NoPen', linewidth=1, marker='Rect', markerfacecolor=color, markeredgecolor=color) legend_items.append(color_curve) plot.add_item(color_curve) legends.append(make.legend(restrict_items=legend_items)) plot.add_item(legends[-1]) if i >= len(crlgs) - columns: plot.set_axis_title(BasePlot.X_BOTTOM, 'Time') plot.set_axis_unit(BasePlot.X_BOTTOM, time_unit.dimensionality.string) if i % columns == 0: plot.set_axis_title(BasePlot.Y_LEFT, 'Correlation') plot.set_axis_unit(BasePlot.Y_LEFT, 'count/segment') win.add_plot_widget(pW, i, column=i % columns) win.add_custom_curve_tools() progress.done() win.add_legend_option(legends, True) win.show() if len(crlgs) > 1: win.add_x_synchronization_option(True, range(len(crlgs))) win.add_y_synchronization_option(False, range(len(crlgs))) return win

Project Versions

This Page