示例#1
0
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 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 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))