/usr/lib/python2.7/dist-packages/spykeutils/conversions.py is in python-spykeutils 0.4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194  | import scipy as sp
import neo
from . import SpykeException
def spike_train_to_spikes(spike_train, include_waveforms=True):
    """ Return a list of spikes for a spike train.
    Note that while the created spikes have references to the same segment and
    unit as the spike train, the relationships in the other direction are
    not automatically created (the spikes are not attached to the unit or
    segment). Other properties like annotations are not copied or referenced
    in the created spikes.
    :param spike_train: A spike train from which the :class:`neo.core.Spike`
        objects are constructed.
    :type spike_train: :class:`neo.core.SpikeTrain`
    :param bool include_waveforms: Determines if the ``waveforms`` property is
        converted to the spike waveforms. If ``waveforms`` is None, this
        parameter has no effect.
    :returns: A list of :class:`neo.core.Spike` objects, one for every
        spike in ``spike_train``.
    :rtype: list
    """
    waves = None
    if include_waveforms:
        waves = spike_train.waveforms
    spikes = []
    for i, t in enumerate(spike_train):
        s = neo.Spike(t, sampling_rate=spike_train.sampling_rate,
                      left_sweep=spike_train.left_sweep)
        if waves is not None:
            s.waveform = waves[i, :, :]
        s.unit = spike_train.unit
        s.segment = spike_train.segment
        spikes.append(s)
    return spikes
def spikes_to_spike_train(spikes, include_waveforms=True):
    """ Return a spike train for a list of spikes.
    All spikes must have an identical left sweep, the same unit and the same
    segment, otherwise a ``SpykeException`` is raised.
    Note that while the created spike train has references to the same
    segment and unit as the spikes, the relationships in the other direction
    are not automatically created (the spike train is not attached to the
    unit or segment). Other properties like annotations are not copied or
    referenced in the created spike train.
    :param sequence spikes: A sequence of :class:`neo.core.Spike` objects
        from which the spike train is constructed.
    :param bool include_waveforms: Determines if the waveforms from the spike
        objects are used to fill the ``waveforms`` property of the resulting
        spike train. If ``True``, all spikes need a ``waveform`` property
        with the same shape or a ``SpykeException`` is raised (or the
        ``waveform`` property needs to be ``None`` for all spikes).
    :return: All elements of ``spikes`` as spike train.
    :rtype: :class:`neo.core.SpikeTrain`
    """
    if not spikes:
        raise SpykeException('No spikes to create spike train!')
    tu = spikes[0].time.units
    times = sp.zeros(len(spikes)) * tu
    s = spikes[0].segment
    u = spikes[0].unit
    ls = spikes[0].left_sweep
    if include_waveforms and spikes[0].waveform is not None:
        sh = spikes[0].waveform.shape
        wu = spikes[0].waveform.units
        waves = sp.zeros((len(spikes), sh[0], sh[1])) * wu
    else:
        waves = None
        sh = None
    for i, spike in enumerate(spikes):
        if (u != spike.unit or s != spike.segment or
                ls != spike.left_sweep):
            raise SpykeException('Cannot create spike train from spikes with '
                                 'nonuniform properties!')
        times[i] = spikes[i].time
        if include_waveforms:
            if spike.waveform is None:
                if waves is not None:
                    raise SpykeException('Cannot create spike train from '
                                         'spikes where some waveforms are '
                                         'None')
            elif sh != spike.waveform.shape:
                raise SpykeException('Cannot create spike train from spikes '
                                     'with nonuniform waveform shapes!')
            if waves is not None:
                waves[i, :, :] = spike.waveform
    ret = neo.SpikeTrain(times, t_start=times.min(), t_stop=times.max(),
                         waveforms=waves, left_sweep=ls)
    ret.unit = u
    ret.segment = s
    ret.left_sweep = ls
    return ret
def analog_signal_array_to_analog_signals(signal_array):
    """ Return a list of analog signals for an analog signal array.
    If ``signal_array`` is attached to a recording channel group with exactly
    is many channels as there are channels in ``signal_array``, each created
    signal will be assigned the corresponding channel. If the attached
    recording channel group has only one recording channel, all created signals
    will be assigned to this channel. In all other cases, the created
    signal will not have a reference to a recording channel.
    Note that while the created signals may have references to a segment and
    channels, the relationships in the other direction are
    not automatically created (the signals are not attached to the recording
    channel or segment). Other properties like annotations are not copied or
    referenced in the created analog signals.
    :param signal_array: An analog signal array from which the
        :class:`neo.core.AnalogSignal` objects are constructed.
    :type signal_array: :class:`neo.core.AnalogSignalArray`
    :return: A list of analog signals, one for every channel in
        ``signal_array``.
    :rtype: list
    """
    signals = []
    rcg = signal_array.recordingchannelgroup
    for i in xrange(signal_array.shape[1]):
        s = neo.AnalogSignal(
            signal_array[:, i], t_start=signal_array.t_start,
            sampling_rate=signal_array.sampling_rate)
        if len(rcg.recordingchannels) == 1:
            s.recordingchannel = rcg.recordingchannels[0]
        elif len(rcg.recordingchannels) == signal_array.shape[1]:
            s.recordingchannel = rcg.recordingchannels[i]
        s.segment = signal_array.segment
        signals.append(s)
    return signals
def event_array_to_events(event_array):
    """ Return a list of events for an event array.
    Note that while the created events may have references to a segment,
    the relationships in the other direction are not automatically created
    (the events are not attached to the segment). Other properties like
    annotations are not copied or referenced in the created events.
    :param event_array: An event array from which the Event objects are
        constructed.
    :type event_array: :class:`neo.core.EventArray`
    :return: A list of events, one for of the events in ``event_array``.
    :rtype: list
    """
    events = []
    for i, t in enumerate(event_array.times):
        e = neo.Event(
            t, event_array.labels[i] if i < len(event_array.labels) else '')
        e.segment = event_array.segment
        events.append(e)
    return events
def epoch_array_to_epochs(epoch_array):
    """ Return a list of epochs for an epoch array.
    Note that while the created epochs may have references to a segment,
    the relationships in the other direction are not automatically created
    (the events are not attached to the segment). Other properties like
    annotations are not copied or referenced in the created epochs.
    :param epoch_array: A period array from which the Epoch objects are
        constructed.
    :type epoch_array: :class:`neo.core.EpochArray`
    :return: A list of events, one for of the events in ``epoch_array``.
    :rtype: list
    """
    periods = []
    for i, t in enumerate(epoch_array.times):
        p = neo.Epoch(
            t, epoch_array.durations[i],
            epoch_array.labels[i] if i < len(epoch_array.labels) else '')
        p.segment = epoch_array.segment
        periods.append(p)
    return periods
 |