def test_bandpass_filter_with_cache(): rec, sort = se.example_datasets.toy_example(dump_folder='test', dumpable=True, duration=10, num_channels=4, seed=0) rec_filtered = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_to_file=True, chunk_size=10000) rec_filtered2 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_to_file=True, chunk_size=None) rec_filtered3 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_chunks=True, chunk_size=10000) rec_filtered3.get_traces() assert rec_filtered3._filtered_cache_chunks.get('0') is not None rec_filtered4 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_chunks=True, chunk_size=None) assert np.allclose(rec_filtered.get_traces(), rec_filtered2.get_traces(), rtol=1e-02, atol=1e-02) assert np.allclose(rec_filtered.get_traces(), rec_filtered3.get_traces(), rtol=1e-02, atol=1e-02) assert np.allclose(rec_filtered.get_traces(), rec_filtered4.get_traces(), rtol=1e-02, atol=1e-02) check_dumping(rec_filtered) check_dumping(rec_filtered2) check_dumping(rec_filtered3) check_dumping(rec_filtered4) shutil.rmtree('test')
def test_bandpass_filter(): rec, sort = se.example_datasets.toy_example(duration=10, num_channels=4) rec_fft = bandpass_filter(rec, freq_min=5000, freq_max=10000, type='fft') assert check_signal_power_signal1_below_signal2( rec_fft.get_traces(), rec.get_traces(), freq_range=[1000, 5000], fs=rec.get_sampling_frequency()) assert check_signal_power_signal1_below_signal2( rec_fft.get_traces(), rec.get_traces(), freq_range=[10000, 15000], fs=rec.get_sampling_frequency()) rec_sci = bandpass_filter(rec, freq_min=3000, freq_max=6000, type='butter', order=3) assert check_signal_power_signal1_below_signal2( rec_sci.get_traces(), rec.get_traces(), freq_range=[1000, 3000], fs=rec.get_sampling_frequency()) assert check_signal_power_signal1_below_signal2( rec_sci.get_traces(), rec.get_traces(), freq_range=[6000, 10000], fs=rec.get_sampling_frequency()) rec_cache = bandpass_filter(rec, freq_min=3000, freq_max=6000, type='butter', order=3, cache_to_file=True) assert check_signal_power_signal1_below_signal2( rec_cache.get_traces(), rec.get_traces(), freq_range=[1000, 3000], fs=rec.get_sampling_frequency()) assert check_signal_power_signal1_below_signal2( rec_cache.get_traces(), rec.get_traces(), freq_range=[6000, 10000], fs=rec.get_sampling_frequency())
def test_highpass_filter(): rec, sort = se.example_datasets.toy_example(dump_folder='test', dumpable=True, duration=2, num_channels=4, seed=0) rec_fft = highpass_filter(rec, freq_min=5000, filter_type='fft') assert check_signal_power_signal1_below_signal2( rec_fft.get_traces(), rec.get_traces(), freq_range=[1000, 5000], fs=rec.get_sampling_frequency()) rec_sci = bandpass_filter(rec, freq_min=3000, freq_max=6000, filter_type='butter', order=3) assert check_signal_power_signal1_below_signal2( rec_sci.get_traces(), rec.get_traces(), freq_range=[1000, 3000], fs=rec.get_sampling_frequency()) traces = rec.get_traces().astype('uint16') rec_u = se.NumpyRecordingExtractor( traces, sampling_frequency=rec.get_sampling_frequency()) rec_fu = bandpass_filter(rec_u, freq_min=5000, freq_max=10000, filter_type='fft') assert check_signal_power_signal1_below_signal2( rec_fu.get_traces(), rec_u.get_traces(), freq_range=[1000, 5000], fs=rec.get_sampling_frequency()) assert check_signal_power_signal1_below_signal2( rec_fu.get_traces(), rec_u.get_traces(), freq_range=[10000, 15000], fs=rec.get_sampling_frequency()) assert not str(rec_fu.get_dtype()).startswith('u') check_dumping(rec_fft) shutil.rmtree('test')
def test_bandpass_filter_with_cache(): rec, sort = se.example_datasets.toy_example(duration=10, num_channels=4) rec_filtered = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_to_file=True, chunk_size=10000) rec_filtered2 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_to_file=True, chunk_size=None) rec_filtered3 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_chunks=True, chunk_size=10000) rec_filtered3.get_traces() assert rec_filtered3._filtered_cache_chunks.get('0') is not None rec_filtered4 = bandpass_filter(rec, freq_min=5000, freq_max=10000, cache_chunks=True, chunk_size=None) assert np.allclose(rec_filtered.get_traces(), rec_filtered2.get_traces(), rtol=1e-02, atol=1e-02) assert np.allclose(rec_filtered.get_traces(), rec_filtered3.get_traces(), rtol=1e-02, atol=1e-02) assert np.allclose(rec_filtered.get_traces(), rec_filtered4.get_traces(), rtol=1e-02, atol=1e-02)
def _run(self, recording, output_folder): recording = recover_recording(recording) # Sort # alias to params p = self.params if recording.is_filtered and p['filter']: print( "Warning! The recording is already filtered, but Mountainsort4 filter is enabled. You can disable " "filters by setting 'filter' parameter to False") samplerate = recording.get_sampling_frequency() # Bandpass filter if p['filter'] and p['freq_min'] is not None and p[ 'freq_max'] is not None: recording = bandpass_filter(recording=recording, freq_min=p['freq_min'], freq_max=p['freq_max']) # Whiten if p['whiten']: recording = whiten(recording=recording) # Check location no more needed done in basesorter sorting = ml_ms4alg.mountainsort4( recording=recording, detect_sign=p['detect_sign'], adjacency_radius=p['adjacency_radius'], clip_size=p['clip_size'], detect_threshold=p['detect_threshold'], detect_interval=p['detect_interval'], num_workers=p['num_workers'], verbose=self.verbose) # Curate if p['noise_overlap_threshold'] is not None and p['curation'] is True: if self.verbose: print('Curating') sorting = ml_ms4alg.mountainsort4_curation( recording=recording, sorting=sorting, noise_overlap_threshold=p['noise_overlap_threshold']) se.MdaSortingExtractor.write_sorting( sorting, str(output_folder / 'firings.mda')) samplerate_fname = str(output_folder / 'samplerate.txt') with open(samplerate_fname, 'w') as f: f.write('{}'.format(samplerate))
def _run(self, recording, output_folder): # Sort # alias to params p = self.params samplerate = recording.get_sampling_frequency() # Bandpass filter if p['filter'] and p['freq_min'] is not None and p[ 'freq_max'] is not None: recording = bandpass_filter(recording=recording, freq_min=p['freq_min'], freq_max=p['freq_max']) # Whiten if p['whiten']: recording = whiten(recording=recording) # Check location if 'location' not in recording.get_shared_channel_property_names(): for i, chan in enumerate(recording.get_channel_ids()): recording.set_channel_property(chan, 'location', [0, i]) sorting = ml_ms4alg.mountainsort4( recording=recording, detect_sign=p['detect_sign'], adjacency_radius=p['adjacency_radius'], clip_size=p['clip_size'], detect_threshold=p['detect_threshold'], detect_interval=p['detect_interval'], num_workers=p['num_workers'], verbose=self.verbose) # Curate if p['noise_overlap_threshold'] is not None and p['curation'] is True: if self.verbose: print('Curating') sorting = ml_ms4alg.mountainsort4_curation( recording=recording, sorting=sorting, noise_overlap_threshold=p['noise_overlap_threshold']) se.MdaSortingExtractor.write_sorting( sorting, str(output_folder / 'firings.mda')) samplerate_fname = str(output_folder / 'samplerate.txt') with open(samplerate_fname, 'w') as f: f.write('{}'.format(samplerate))
def _run(self, recording, output_folder): # Sort # alias to params p = self.params print(p) ind = self.recording_list.index(recording) # Bandpass filter if p['filter'] and p['freq_min'] is not None and p[ 'freq_max'] is not None: recording = bandpass_filter(recording=recording, freq_min=p['freq_min'], freq_max=p['freq_max']) # Whiten if p['whiten']: recording = whiten(recording=recording) # Check location if 'location' not in recording.get_channel_property_names(): for i, chan in enumerate(recording.get_channel_ids()): recording.set_channel_property(chan, 'location', [0, i]) sorting = ml_ms4alg.mountainsort4( recording=recording, detect_sign=p['detect_sign'], adjacency_radius=p['adjacency_radius'], clip_size=p['clip_size'], detect_threshold=p['detect_threshold'], detect_interval=p['detect_interval']) # Curate if p['noise_overlap_threshold'] is not None and p['curation'] is True: print('Curating') sorting = ml_ms4alg.mountainsort4_curation( recording=recording, sorting=sorting, noise_overlap_threshold=p['noise_overlap_threshold']) se.MdaSortingExtractor.write_sorting( sorting, str(output_folder / 'firings.mda'))