def on_mouse_move(self, event): x, y = event.pos sec_per_pixel = self.dt / self.canvas.size[0] if event.is_dragging: if event.button == 1 and 'shift' not in event.modifiers: x1, y1 = event.last_event.pos dx = x1 - x self.t0 += dx * sec_per_pixel elif event.button == 1 and 'shift' in event.modifiers: self.measuring = True self.update_extra_text(sec_per_pixel * np.abs(x - self.measure_start[0])) self.measure_line.set_data( np.array((self.measure_start, event.pos))) row_height = ((self.canvas.height - self.margin['top']) / self.row_count) row = util.clip(int((event.pos[1] - self.margin['top']) / row_height), 0, 119) try: if self.display_selected: self.electrode = self.selected_electrodes[row] else: self.electrode = self.spike_data.keys()[row] except IndexError: self.electrode = '' self.mouse_t = self.t0 + sec_per_pixel * x
def resample(self, bin_count=120): start_i = int(self.t0 * self.sample_rate) end_i = util.clip(start_i + int(self.dt * self.sample_rate), start_i, sys.maxsize) bin_size = (end_i - start_i) // bin_count if bin_size < 1: bin_size = 1 bin_count = len(np.arange(start_i, end_i, bin_size)) data = np.empty((self.data.shape[1], 2*bin_count, 4), dtype=np.float32) for i, column in enumerate(self.data): v = mea.min_max_bin(self.data[column].values[start_i:end_i], bin_size, bin_count+1) col, row = mea.coordinates_for_electrode(column) row = 12 - row - 1 x = np.full_like(v, col, dtype=np.float32) y = np.full_like(v, row, dtype=np.float32) t = np.arange(0, bin_count, 0.5, dtype=np.float32) data[i] = np.column_stack((x, y, t, v)) # Update shader self.program['a_position'] = data.reshape( 2*self.data.shape[1]*bin_count, 4) self.program['u_width'] = bin_count
def on_mouse_move(self, event): x, y = event.pos sec_per_pixel = self.dt / self.canvas.size[0] if event.is_dragging: if event.button == 1 and 'shift' not in event.modifiers: x1, y1 = event.last_event.pos dx = x1 - x self.t0 += dx * sec_per_pixel elif event.button == 1 and 'shift' in event.modifiers: self.measuring = True self.update_extra_text(sec_per_pixel * np.abs(x - self.measure_start[0])) self.measure_line.set_data(np.array((self.measure_start, event.pos))) row_height = ((self.canvas.height - self.margin['top']) / self.row_count) row = util.clip(int((event.pos[1] - self.margin['top']) / row_height), 0, 119) try: if self.display_selected: self.electrode = self.selected_electrodes[row] else: self.electrode = self.spike_data.keys()[row] except IndexError: self.electrode = '' self.mouse_t = self.t0 + sec_per_pixel * x
def resample(self, bin_count=150): start_i = int(self.t0 * self.sample_rate) end_i = util.clip(start_i + int(self.dt * self.sample_rate), start_i, sys.maxsize) bin_size = (end_i - start_i) // bin_count if bin_size < 1: bin_size = 1 bin_count = len(np.arange(start_i, end_i, bin_size)) data = np.empty((self.data.shape[1], 2 * bin_count, 4), dtype=np.float32) for i, column in enumerate(self.data): v = mea.min_max_bin(self.data[column].values[start_i:end_i], bin_size, bin_count + 1) col, row = self.canvas.layout.coordinates_for_electrode(column) row = self.canvas.layout.rows - row - 1 x = np.full_like(v, col, dtype=np.float32) y = np.full_like(v, row, dtype=np.float32) t = np.arange(0, bin_count, 0.5, dtype=np.float32) data[i] = np.column_stack((x, y, t, v)) # Update shader self.program['a_position'] = data.reshape( 2 * self.data.shape[1] * bin_count, 4) self.program['u_width'] = bin_count
def update(self, t, dt): try: len(self.events == 0) except: return self.value += 0.2 * len( self.events[(self.events > t) & (self.events < t + dt)]) self.value -= 0.01 self.value = util.clip(self.value, 0.0, 1.0)
def update(self, t, dt): try: len(self.events == 0) except: return self.value += 0.2*len(self.events[(self.events > t) & (self.events < t + dt)]) self.value -= 0.01 self.value = util.clip(self.value, 0.0, 1.0)
def on_mouse_wheel(self, event): if 'shift' in event.modifiers: # Time window scaling. scale = math.exp(2.5 * -np.sign(event.delta[1]) * self.scroll_factor) self.scale = (util.clip(scale * self.scale[0], 0.33 * 5, 3 * self.time_window), self.scale[1]) else: # Amplitude scaling scale = math.exp(2.5 * -np.sign(event.delta[1]) * self.scroll_factor) self.scale = (self.scale[0], scale * self.scale[1])
def on_mouse_wheel(self, event): if 'shift' in event.modifiers: # Time window scaling. scale = math.exp( 2.5 * -np.sign(event.delta[1]) * self.scroll_factor) self.scale = (util.clip(scale * self.scale[0], 0.33 * 5, 3*self.time_window), self.scale[1]) else: # Amplitude scaling scale = math.exp( 2.5 * -np.sign(event.delta[1]) * self.scroll_factor) self.scale = (self.scale[0], scale * self.scale[1])
def dt(self, val): self._dt = util.clip(val, 0.0025, self.analog_data.index[-1]) frac = util.nearest_decimal(self.dt / 6) multiplier = int(self.dt / 6 / frac) width = frac * multiplier * self.canvas.width / self.dt max_width = self.canvas.width / 6 center_x = self.canvas.width - max_width / 2 - 20 self.scale_bar.set_data( np.array(((center_x - width / 2, 20), (center_x + width / 2, 20)))) self.scale_label.pos = (center_x, 40) scale_val = multiplier * frac if scale_val < 0.1: self.scale_label.text = '%1.1f ms' % (1000 * multiplier * frac) else: self.scale_label.text = '%1.1f s' % (multiplier * frac)
def dt(self, val): self._dt = util.clip(val, 0.0025, self.analog_data.index[-1]) frac = util.nearest_decimal(self.dt / 6) multiplier = int(self.dt / 6 / frac) width = frac * multiplier * self.canvas.width / self.dt max_width = self.canvas.width / 6 center_x = self.canvas.width - max_width / 2 - 20 self.scale_bar.set_data(np.array( ((center_x - width / 2, 20), (center_x + width / 2, 20)))) self.scale_label.pos = (center_x, 40) scale_val = multiplier * frac if scale_val < 0.1: self.scale_label.text = '%1.1f ms' % (1000 * multiplier * frac) else: self.scale_label.text = '%1.1f s' % (multiplier * frac)
def on_mouse_move(self, event): x, y = event.pos sec_per_pixel = self.dt / self.canvas.size[0] if event.is_dragging: x1, y1 = event.last_event.pos dx = x1 - x self.t0 += dx * sec_per_pixel row_height = ((self.canvas.height - self.margin['top']) / self._row_count) row = util.clip(int((event.pos[1] - self.margin['top']) / row_height), 0, 119) try: if self.display_selected: self.electrode = self.selected_electrodes[row] else: self.electrode = self.spike_data.keys()[row] except IndexError: self.electrode = '' self.mouse_t = self.t0 + sec_per_pixel * x
def on_mouse_move(self, event): x, y = event.pos sec_per_pixel = self.dt / self.canvas.size[0] if event.is_dragging: x1, y1 = event.last_event.pos dx = x1 - x self.t0 += dx * sec_per_pixel row_height = ((self.canvas.height - self.margin['top']) / self._row_count) row = util.clip(int((event.pos[1] - self.margin['top']) / row_height), 0, 119) try: if self.display_selected: self.electrode = self.selected_electrodes[row] else: self.electrode = self.spike_data.keys()[row] except IndexError: self.electrode = '' self.mouse_t = self.t0 + sec_per_pixel * x
def t0(self, val): self._t0 = util.clip(val, 0 - self.dt / 2, self.spike_data.max_time() - self.dt / 2)
def t0(self, val): self._t0 = util.clip(val, -self.spikes.time.max(), self.spikes.time.max()) self.mouse_t = self._t0
def t0(self, val): self._t0 = util.clip(val, 0, self.data.index[-1] - self.dt/2) self.update()
def dt(self, val): self._dt = util.clip(val, 0.0025, self.spikes.time.max())
def t0(self, val): self._t0 = util.clip(val, -self.spikes.time.max(), self.spikes.time.max()) self.mouse_t = self._t0
def dt(self, val): self._dt = util.clip(val, 0.0025, 10) self.mouse_t = self._t0 self.update()
def dt(self, val): self._dt = util.clip(val, 0.0025, self.spikes.time.max())
def dt(self, val): self._dt = util.clip(val, 0.0025, 10) self.mouse_t = self._t0 self.update()
def dt(self, val): self._dt = util.clip(val, 0.0025, self.analog_data.index[-1]) self.update()
def t0(self, val): self._t0 = util.clip(val, 0 - self.dt/2, self.analog_data.index[-1] - self.dt/2)
def dt(self, val): self._dt = util.clip(val, 0.0025, self.analog_data.index[-1]) self.update()
def dt(self, val): self._dt = util.clip(val, 0.0025, self.spike_data.max_time())
def t0(self, val): self._t0 = util.clip(val, 0, self.data.index[-1] - self.dt / 2)
def dt(self, val): self._dt = util.clip(val, 0.0025, self.spike_data.max_time())
def t0(self, val): self._t0 = util.clip(val, 0 - self.dt/2, self.spike_data.max_time() - self.dt/2)
def dt(self, val): self._dt = util.clip(val, 0.0025, 30) self.mouse_t = self._t0
def dt(self, val): self._dt = util.clip(val, 0.0025, 30) self.mouse_t = self._t0