Esempio n. 1
0
    def test_ttl_frames_in_sub_multi(self):
        # sub recording
        start_frame = self.example_info['num_frames'] // 3
        end_frame = 2 * self.example_info['num_frames'] // 3
        RX_sub = se.SubRecordingExtractor(self.RX,
                                          start_frame=start_frame,
                                          end_frame=end_frame)
        original_ttls = self.RX.get_ttl_events()[0]
        ttls_in_sub = original_ttls[np.where((original_ttls >= start_frame)
                                             & (original_ttls < end_frame))[0]]
        self.assertTrue(
            np.array_equal(RX_sub.get_ttl_events()[0],
                           ttls_in_sub - start_frame))

        # multirecording
        RX_multi = se.MultiRecordingTimeExtractor(
            recordings=[self.RX, self.RX, self.RX])
        ttls_originals = self.RX.get_ttl_events()[0]
        num_ttls = len(ttls_originals)
        self.assertEqual(len(RX_multi.get_ttl_events()[0]), 3 * num_ttls)
        self.assertTrue(
            np.array_equal(RX_multi.get_ttl_events()[0][:num_ttls],
                           ttls_originals))
        self.assertTrue(
            np.array_equal(RX_multi.get_ttl_events()[0][num_ttls:2 * num_ttls],
                           ttls_originals + self.RX.get_num_frames()))
        self.assertTrue(
            np.array_equal(RX_multi.get_ttl_events()[0][2 * num_ttls:],
                           ttls_originals + 2 * self.RX.get_num_frames()))
Esempio n. 2
0
    def test_multi_sub_recording_extractor(self):
        RX_multi = se.MultiRecordingTimeExtractor(
            recordings=[self.RX, self.RX, self.RX],
            epoch_names=['A', 'B', 'C'])
        RX_sub = RX_multi.get_epoch('C')
        self._check_recordings_equal(self.RX, RX_sub)
        self.assertEqual(4, len(RX_sub.get_channel_ids()))

        RX_multi = se.MultiRecordingChannelExtractor(
            recordings=[self.RX, self.RX2, self.RX3], groups=[1, 2, 3])
        print(RX_multi.get_channel_groups())
        RX_sub = se.SubRecordingExtractor(RX_multi,
                                          channel_ids=[4, 5, 6, 7],
                                          renamed_channel_ids=[0, 1, 2, 3])
        self._check_recordings_equal(self.RX2, RX_sub)
        self.assertEqual([2, 2, 2, 2], RX_sub.get_channel_groups())
        self.assertEqual(12, len(RX_multi.get_channel_ids()))
    def test_dump_load_multi_sub_extractor(self):
        # generate dumpable formats
        path1 = self.test_dir + '/mda'
        path2 = path1 + '/firings_true.mda'
        se.MdaRecordingExtractor.write_recording(self.RX, path1)
        se.MdaSortingExtractor.write_sorting(self.SX, path2)
        RX_mda = se.MdaRecordingExtractor(path1)
        SX_mda = se.MdaSortingExtractor(path2)

        RX_multi_chan = se.MultiRecordingChannelExtractor(recordings=[RX_mda, RX_mda, RX_mda])
        check_dumping(RX_multi_chan)
        RX_multi_time = se.MultiRecordingTimeExtractor(recordings=[RX_mda, RX_mda, RX_mda], )
        check_dumping(RX_multi_time)
        RX_multi_chan = se.SubRecordingExtractor(RX_mda, channel_ids=[0, 1])
        check_dumping(RX_multi_chan)

        SX_sub = se.SubSortingExtractor(SX_mda, unit_ids=[1, 2])
        check_dumping(SX_sub)
        SX_multi = se.MultiSortingExtractor(sortings=[SX_mda, SX_mda, SX_mda])
        check_dumping(SX_multi)
    def test_multi_sub_recording_extractor(self):
        RX_multi = se.MultiRecordingTimeExtractor(
            recordings=[self.RX, self.RX, self.RX],
            epoch_names=['A', 'B', 'C']
        )
        RX_sub = RX_multi.get_epoch('C')
        check_recordings_equal(self.RX, RX_sub)
        check_recordings_equal(self.RX, RX_multi.recordings[0])
        check_recordings_equal(self.RX, RX_multi.recordings[1])
        check_recordings_equal(self.RX, RX_multi.recordings[2])
        self.assertEqual(4, len(RX_sub.get_channel_ids()))

        RX_multi = se.MultiRecordingChannelExtractor(
            recordings=[self.RX, self.RX2, self.RX3],
            groups=[1, 2, 3]
        )
        RX_sub = se.SubRecordingExtractor(RX_multi, channel_ids=[4, 5, 6, 7], renamed_channel_ids=[0, 1, 2, 3])
        check_recordings_equal(self.RX2, RX_sub)
        check_recordings_equal(self.RX, RX_multi.recordings[0])
        check_recordings_equal(self.RX2, RX_multi.recordings[1])
        check_recordings_equal(self.RX3, RX_multi.recordings[2])
        self.assertEqual([2, 2, 2, 2], list(RX_sub.get_channel_groups()))
        self.assertEqual(12, len(RX_multi.get_channel_ids()))

        rx1 = self.RX
        rx2 = self.RX2
        rx3 = self.RX3
        rx2.set_channel_property(0, "foo", 100)
        rx3.set_channel_locations([11, 11], channel_ids=0)
        RX_multi_c = se.MultiRecordingChannelExtractor(
            recordings=[rx1, rx2, rx3],
            groups=[0, 0, 1]
        )
        self.assertTrue(np.array_equal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], RX_multi_c.get_channel_ids()))
        self.assertTrue(np.array_equal([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], RX_multi_c.get_channel_groups()))
        self.assertEqual(rx2.get_channel_property(0, "foo"), RX_multi_c.get_channel_property(4, "foo"))
        self.assertTrue(np.array_equal(rx3.get_channel_locations([0])[0], RX_multi_c.get_channel_locations([8])[0]))
Esempio n. 5
0
    def test_neuroscope_extractors(self):
        # NeuroscopeRecordingExtractor tests
        nscope_dir = Path(self.test_dir) / 'neuroscope_rec0'
        dat_file = nscope_dir / 'neuroscope_rec0.dat'
        se.NeuroscopeRecordingExtractor.write_recording(self.RX, nscope_dir)
        RX_ns = se.NeuroscopeRecordingExtractor(dat_file)

        check_recording_return_types(RX_ns)
        check_recordings_equal(self.RX, RX_ns, force_dtype='int32')
        check_dumping(RX_ns)

        check_recording_return_types(RX_ns)
        check_recordings_equal(self.RX, RX_ns, force_dtype='int32')
        check_dumping(RX_ns)

        del RX_ns
        # overwrite
        nscope_dir = Path(self.test_dir) / 'neuroscope_rec1'
        dat_file = nscope_dir / 'neuroscope_rec1.dat'
        se.NeuroscopeRecordingExtractor.write_recording(recording=self.RX,
                                                        save_path=nscope_dir)
        RX_ns = se.NeuroscopeRecordingExtractor(dat_file)
        check_recording_return_types(RX_ns)
        check_recordings_equal(self.RX, RX_ns)
        check_dumping(RX_ns)

        # NeuroscopeMultiRecordingTimeExtractor tests
        nscope_dir = Path(self.test_dir) / "neuroscope_rec2"
        dat_file = nscope_dir / "neuroscope_rec2.dat"
        RX_multirecording = se.MultiRecordingTimeExtractor(
            recordings=[self.RX, self.RX])
        se.NeuroscopeMultiRecordingTimeExtractor.write_recording(
            recording=RX_multirecording, save_path=nscope_dir)
        RX_mre = se.NeuroscopeMultiRecordingTimeExtractor(
            folder_path=nscope_dir)
        check_recording_return_types(RX_mre)
        check_recordings_equal(RX_multirecording, RX_mre)
        check_dumping(RX_mre)

        # NeuroscopeSortingExtractor tests
        nscope_dir = Path(self.test_dir) / 'neuroscope_sort0'
        sort_name = 'neuroscope_sort0'
        initial_sorting_resfile = Path(
            self.test_dir) / sort_name / f'{sort_name}.res'
        initial_sorting_clufile = Path(
            self.test_dir) / sort_name / f'{sort_name}.clu'
        se.NeuroscopeSortingExtractor.write_sorting(self.SX, nscope_dir)
        SX_neuroscope = se.NeuroscopeSortingExtractor(
            resfile_path=initial_sorting_resfile,
            clufile_path=initial_sorting_clufile)
        check_sorting_return_types(SX_neuroscope)
        check_sortings_equal(self.SX, SX_neuroscope)
        check_dumping(SX_neuroscope)
        SX_neuroscope_no_mua = se.NeuroscopeSortingExtractor(
            resfile_path=initial_sorting_resfile,
            clufile_path=initial_sorting_clufile,
            keep_mua_units=False)
        check_sorting_return_types(SX_neuroscope_no_mua)
        check_dumping(SX_neuroscope_no_mua)

        # Test for extra argument 'keep_mua_units' resulted in the right output
        SX_neuroscope_no_mua = se.NeuroscopeSortingExtractor(
            resfile_path=initial_sorting_resfile,
            clufile_path=initial_sorting_clufile,
            keep_mua_units=False)
        check_sorting_return_types(SX_neuroscope_no_mua)
        check_dumping(SX_neuroscope_no_mua)

        num_original_units = len(SX_neuroscope.get_unit_ids())
        self.assertEqual(list(SX_neuroscope.get_unit_ids()),
                         list(range(1, num_original_units + 1)))
        self.assertEqual(list(SX_neuroscope_no_mua.get_unit_ids()),
                         list(range(1, num_original_units)))

        # Tests for the auto-detection of format for NeuroscopeSortingExtractor
        SX_neuroscope_from_fp = se.NeuroscopeSortingExtractor(
            folder_path=nscope_dir)
        check_sorting_return_types(SX_neuroscope_from_fp)
        check_sortings_equal(self.SX, SX_neuroscope_from_fp)
        check_dumping(SX_neuroscope_from_fp)

        # Tests for the NeuroscopeMultiSortingExtractor
        nscope_dir = Path(self.test_dir) / 'neuroscope_sort1'
        SX_multisorting = se.MultiSortingExtractor(sortings=[self.SX, self.SX])
        se.NeuroscopeMultiSortingExtractor.write_sorting(
            SX_multisorting, nscope_dir)
        SX_neuroscope_mse = se.NeuroscopeMultiSortingExtractor(nscope_dir)
        check_sorting_return_types(SX_neuroscope_mse)
        check_sortings_equal(SX_multisorting, SX_neuroscope_mse)
        check_dumping(SX_neuroscope_mse)