def test_filter_unsigned():
    traces = np.random.randint(1, 1000, (5000, 4), dtype="uint16")
    rec = NumpyRecording(traces_list=traces, sampling_frequency=1000)
    rec = rec.save()

    rec2 = bandpass_filter(rec, freq_min=10., freq_max=300.)
    assert not np.issubdtype(rec2.get_dtype(), np.unsignedinteger)
    traces2 = rec2.get_traces()
    assert not np.issubdtype(traces2.dtype, np.unsignedinteger)

    # notch filter note supported for unsigned
    with pytest.raises(TypeError):
        rec3 = notch_filter(rec, freq=300., q=10)

    # this is ok
    rec3 = notch_filter(rec, freq=300., q=10, dtype="float32")
Beispiel #2
0
def test_remove_bad_channels():
    num_channels = 4
    sampling_frequency = 30000.
    durations = [10.325, 3.5]

    num_segments = len(durations)
    num_timepoints = [int(sampling_frequency * d) for d in durations]

    traces_list = []
    for i in range(num_segments):
        traces = np.random.randn(num_timepoints[i], num_channels).astype('float32')
        # one channel have big noise
        traces[:, 1] *= 10
        times = np.arange(num_timepoints[i]) / sampling_frequency
        traces += np.sin(2 * np.pi * 50 * times)[:, None]
        traces_list.append(traces)
    rec = NumpyRecording(traces_list, sampling_frequency)

    probe = generate_linear_probe(num_elec=num_channels)
    probe.set_device_channel_indices(np.arange(num_channels))
    rec.set_probe(probe, in_place=True)

    rec2 = remove_bad_channels(rec, bad_threshold=5.)

    # Check that the noisy channel is taken out
    assert np.array_equal(rec2.get_channel_ids(), [0, 2, 3]), "wrong channel detected."
    # Check that the number of segments is maintained after preprocessor
    assert np.array_equal(rec2.get_num_segments(), rec.get_num_segments()), "wrong numbber of segments."
    # Check that the size of the segments os maintained after preprocessor
    assert np.array_equal(*([r.get_num_frames(x) for x in range(rec.get_num_segments())] for r in
                            [rec, rec2])), "wrong lenght of resulting segments."
    # Check that locations are mantained
    assert np.array_equal(rec.get_channel_locations()[[0, 2, 3]],
                          rec2.get_channel_locations()), "wrong channels locations."
Beispiel #3
0
def generate_recording(
        num_channels=2,
        sampling_frequency=30000.,  # in Hz
        durations=[10.325, 3.5],  #  in s for 2 segments
):
    num_segments = len(durations)
    num_timepoints = [int(sampling_frequency * d) for d in durations]

    traces_list = []
    for i in range(num_segments):
        traces = np.random.randn(num_timepoints[i],
                                 num_channels).astype('float32')
        times = np.arange(num_timepoints[i]) / sampling_frequency
        traces += np.sin(2 * np.pi * 50 * times)[:, None]
        traces_list.append(traces)
    recording = NumpyRecording(traces_list, sampling_frequency)

    probe = generate_linear_probe(num_elec=num_channels)
    probe.set_device_channel_indices(np.arange(num_channels))
    recording.set_probe(probe, in_place=True)

    return recording
Beispiel #4
0
import matplotlib.pyplot as plt
import numpy as np

from spikeinterface import NumpyRecording, NumpySorting
from spikeinterface import append_recordings, concatenate_recordings

##############################################################################
# First let's generate 2 recordings with 2 and 3 segments respectively.
#

sampling_frequency = 1000.

trace0 = np.zeros((150, 5), dtype='float32')
trace1 = np.zeros((100, 5), dtype='float32')
rec0 = NumpyRecording([trace0, trace1], sampling_frequency)
print(rec0)

trace2 = np.zeros((50, 5), dtype='float32')
trace3 = np.zeros((200, 5), dtype='float32')
trace4 = np.zeros((120, 5), dtype='float32')
rec1 = NumpyRecording([trace2, trace3, trace4], sampling_frequency)
print(rec1)

##############################################################################
# lets use `append_recordings()`

recording_list = [rec0, rec1]
rec = append_recordings(recording_list)
print(rec)
for i in range(rec.get_num_segments()):