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()))
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]))
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)