def test_max_chan(): n_wf_samples = 100 folder = 'test' if os.path.isdir(folder): shutil.rmtree(folder) rec, sort, waveforms, templates, max_chans, amps = create_signal_with_known_waveforms( n_waveforms=2, n_channels=4, n_wf_samples=n_wf_samples) rec, sort = create_dumpable_extractors_from_existing(folder, rec, sort) max_channels = get_unit_max_channels(rec, sort, save_property_or_features=False) assert np.allclose(np.array(max_chans), np.array(max_channels)) assert 'max_channel' not in sort.get_shared_unit_property_names() max_channels = get_unit_max_channels(rec, sort, save_property_or_features=True, recompute_templates=True, peak='neg', recompute_info=True) assert np.allclose(np.array(max_chans), np.array(max_channels)) assert 'max_channel' in sort.get_shared_unit_property_names() # multiple channels max_channels = get_unit_max_channels(rec, sort, max_channels=2, peak='neg', recompute_info=True) assert np.allclose(np.array(max_chans), np.array(max_channels)[:, 0]) assert np.array(max_channels).shape[1] == 2 shutil.rmtree('test')
def test_amplitudes(): n_jobs = [0, 2] memmap = [True, False] for n in n_jobs: for m in memmap: print('N jobs', n, 'memmap', m) n_wf_samples = 100 folder = 'test' if os.path.isdir(folder): shutil.rmtree(folder) rec, sort, waveforms, templates, max_chans, amps = create_signal_with_known_waveforms( n_waveforms=2, n_channels=4, n_wf_samples=n_wf_samples) rec, sort = create_dumpable_extractors_from_existing( folder, rec, sort) amp = get_unit_amplitudes(rec, sort, frames_before=50, frames_after=50, save_property_or_features=False, n_jobs=n, memmap=m) for (a, a_gt) in zip(amp, amps): assert np.allclose(a, np.abs(a_gt)) assert 'amplitudes' not in sort.get_shared_unit_spike_feature_names( ) amp = get_unit_amplitudes(rec, sort, frames_before=50, frames_after=50, save_property_or_features=True, peak='neg', n_jobs=n, memmap=m) for (a, a_gt) in zip(amp, amps): assert np.allclose(a, a_gt) assert 'amplitudes' in sort.get_shared_unit_spike_feature_names() # relative amp = get_unit_amplitudes(rec, sort, frames_before=50, frames_after=50, save_property_or_features=False, recompute_info=True, method='relative', n_jobs=n, memmap=m) amps_rel = [a / np.median(a) for a in amps] for (a, a_gt) in zip(amp, amps_rel): assert np.allclose(a, np.abs(a_gt), 0.02) shutil.rmtree('test')
def test_templates(): n_wf_samples = 100 folder = 'test' if os.path.isdir(folder): shutil.rmtree(folder) rec, sort, waveforms, templates, max_chans, amps = create_signal_with_known_waveforms( n_waveforms=2, n_channels=4, n_wf_samples=n_wf_samples) rec, sort = create_dumpable_extractors_from_existing(folder, rec, sort) # get num samples in ms ms_cut = n_wf_samples // 2 / rec.get_sampling_frequency() * 1000 # no group temp = get_unit_templates(rec, sort, ms_before=ms_cut, ms_after=ms_cut, save_property_or_features=False, save_wf_as_features=False, recompute_info=True) for (t, t_gt) in zip(temp, templates): assert np.allclose(t, t_gt, atol=1) assert 'template' not in sort.get_shared_unit_property_names() assert 'waveforms' not in sort.get_shared_unit_spike_feature_names() # change cut ms temp = get_unit_templates(rec, sort, ms_before=2, ms_after=2, save_property_or_features=True, recompute_waveforms=True, recompute_info=True) for (t, t_gt) in zip(temp, templates): _, samples = t.shape assert np.allclose(t[:, samples // 2 - n_wf_samples // 2:samples // 2 + n_wf_samples // 2], t_gt, atol=1) assert 'template' in sort.get_shared_unit_property_names() assert 'waveforms' in sort.get_shared_unit_spike_feature_names() # by group rec.set_channel_groups([0, 0, 1, 1]) temp = get_unit_templates(rec, sort, ms_before=ms_cut, ms_after=ms_cut, grouping_property='group', recompute_info=True) for (t, t_gt) in zip(temp, templates): assert np.allclose(t, t_gt[:2], atol=1) or np.allclose( t, t_gt[2:], atol=1) shutil.rmtree('test')
def test_waveforms(): n_wf_samples = 100 n_jobs = [0, 2] for n in n_jobs: for m in memmaps: print('N jobs', n, 'memmap', m) folder = 'test' if os.path.isdir(folder): shutil.rmtree(folder) rec, sort, waveforms, templates, max_chans, amps = create_signal_with_known_waveforms( n_waveforms=2, n_channels=4, n_wf_samples=n_wf_samples) rec, sort = create_dumpable_extractors_from_existing( folder, rec, sort) # get num samples in ms ms_cut = n_wf_samples // 2 / rec.get_sampling_frequency() * 1000 # no group wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, save_property_or_features=False, n_jobs=n, memmap=m, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): assert np.allclose(w, w_gt) assert 'waveforms' not in sort.get_shared_unit_spike_feature_names( ) # small chunks wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, save_property_or_features=False, n_jobs=n, memmap=m, chunk_mb=5, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): assert np.allclose(w, w_gt) assert 'waveforms' not in sort.get_shared_unit_spike_feature_names( ) # change cut ms wav = get_unit_waveforms(rec, sort, ms_before=2, ms_after=2, save_property_or_features=True, n_jobs=n, memmap=m, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): _, _, samples = w.shape assert np.allclose( w[:, :, samples // 2 - n_wf_samples // 2:samples // 2 + n_wf_samples // 2], w_gt) assert 'waveforms' in sort.get_shared_unit_spike_feature_names() # by group rec.set_channel_groups([0, 0, 1, 1]) wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, grouping_property='group', n_jobs=n, memmap=m, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): assert np.allclose(w, w_gt[:, :2]) or np.allclose( w, w_gt[:, 2:]) # test compute_property_from_recordings wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, grouping_property='group', compute_property_from_recording=True, n_jobs=n, memmap=m, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): assert np.allclose(w, w_gt[:, :2]) or np.allclose( w, w_gt[:, 2:]) # test max_spikes_per_unit wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, max_spikes_per_unit=10, save_property_or_features=False, n_jobs=n, memmap=m, recompute_info=True) for w in wav: assert len(w) <= 10 # test channels wav = get_unit_waveforms(rec, sort, ms_before=ms_cut, ms_after=ms_cut, channel_ids=[0, 1, 2], n_jobs=n, memmap=m, recompute_info=True) for (w, w_gt) in zip(wav, waveforms): assert np.allclose(w, w_gt[:, :3]) shutil.rmtree('test')