def test_kwik_save(): """WARNING: this test should occur at the end of the module since it changes the mock data sets.""" # Open the mock data. dir = TEST_FOLDER xmlfile = os.path.join(dir, 'test.xml') l = KwikLoader(filename=xmlfile) clusters = l.get_clusters() cluster_colors = l.get_cluster_colors() cluster_groups = l.get_cluster_groups() group_colors = l.get_group_colors() group_names = l.get_group_names() # Set clusters. indices = get_indices(clusters) l.set_cluster(indices[::2], 2) l.set_cluster(indices[1::2], 3) # Set cluster info. cluster_indices = l.get_clusters_unique() l.set_cluster_colors(cluster_indices[::2], 10) l.set_cluster_colors(cluster_indices[1::2], 20) l.set_cluster_groups(cluster_indices[::2], 1) l.set_cluster_groups(cluster_indices[1::2], 0) # Save. l.remove_empty_clusters() l.save() clusters = l.get_clusters() cluster_colors = l.get_cluster_colors() cluster_groups = l.get_cluster_groups() group_colors = l.get_group_colors() group_names = l.get_group_names() assert np.all(clusters[::2] == 2) assert np.all(clusters[1::2] == 3) assert np.all(cluster_colors[::2] == 10) assert np.all(cluster_colors[1::2] == 20) print cluster_groups assert np.all(cluster_groups[::2] == 1) assert np.all(cluster_groups[1::2] == 0) l.close()
def test_klusters_loader_control(): # Open the mock data. dir = TEST_FOLDER xmlfile = os.path.join(dir, 'test.xml') l = KlustersLoader(filename=xmlfile) # Take all spikes in cluster 3. spikes = get_indices(l.get_clusters(clusters=3)) # Put them in cluster 4. l.set_cluster(spikes, 4) spikes_new = get_indices(l.get_clusters(clusters=4)) # Ensure all spikes in old cluster 3 are now in cluster 4. assert np.all(np.in1d(spikes, spikes_new)) # Change cluster groups. clusters = [2, 3, 4] group = 0 l.set_cluster_groups(clusters, group) groups = l.get_cluster_groups(clusters) assert np.all(groups == group) # Change cluster colors. clusters = [2, 3, 4] color = 12 l.set_cluster_colors(clusters, color) colors = l.get_cluster_colors(clusters) assert np.all(colors == color) # Change group name. group = 0 name = l.get_group_names(group) name_new = 'Noise new' assert name == 'Noise' l.set_group_names(group, name_new) assert l.get_group_names(group) == name_new # Change group color. groups = [1, 2] colors = l.get_group_colors(groups) color_new = 10 l.set_group_colors(groups, color_new) assert np.all(l.get_group_colors(groups) == color_new) # Add cluster and group. spikes = get_indices(l.get_clusters(clusters=3))[:10] # Create new group 100. l.add_group(100, 'New group', 10) # Create new cluster 10000 and put it in group 100. l.add_cluster(10000, 100, 10) # Put some spikes in the new cluster. l.set_cluster(spikes, 10000) clusters = l.get_clusters(spikes=spikes) assert np.all(clusters == 10000) groups = l.get_cluster_groups(10000) assert groups == 100 l.set_cluster(spikes, 2) # Remove the new cluster and group. l.remove_cluster(10000) l.remove_group(100) assert np.all(~np.in1d(10000, l.get_clusters())) assert np.all(~np.in1d(100, l.get_cluster_groups())) l.close()
def test_renumber_clusters(): # Create clusters. clusters = np.random.randint(size=20, low=10, high=100) clusters_unique = np.unique(clusters) n = len(clusters_unique) # Create cluster info. cluster_info = np.zeros((n, 3), dtype=np.int32) cluster_info[:, 0] = clusters_unique cluster_info[:, 1] = np.mod(np.arange(n, dtype=np.int32), 35) + 1 # Set groups. k = n // 3 cluster_info[:k, 2] = 1 cluster_info[k:2 * n // 3, 2] = 0 cluster_info[2 * k:, 2] = 2 cluster_info[n // 2, 2] = 1 cluster_info = pd.DataFrame({ 'color': cluster_info[:, 1], 'group': cluster_info[:, 2]}, dtype=np.int32, index=cluster_info[:, 0]) # Renumber clusters_renumbered, cluster_info_renumbered = renumber_clusters(clusters, cluster_info) # Test. c0 = clusters_unique[k] # group 0 c1 = clusters_unique[0] # group 1 c2 = clusters_unique[2 * k] # group 2 cm = clusters_unique[n // 2] # group 1 c0next = clusters_unique[k + 1] c1next = clusters_unique[0 + 1] c2next = clusters_unique[2 * k + 1] # New order: # c0 ... cm-1, cm+1, ..., c2-1, c1, ..., c0-1, cm, c2, ... assert np.array_equal(clusters == c0, clusters_renumbered == 0 + 2) assert np.array_equal(clusters == c0next, clusters_renumbered == 1 + 2) assert np.array_equal(clusters == c1, clusters_renumbered == k - 1 + 2) assert np.array_equal(clusters == c1next, clusters_renumbered == k + 2) assert np.array_equal(clusters == c2, clusters_renumbered == 2 * k + 2) assert np.array_equal(clusters == c2next, clusters_renumbered == 2 * k + 1 + 2) assert np.array_equal(get_indices(cluster_info_renumbered), np.arange(n) + 2) # Increasing groups with the new numbering. assert np.all(np.diff(get_array(cluster_info_renumbered)[:,1]) >= 0) assert np.all(select(cluster_info_renumbered, 0 + 2) == select(cluster_info, c0)) assert np.all(select(cluster_info_renumbered, 1 + 2) == select(cluster_info, c0next)) assert np.all(select(cluster_info_renumbered, k - 1 + 2) == select(cluster_info, c1)) assert np.all(select(cluster_info_renumbered, k + 2) == select(cluster_info, c1next)) assert np.all(select(cluster_info_renumbered, 2 * k + 2) == select(cluster_info, c2)) assert np.all(select(cluster_info_renumbered, 2 * k + 1 + 2) == select(cluster_info, c2next))
def te_SKIP_st_renumber_clusters(): # Create clusters. clusters = np.random.randint(size=20, low=10, high=100) clusters_unique = np.unique(clusters) n = len(clusters_unique) # Create cluster info. cluster_info = np.zeros((n, 3), dtype=np.int32) cluster_info[:, 0] = clusters_unique cluster_info[:, 1] = np.mod(np.arange(n, dtype=np.int32), 35) + 1 # Set groups. k = n // 3 cluster_info[:k, 2] = 1 cluster_info[k:2 * n // 3, 2] = 0 cluster_info[2 * k:, 2] = 2 cluster_info[n // 2, 2] = 1 cluster_info = pd.DataFrame( { 'color': cluster_info[:, 1], 'group': cluster_info[:, 2] }, dtype=np.int32, index=cluster_info[:, 0]) # Renumber clusters_renumbered, cluster_info_renumbered = renumber_clusters( clusters, cluster_info) # Test. c0 = clusters_unique[k] # group 0 c1 = clusters_unique[0] # group 1 c2 = clusters_unique[2 * k] # group 2 cm = clusters_unique[n // 2] # group 1 c0next = clusters_unique[k + 1] c1next = clusters_unique[0 + 1] c2next = clusters_unique[2 * k + 1] # New order: # c0 ... cm-1, cm+1, ..., c2-1, c1, ..., c0-1, cm, c2, ... assert np.array_equal(clusters == c0, clusters_renumbered == 0 + 2) assert np.array_equal(clusters == c0next, clusters_renumbered == 1 + 2) assert np.array_equal(clusters == c1, clusters_renumbered == k - 1 + 2) assert np.array_equal(clusters == c1next, clusters_renumbered == k + 2) assert np.array_equal(clusters == c2, clusters_renumbered == 2 * k + 2) assert np.array_equal(clusters == c2next, clusters_renumbered == 2 * k + 1 + 2) assert np.array_equal(get_indices(cluster_info_renumbered), np.arange(n) + 2) # Increasing groups with the new numbering. assert np.all(np.diff(get_array(cluster_info_renumbered)[:, 1]) >= 0) assert np.all( select(cluster_info_renumbered, 0 + 2) == select(cluster_info, c0)) assert np.all( select(cluster_info_renumbered, 1 + 2) == select(cluster_info, c0next)) assert np.all( select(cluster_info_renumbered, k - 1 + 2) == select(cluster_info, c1)) assert np.all( select(cluster_info_renumbered, k + 2) == select(cluster_info, c1next)) assert np.all( select(cluster_info_renumbered, 2 * k + 2) == select(cluster_info, c2)) assert np.all( select(cluster_info_renumbered, 2 * k + 1 + 2) == select(cluster_info, c2next))