Exemplo n.º 1
0
    def test_read_block(self):
        """Read data in a certain time range into one block"""
        dirname = self.get_filename_path('Cheetah_v5.6.3/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # There are two segments due to gap in recording
        self.assertEqual(len(block.segments), 2)
        for seg in block.segments:
            self.assertEqual(len(seg.analogsignals), 1)
            self.assertEqual(seg.analogsignals[0].shape[-1], 2)
            self.assertEqual(seg.analogsignals[0].sampling_rate, 2. * pq.kHz)
            self.assertEqual(len(seg.spiketrains), 8)

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 8)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[0],
                         block.segments[0].spiketrains[0].shape[0])
        # this is tetrode data, containing 32 samples per waveform
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[1], 4)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[-1], 32)
        self.assertGreater(len(block.segments[0].events), 0)

        self.assertEqual(len(block.channel_indexes[-1].units[0].spiketrains), 2)

        block = nio.read_block(load_waveforms=True, units_group_mode='all-in-one')
        self.assertEqual(len(block.channel_indexes[-1].units), 8)

        block = nio.read_block(load_waveforms=True, units_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes[-1].units), 1)  # 1 units by ChannelIndex
Exemplo n.º 2
0
    def test_read_block(self):
        """Read data in a certain time range into one block"""
        dirname = self.get_filename_path('Cheetah_v5.5.1/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        self.assertEqual(len(block.segments), 2)
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 2)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32. * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 2)

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 2)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[0],
                         block.segments[0].spiketrains[0].shape[0])
        self.assertGreater(len(block.segments[0].events), 0)

        self.assertEqual(len(block.channel_indexes[-1].units[0].spiketrains), 2)  # 2 segment

        block = nio.read_block(load_waveforms=True, units_group_mode='all-in-one')
        self.assertEqual(len(block.channel_indexes[-1].units), 2)  # 2 units

        block = nio.read_block(load_waveforms=True, units_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes[-1].units), 1)  # 1 units by ChannelIndex
Exemplo n.º 3
0
    def test_read_block(self):
        dirname = self.get_filename_path('Cheetah_v5.7.4/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 5)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32 * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 0)  # no nse files available

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 0)
        self.assertGreater(len(block.segments[0].events), 0)

        block = nio.read_block(signal_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes), 5)

        block = nio.read_block(signal_group_mode='group-by-same-units')
        self.assertEqual(len(block.channel_indexes), 1)
Exemplo n.º 4
0
    def test_read_segment(self):

        dirname = self.get_filename_path('Cheetah_v5.7.4/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        seg = nio.read_segment(time_slice=None)

        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 5)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32*pq.kHz)

        self.assertEqual(len(seg.spiketrains), 0)

        # Testing different parameter combinations
        seg = nio.read_segment(lazy=True)
        self.assertEqual(len(seg.analogsignals[0]), 0)
        self.assertEqual(len(seg.spiketrains), 0)

        seg = nio.read_segment(cascade=False)
        self.assertEqual(len(seg.analogsignals), 0)
        self.assertEqual(len(seg.spiketrains), 0)

        seg = nio.read_segment(load_waveforms=True)
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(len(seg.spiketrains), 0)
        self.assertTrue(len(seg.events) > 0)
Exemplo n.º 5
0
    def test_gap_handling_v563(self):
        dirname = self.get_filename_path('Cheetah_v5.6.3/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)
        block = nio.read_block()

        # known gap values
        n_gaps = 1
        # so 2 segments, 2 anasigs by Channelindex, 2 SpikeTrain by Units
        self.assertEqual(len(block.segments), n_gaps + 1)
        self.assertEqual(len(block.channel_indexes[0].analogsignals), n_gaps + 1)
        self.assertEqual(len(block.channel_indexes[-1].units[0].spiketrains), n_gaps + 1)
Exemplo n.º 6
0
    def test_ncs(self):
        for session in self.files_to_test[1:2]:  # in the long run this should include all files
            dirname = self.get_filename_path(session)
            nio = NeuralynxIO(dirname=dirname, use_cache=False)
            block = nio.read_block()

            for anasig_id, anasig in enumerate(block.segments[0].analogsignals):
                chid = anasig.channel_index.annotations['channel_id'][anasig_id]
                filename = nio.ncs_filenames[chid][:-3] + 'txt'
                filename = filename.replace('original_data', 'plain_data')
                plain_data = np.loadtxt(filename)[:, 5:].flatten()  # first columns are meta info
                overlap = 512 * 500
                gain_factor_0 = plain_data[0] / anasig.magnitude[0, 0]
                np.testing.assert_allclose(plain_data[:overlap],
                                           anasig.magnitude[:overlap, 0] * gain_factor_0,
                                           rtol=0.01)
Exemplo n.º 7
0
def compare_old_and_new_neuralynxio():
    
    base = '/tmp/files_for_testing_neo/neuralynx/'
    dirname = base+'Cheetah_v5.5.1/original_data/'
    #~ dirname = base+'Cheetah_v5.7.4/original_data/'
    
    
    t0 = time.perf_counter()
    newreader = NewNeuralynxIO(dirname)
    t1 = time.perf_counter()
    bl1 = newreader.read_block(load_waveforms=True)
    t2 = time.perf_counter()
    print('newreader header', t1-t0, 's')
    print('newreader data', t2-t1, 's')
    print('newreader toal', t2-t0, 's')
    for seg in bl1.segments:
        print('seg', seg.index)
        for anasig in seg.analogsignals:
            print(' AnalogSignal', anasig.name, anasig.shape, anasig.t_start)
        for st in seg.spiketrains:
            print(' SpikeTrain', st.name, st.shape, st.waveforms.shape, st[:5])
        for ev in seg.events:
            print(' Event', ev.name, ev.times.shape)


    print('*'*10)
    
    t0 = time.perf_counter()
    oldreader = OldNeuralynxIO(sessiondir=dirname, use_cache='never')
    t1 = time.perf_counter()
    bl2 = oldreader.read_block(waveforms=True, events=True)
    t2 = time.perf_counter()
    print('oldreader header', t1-t0, 's')
    print('oldreader data', t2-t1, 's')
    print('oldreader toal', t2-t0, 's')
    for seg in bl2.segments:
        print('seg', seg.index)
        for anasig in seg.analogsignals:
            print(' AnalogSignal', anasig.name, anasig.shape, anasig.t_start)
        for st in seg.spiketrains:
            print(' SpikeTrain', st.name, st.shape, st.waveforms.shape, st[:5])
        for ev in seg.events:
            print(' Event', ev.name, ev.times.shape)

    print('*' * 10)
    compare_neo_content(bl1, bl2)
Exemplo n.º 8
0
    def test_read_segment(self):
        dirname = self.get_filename_path('Cheetah_v5.5.1/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        # read first segment entirely
        seg = nio.read_segment(seg_index=0, time_slice=None)
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 2)
        self.assertEqual(seg.analogsignals[0].sampling_rate, 32 * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 2)

        # Testing different parameter combinations
        seg = nio.read_segment(seg_index=0, load_waveforms=True)
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(len(seg.spiketrains), 2)
        self.assertTrue(len(seg.spiketrains[0].waveforms) > 0)
        self.assertTrue(len(seg.events) > 0)
Exemplo n.º 9
0
    def test_read_block(self):
        """Read data in a certain time range into one block"""
        dirname = self.get_filename_path('Cheetah_v5.5.1/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        self.assertEqual(len(block.segments), 2)
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 2)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32. * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 2)

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 2)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[0],
                         block.segments[0].spiketrains[0].shape[0])
        self.assertGreater(len(block.segments[0].events), 0)

        self.assertEqual(len(block.channel_indexes[-1].units[0].spiketrains),
                         2)  # 2 segment

        block = nio.read_block(load_waveforms=True,
                               units_group_mode='all-in-one')
        self.assertEqual(len(block.channel_indexes[-1].units), 2)  # 2 units

        block = nio.read_block(load_waveforms=True,
                               units_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes[-1].units),
                         1)  # 1 units by ChannelIndex
Exemplo n.º 10
0
    def test_read_block(self):
        dirname = self.get_filename_path('Cheetah_v5.7.4/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 5)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32 * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 0)  # no nse files available

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 0)
        self.assertGreater(len(block.segments[0].events), 0)

        block = nio.read_block(signal_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes), 5)

        block = nio.read_block(signal_group_mode='group-by-same-units')
        self.assertEqual(len(block.channel_indexes), 1)
Exemplo n.º 11
0
    def test_keep_original_spike_times(self):
        for session in self.files_to_test:
            dirname = self.get_filename_path(session)
            nio = NeuralynxIO(dirname=dirname, keep_original_times=True)
            block = nio.read_block()

            for st in block.segments[0].spiketrains:
                filename = st.file_origin.replace('original_data', 'plain_data')
                if '.nse' in st.file_origin:
                    filename = filename.replace('.nse', '.txt')
                    times_column = 0
                    plain_data = np.loadtxt(filename)[:, times_column]
                elif '.ntt' in st.file_origin:
                    filename = filename.replace('.ntt', '.txt')
                    times_column = 2
                    plain_data = np.loadtxt(filename)[:, times_column]
                    # ntt files contain 4 rows per spike time
                    plain_data = plain_data[::4]

                times = st.rescale(pq.microsecond).magnitude
                overlap = min(len(plain_data), len(times))
                np.testing.assert_allclose(plain_data[:overlap], times[:overlap], rtol=1e-10)
Exemplo n.º 12
0
    def test_ncs(self):
        for session in self.files_to_test[
                1:2]:  # in the long run this should include all files
            dirname = self.get_filename_path(session)
            nio = NeuralynxIO(dirname=dirname, use_cache=False)
            block = nio.read_block()

            for anasig_id, anasig in enumerate(
                    block.segments[0].analogsignals):
                chid = anasig.channel_index.channel_ids[anasig_id]
                chname = anasig.channel_index.channel_names[anasig_id].decode(
                    'UTF-8')  # need to decode, unless keyerror
                chuid = (chname, chid)
                filename = nio.ncs_filenames[chuid][:-3] + 'txt'
                filename = filename.replace('original_data', 'plain_data')
                plain_data = np.loadtxt(
                    filename)[:, 5:].flatten()  # first columns are meta info
                overlap = 512 * 500
                gain_factor_0 = plain_data[0] / anasig.magnitude[0, 0]
                np.testing.assert_allclose(plain_data[:overlap],
                                           anasig.magnitude[:overlap, 0] *
                                           gain_factor_0,
                                           rtol=0.01)
Exemplo n.º 13
0
    def test_read_block(self):
        """Read data in a certain time range into one block"""
        dirname = self.get_local_path('neuralynx/Cheetah_v5.5.1/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        self.assertEqual(len(block.segments), 2)
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 2)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32. * pq.kHz)
        self.assertEqual(len(seg.spiketrains), 2)

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 2)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[0],
                         block.segments[0].spiketrains[0].shape[0])
        self.assertGreater(len(block.segments[0].events), 0)
Exemplo n.º 14
0
    def test_read_segment(self):

        dirname = self.get_filename_path('Cheetah_v5.7.4/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        seg = nio.read_segment(time_slice=None)

        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(seg.analogsignals[0].shape[-1], 5)

        self.assertEqual(seg.analogsignals[0].sampling_rate, 32 * pq.kHz)

        self.assertEqual(len(seg.spiketrains), 0)

        # Testing different parameter combinations
        seg = nio.read_segment(lazy=True)
        self.assertEqual(len(seg.analogsignals[0]), 0)
        self.assertEqual(len(seg.spiketrains), 0)

        seg = nio.read_segment(load_waveforms=True)
        self.assertEqual(len(seg.analogsignals), 1)
        self.assertEqual(len(seg.spiketrains), 0)
        self.assertTrue(len(seg.events) > 0)
Exemplo n.º 15
0
    def test_read_block(self):
        """Read data in a certain time range into one block"""
        dirname = self.get_filename_path('Cheetah_v5.6.3/original_data')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # There are two segments due to gap in recording
        self.assertEqual(len(block.segments), 2)
        for seg in block.segments:
            self.assertEqual(len(seg.analogsignals), 1)
            self.assertEqual(seg.analogsignals[0].shape[-1], 2)
            self.assertEqual(seg.analogsignals[0].sampling_rate, 2. * pq.kHz)
            self.assertEqual(len(seg.spiketrains), 8)

        # Testing different parameter combinations
        block = nio.read_block(lazy=True)
        self.assertEqual(len(block.segments[0].analogsignals[0]), 0)
        self.assertEqual(len(block.segments[0].spiketrains[0]), 0)

        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].analogsignals), 1)
        self.assertEqual(len(block.segments[0].spiketrains), 8)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[0],
                         block.segments[0].spiketrains[0].shape[0])
        # this is tetrode data, containing 32 samples per waveform
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[1],
                         4)
        self.assertEqual(block.segments[0].spiketrains[0].waveforms.shape[-1],
                         32)
        self.assertGreater(len(block.segments[0].events), 0)

        self.assertEqual(len(block.channel_indexes[-1].units[0].spiketrains),
                         2)

        block = nio.read_block(load_waveforms=True,
                               units_group_mode='all-in-one')
        self.assertEqual(len(block.channel_indexes[-1].units), 8)

        block = nio.read_block(load_waveforms=True,
                               units_group_mode='split-all')
        self.assertEqual(len(block.channel_indexes[-1].units),
                         1)  # 1 units by ChannelIndex
Exemplo n.º 16
0
    def test_read_block(self):
        dirname = self.get_local_path('neuralynx/Pegasus_v2.1.1')
        nio = NeuralynxIO(dirname=dirname, use_cache=False)

        block = nio.read_block()

        # Everything put in one segment
        seg = block.segments[0]
        self.assertEqual(len(seg.analogsignals), 0)  # no ncs file available
        self.assertGreater(len(block.segments[0].events),
                           1)  # single nev file available
        self.assertEqual(len(seg.spiketrains), 0)  # no nse files available

        # Testing different parameter combinations
        block = nio.read_block(load_waveforms=True)
        self.assertEqual(len(block.segments[0].spiketrains), 0)
        self.assertGreater(len(block.segments[0].events), 1)

        block = nio.read_block(signal_group_mode='split-all')

        block = nio.read_block(signal_group_mode='group-by-same-units')
Exemplo n.º 17
0
    def test_exclude_filename(self):
        dname = self.get_local_path('neuralynx/Cheetah_v5.7.4/original_data/')

        # exclude a single file
        nio = NeuralynxIO(dirname=dname,
                          exclude_filename='CSC1.ncs',
                          use_cache=False)
        block = nio.read_block()
        self.assertTrue(len(block.segments[0].analogsignals) > 0)
        self.assertTrue((len(block.segments[0].spiketrains)) >= 0)
        self.assertTrue((len(block.segments[0].events)) >= 0)
        self.assertTrue((len(block.segments[0].epochs)) == 0)

        # exclude all ncs files from session
        exclude_files = [f'CSC{i}.ncs' for i in range(6)]
        nio = NeuralynxIO(dirname=dname,
                          exclude_filename=exclude_files,
                          use_cache=False)
        block = nio.read_block()
        self.assertTrue(len(block.segments[0].analogsignals) == 0)
        self.assertTrue((len(block.segments[0].spiketrains)) >= 0)
        self.assertTrue((len(block.segments[0].events)) >= 0)
        self.assertTrue((len(block.segments[0].epochs)) == 0)
Exemplo n.º 18
0
 def test_header_read(self):
     dirname = '/tmp/ncsTestData/Cheetah_v5.3.1_digital'
     nio = NeuralynxIO(dirname=dirname, use_cache=False)