def open_done(self): self.is_file_open = True # HACK: force release of Control key. self.force_key_release() channels = self.get_view('ChannelView').selected_channels() if channels: self.get_view('ChannelView').unselect() # Create the Controller. self.controller = Controller(self.loader) # Create the cache for the channel statistics that need to be # computed in the background. # self.statscache = StatsCache(self.loader.ncorrbins) # Update stats cache in IPython view. ipython = self.get_view('IPythonView') # if ipython: # ipython.set_data(stats=self.statscache) # Initialize the wizard. self.wizard = Wizard() # Update the views. self.update_channel_view() self.update_trace_view()
def open_done(self): self.is_file_open = True self.setWindowTitle('KlustaViewa: {0:s}'.format( os.path.basename(self.loader.filename) )) register(FileLogger(self.loader.log_filename, name='kwik', level=logging.INFO)) # Start the selection buffer. self.buffer = Buffer(self, # delay_timer=.1, delay_buffer=.2 delay_timer=USERPREF['delay_timer'], delay_buffer=USERPREF['delay_buffer'] ) self.buffer.start() self.buffer.accepted.connect(self.buffer_accepted_callback) # HACK: force release of Control key. self.force_key_release() clusters = self.get_view('ClusterView').selected_clusters() if clusters: self.get_view('ClusterView').unselect() # Create the Controller. self.controller = Controller(self.loader) # Create the cache for the cluster statistics that need to be # computed in the background. self.statscache = StatsCache(SETTINGS.get('correlograms.ncorrbins', NCORRBINS_DEFAULT)) # Update stats cache in IPython view. ipython = self.get_view('IPythonView') if ipython: ipython.set_data(stats=self.statscache) # Initialize the wizard. self.wizard = Wizard() # Update the task graph. self.taskgraph.set(self) # self.taskgraph.update_projection_view() self.taskgraph.update_cluster_view() self.taskgraph.compute_similarity_matrix()
def test_wizard_merge(): # Create mock data. clusters = create_clusters(nspikes, nclusters) cluster_groups = create_cluster_groups(nclusters) similarity_matrix = create_similarity_matrix(nclusters) quality = np.diag(similarity_matrix) # Get the best clusters. clusters_unique = np.unique(clusters) target = clusters_unique[np.argmax(quality)] # Initialize the wizard. w = Wizard() w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates() cluster = w.current_candidate() # Simulate a merge: target and cluster ==> cluster_new. cluster_new = clusters_unique.max() + 1 clusters[clusters == target] = cluster_new clusters[clusters == cluster] = cluster_new log.debug("Merged {0:d} and {1:d} to {2:d}".format(target, cluster, cluster_new)) similarity_matrix = create_similarity_matrix(nclusters - 1) indices = [ x for x in xrange(cluster_offset, cluster_offset + nclusters + 1) if x != cluster and x != target ] cluster_groups = pd.Series(np.array(np.ones(nclusters - 1) * 3, dtype=np.int32), index=np.array(indices)) # Update the wizard. quality = np.diag(similarity_matrix) w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates(cluster_new) assert w.current_target() == cluster_new c = w.current_candidate() assert c is not None assert w.previous_candidate() == w.current_candidate() assert w.next_candidate() == c for _ in xrange(nclusters): c = w.next_candidate() assert c not in (target, cluster)
def test_wizard(): # Create mock data. clusters = create_clusters(nspikes, nclusters) cluster_groups = create_cluster_groups(nclusters) similarity_matrix = create_similarity_matrix(nclusters) quality = np.diag(similarity_matrix) # Get the best clusters. clusters_unique = np.unique(clusters) best_cluster = clusters_unique[np.argmax(quality)] # Initialize the wizard. w = Wizard() w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates() # Check the first target cluster. assert w.current_target() == best_cluster # Test impossible previous. assert w.previous_candidate() == w.current_candidate() # Check next/previous. c0 = w.next_candidate() c1 = w.next_candidate() assert w.previous_candidate() == c0 assert w.next_candidate() == c1 # Check skip target. t0 = w.current_target() w.skip_target() w.update_candidates() t1 = w.current_target() assert t0 != t1
def test_wizard_move(): # Create mock data. clusters = create_clusters(nspikes, nclusters) cluster_groups = create_cluster_groups(nclusters) similarity_matrix = create_similarity_matrix(nclusters) quality = np.diag(similarity_matrix) # Get the best clusters. clusters_unique = np.unique(clusters) target = clusters_unique[np.argmax(quality)] # Initialize the wizard. w = Wizard() w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates() cluster0 = w.current_candidate() cluster1 = w.next_candidate() cluster2 = w.next_candidate() # Simulate a move. cluster_groups.ix[cluster2] = 1 # Update the wizard. w.set_data(cluster_groups=cluster_groups) w.update_candidates(target) assert w.current_target() == target assert w.current_candidate() not in (cluster0, cluster1, cluster2) for _ in xrange(nclusters): c = w.next_candidate() assert c != cluster2
def test_wizard_merge(): # Create mock data. clusters = create_clusters(nspikes, nclusters) cluster_groups = create_cluster_groups(nclusters) similarity_matrix = create_similarity_matrix(nclusters) quality = np.diag(similarity_matrix) # Get the best clusters. clusters_unique = np.unique(clusters) target = clusters_unique[np.argmax(quality)] # Initialize the wizard. w = Wizard() w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates() cluster = w.current_candidate() # Simulate a merge: target and cluster ==> cluster_new. cluster_new = clusters_unique.max() + 1 clusters[clusters == target] = cluster_new clusters[clusters == cluster] = cluster_new log.debug("Merged {0:d} and {1:d} to {2:d}".format( target, cluster, cluster_new)) similarity_matrix = create_similarity_matrix(nclusters - 1) indices = [x for x in xrange(cluster_offset, cluster_offset + nclusters + 1) if x != cluster and x != target] cluster_groups = pd.Series(np.array(np.ones(nclusters - 1) * 3, dtype=np.int32), index=np.array(indices)) # Update the wizard. quality = np.diag(similarity_matrix) w.set_data(similarity_matrix=similarity_matrix, cluster_groups=cluster_groups) w.update_candidates(cluster_new) assert w.current_target() == cluster_new c = w.current_candidate() assert c is not None assert w.previous_candidate() == w.current_candidate() assert w.next_candidate() == c for _ in xrange(nclusters): c = w.next_candidate() assert c not in (target, cluster)
def __init__(self, parent=None, dolog=True, filename=None): super(KwikSkope, self).__init__(parent) # HACK: display the icon in Windows' taskbar. if os.name == 'nt': try: import ctypes myappid = 'klustateam.kwikskope' ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( myappid) except: pass self.dolog = dolog if self.dolog: create_file_logger() log.debug("Using {0:s}.".format(QT_BINDING)) # Main window options. self.move(50, 50) self.setWindowTitle('KwikSkope') # Focus options. self.setFocusPolicy(QtCore.Qt.WheelFocus) self.setMouseTracking(True) # Dock widgets options. self.setDockNestingEnabled(True) self.setAnimated(False) self.setWindowIcon(get_icon('logo')) # Initialize some variables. # self.statscache = None # self.loader = KlustersLoader() self.loader = HDF5Loader() self.loader.progressReported.connect(self.open_progress_reported) self.loader.saveProgressReported.connect(self.save_progress_reported) self.wizard = Wizard() self.controller = None self.spikes_highlighted = [] self.spikes_selected = [] self._wizard = False self.is_file_open = False self.need_save = False self.busy_cursor = QtGui.QCursor(QtCore.Qt.BusyCursor) self.normal_cursor = QtGui.QCursor(QtCore.Qt.ArrowCursor) self.is_busy = False self.override_color = False self.computing_correlograms = False self.computing_matrix = False # Create the main window. self.create_views() self.create_file_actions() self.create_edit_actions() self.create_view_actions() self.create_help_actions() self.create_menu() self.create_toolbar() self.create_open_progress_dialog() self.create_save_progress_dialog() self.create_threads() # Update action enabled/disabled property. self.update_action_enabled() # Show the main window. self.set_styles() self.restore_geometry() # Automatically load a file upon startup if requested. if filename: filename = os.path.realpath(filename) self.open_task.open(self.loader, filename) self.show()