def javascript_state_changed(self, prev_state, state): if not self._recording: recordingPath = state.get('recordingPath', None) if not recordingPath: return self.set_python_state(dict(status_message='Loading recording')) mt.configDownloadFrom(state.get('download_from')) X = SFMdaRecordingExtractor(dataset_directory=recordingPath, download=True) self.set_python_state( dict(numChannels=X.get_num_channels(), numTimepoints=X.get_num_frames(), samplerate=X.get_sampling_frequency(), status_message='Loaded recording.')) self._recording = X else: X = self._recording SR = state.get('segmentsRequested', {}) for key in SR.keys(): aa = SR[key] if not self.get_python_state(key, None): self.set_python_state( dict(status_message='Loading segment {}'.format(key))) data0 = self._load_data(aa['ds'], aa['ss']) data0_base64 = _mda32_to_base64(data0) state0 = {} state0[key] = dict(data=data0_base64, ds=aa['ds'], ss=aa['ss']) self.set_python_state(state0) self.set_python_state( dict(status_message='Loaded segment {}'.format(key)))
def createSession(self): recording = SFMdaRecordingExtractor( dataset_directory=self._recording_directory, download=False) recording = se.SubRecordingExtractor( parent_recording=recording, start_frame=0, end_frame=10000) recording = se.NumpyRecordingExtractor( timeseries=recording.get_traces(), samplerate=recording.get_sampling_frequency()) W = SFW.TimeseriesWidget(recording=recording) _make_full_browser(W) return W
def run(self): import tridesclous as tdc tmpdir = Path(_get_tmpdir('tdc')) recording = SFMdaRecordingExtractor(self.recording_dir) params = { 'fullchain_kargs': { 'duration': 300., 'preprocessor': { 'highpass_freq': self.freq_min, 'lowpass_freq': self.freq_max, 'smooth_size': 0, 'chunksize': 1024, 'lostfront_chunksize': 128, 'signalpreprocessor_engine': 'numpy', 'common_ref_removal': self.common_ref_removal, }, 'peak_detector': { 'peakdetector_engine': 'numpy', 'peak_sign': '-', 'relative_threshold': self.detection_threshold, 'peak_span': self.peak_span, }, 'noise_snippet': { 'nb_snippet': 300, }, 'extract_waveforms': { 'n_left': self.waveforms_n_left, 'n_right': self.waveforms_n_right, 'mode': 'rand', 'nb_max': 20000, 'align_waveform': self.align_waveform, }, 'clean_waveforms': { 'alien_value_threshold': self.alien_value_threshold, }, }, 'feat_method': 'peak_max', 'feat_kargs': {}, 'clust_method': 'sawchaincut', 'clust_kargs': { 'kde_bandwith': 1. }, } # save prb file: probe_file = tmpdir / 'probe.prb' se.save_probe_file(recording, probe_file, format='spyking_circus') # source file if isinstance(recording, se.BinDatRecordingExtractor) and recording._frame_first: # no need to copy raw_filename = recording._datfile dtype = recording._timeseries.dtype.str nb_chan = len(recording._channels) offset = recording._timeseries.offset else: # save binary file (chunk by hcunk) into a new file raw_filename = tmpdir / 'raw_signals.raw' n_chan = recording.get_num_channels() chunksize = 2**24 // n_chan se.write_binary_dat_format(recording, raw_filename, time_axis=0, dtype='float32', chunksize=chunksize) dtype = 'float32' offset = 0 # initialize source and probe file tdc_dataio = tdc.DataIO(dirname=str(tmpdir)) nb_chan = recording.get_num_channels() tdc_dataio.set_data_source( type='RawData', filenames=[str(raw_filename)], dtype=dtype, sample_rate=recording.get_sampling_frequency(), total_channel=nb_chan, offset=offset) tdc_dataio.set_probe_file(str(probe_file)) try: sorting = tdc_helper(tmpdir=tmpdir, params=params, recording=recording) SFMdaSortingExtractor.write_sorting(sorting=sorting, save_path=self.firings_out) except: if os.path.exists(tmpdir): if not getattr(self, '_keep_temp_files', False): shutil.rmtree(tmpdir) raise if not getattr(self, '_keep_temp_files', False): shutil.rmtree(tmpdir)