def test_lda_metrics(): all_pcs1, all_labels1 = create_ground_truth_pc_distributions([1,-1],[1000, 1000]) all_pcs2, all_labels2 = create_ground_truth_pc_distributions([1,-2],[1000, 1000]) # increase distance between clusters d_prime1 = lda_metrics(all_pcs1, all_labels1, 0) d_prime2 = lda_metrics(all_pcs2, all_labels2, 0) assert d_prime1 < d_prime2
def test_nearest_neighbors_metrics(): all_pcs1, all_labels1 = create_ground_truth_pc_distributions([1,-1],[1000, 1000]) all_pcs2, all_labels2 = create_ground_truth_pc_distributions([1,-2],[1000, 1000]) # increase distance between clusters hit_rate1, miss_rate1 = nearest_neighbors_metrics(all_pcs1, all_labels1, 0, 1000, 3) hit_rate2, miss_rate2 = nearest_neighbors_metrics(all_pcs2, all_labels2, 0, 1000, 3) assert hit_rate1 < hit_rate2 assert miss_rate1 > miss_rate2
def test_mahalanobis_metrics(): all_pcs1, all_labels1 = create_ground_truth_pc_distributions([1,-1],[1000, 1000]) all_pcs2, all_labels2 = create_ground_truth_pc_distributions([1,-2],[1000, 1000]) # increase distance between clusters isolation_distance1, l_ratio1 = mahalanobis_metrics(all_pcs1, all_labels1, 0) isolation_distance2, l_ratio2 = mahalanobis_metrics(all_pcs2, all_labels2, 0) assert isolation_distance1 < isolation_distance2 assert l_ratio1 > l_ratio2
def test_calculate_pc_metrics(): num_channels_to_compare = 6 total_units = 4 center_locs = np.array( [[1, -1, 10, 20], [10, 20, 30, 10], [2, 9, 1, 4], [4, -2, 4, -1], [-1, 2, 4, 3], [10, 80, 3, 17]]) n_spikes = [1000, 1000, 500, 20] pc_features, spike_clusters = create_ground_truth_pc_distributions(center_locs, n_spikes) pc_feature_ind = np.tile(np.arange(0, num_channels_to_compare), (total_units, 1)) max_spikes_for_cluster = 500 spikes_for_nn = 1000 n_neighbors = 3 channel_locations = np.zeros((num_channels_to_compare, 2)) channel_locations[:, 1] = np.arange(0, num_channels_to_compare) isolation_distances, l_ratios, d_primes, nn_hit_rates, nn_miss_rates = \ calculate_pc_metrics(spike_clusters, total_units, pc_features, pc_feature_ind, num_channels_to_compare, max_spikes_for_cluster, spikes_for_nn, n_neighbors, channel_locations, verbose=False) assert np.sum(np.isnan(isolation_distances)) == 0 assert np.sum(np.isnan(l_ratios)) == 0 assert np.sum(np.isnan(d_primes)) == 0 assert np.sum(np.isnan(nn_hit_rates)) == 0 assert np.sum(np.isnan(nn_miss_rates)) == 0
def test_calculate_silhouette_score(): pc_features, spike_clusters = create_ground_truth_pc_distributions([1, -1, 10, 20], [1000, 1000, 500, 20]) pc_feature_ind = np.zeros((4, 1), dtype='int') total_units = 4 pc_features = np.expand_dims(pc_features, axis=2) ss = calculate_silhouette_score(spike_clusters, total_units, pc_features, pc_feature_ind, 1000, verbose=False) assert np.sum(np.isnan(ss)) == 0
def test_calculate_pc_metrics(): pc_features, spike_clusters = create_ground_truth_pc_distributions([1,-1, 10, 20],[1000, 1000, 500, 20]) pc_feature_ind = np.zeros((4,1),dtype='int') total_units = 4 pc_features = np.expand_dims(pc_features, axis=2) isolation_distances, l_ratios, d_primes, nn_hit_rates, nn_miss_rates = \ calculate_pc_metrics(spike_clusters, total_units, pc_features, pc_feature_ind, 1, 500, 1000, 3, verbose=False) assert np.sum(np.isnan(isolation_distances)) == 0 assert np.sum(np.isnan(l_ratios)) == 0 assert np.sum(np.isnan(d_primes)) == 0 assert np.sum(np.isnan(nn_hit_rates)) == 0 assert np.sum(np.isnan(nn_miss_rates)) == 0