Example #1
0
    def test_spike_objects(self):
        dimension = 40
        offset = sp.zeros((dimension, 1))
        offset[0] = 4
        cluster1 = self.rand.randn(dimension, 10)
        cluster2 = self.rand.randn(dimension, 100) + offset
        cluster3 = self.rand.randn(dimension, 500) - offset
        clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
        clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
        clusterList3 = [cluster3[:, i] for i in xrange(sp.size(cluster3, 1))]
        mean1 = sp.zeros(dimension)
        mean2 = offset.flatten()
        mean3 = -mean2

        total, pair = qa.overlap_fp_fn(
            {
                1: clusterList1,
                2: clusterList2,
                3: clusterList3
            },
            means={
                1: mean1,
                2: mean2,
                3: mean3
            },
            covariances={
                1: sp.eye(dimension),
                2: sp.eye(dimension),
                3: sp.eye(dimension)
            })

        # Replacing some arrays with Spike objects
        mean2 = neo.Spike(waveform=mean2.reshape(-1, 4) / 1000.0 * pq.mV)
        mean3 = neo.Spike(waveform=mean3.reshape(-1, 4) / 1e6 * pq.V)
        newClusterList = []
        for s in clusterList1:
            newClusterList.append(
                neo.Spike(waveform=s.reshape(-1, 4) / 1000.0 * pq.mV))

        total_s, pair_s = qa.overlap_fp_fn(
            {
                1: newClusterList,
                2: clusterList2,
                3: clusterList3
            },
            means={
                1: mean1,
                2: mean2,
                3: mean3
            },
            covariances='white')

        # Results should be identical for arrays and Spike objects
        for i in total.keys():
            self.assertAlmostEqual(total[i][0], total_s[i][0])
            self.assertAlmostEqual(total[i][1], total_s[i][1])
            for j in pair[i].keys():
                self.assertAlmostEqual(pair[i][j][0], pair_s[i][j][0])
                self.assertAlmostEqual(pair[i][j][1], pair_s[i][j][1])
 def test_far_apart_clusters_estimate_all(self):
     cluster1 = sp.randn(40,1000)
     cluster2 = sp.randn(40,1000) * 2
     cluster2[0,:] += 10
     clusterList1 = [cluster1[:,i]
                     for i in xrange(sp.size(cluster1,1))]
     clusterList2 = [cluster2[:,i]
                     for i in xrange(sp.size(cluster2,1))]
     total, pair = qa.overlap_fp_fn(
         {1: clusterList1, 2: clusterList2})
     self.assertLess(total[1][0], 1e-4)
     self.assertLess(total[1][1], 1e-4)
     self.assertLess(total[2][0], 1e-4)
     self.assertLess(total[2][1], 1e-4)
     self.assertLess(pair[1][2][0], 1e-4)
     self.assertLess(pair[1][2][1], 1e-4)
     self.assertLess(pair[2][1][0], 1e-4)
     self.assertLess(pair[2][1][1], 1e-4)
     self.assertGreater(total[1][0], 0.0)
     self.assertGreater(total[1][1], 0.0)
     self.assertGreater(total[2][0], 0.0)
     self.assertGreater(total[2][1], 0.0)
     self.assertGreater(pair[1][2][0], 0.0)
     self.assertGreater(pair[1][2][1], 0.0)
     self.assertGreater(pair[2][1][0], 0.0)
     self.assertGreater(pair[2][1][1], 0.0)
 def test_1_cluster(self):
     # One cluster cannot have overlaps...
     cluster1 = self.rand.randn(8, 100)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     total, pair = qa.overlap_fp_fn({1: clusterList1})
     self.assertEqual(total[1][0], 0.0)
     self.assertEqual(total[1][1], 0.0)
     self.assertEqual(pair, {})
Example #4
0
 def test_1_cluster(self):
     # One cluster cannot have overlaps...
     cluster1 = self.rand.randn(8, 100)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     total, pair = qa.overlap_fp_fn({1: clusterList1})
     self.assertEqual(total[1][0], 0.0)
     self.assertEqual(total[1][1], 0.0)
     self.assertEqual(pair, {})
    def test_overlap_spike_objects(self):
        dimension = 40
        offset = sp.zeros((dimension,1))
        offset[0] = 4
        cluster1 = sp.randn(dimension,10)
        cluster2 = sp.randn(dimension,100) + offset
        cluster3 = sp.randn(dimension,500) - offset
        clusterList1 = [cluster1[:,i]
                             for i in xrange(sp.size(cluster1,1))]
        clusterList2 = [cluster2[:,i]
                             for i in xrange(sp.size(cluster2,1))]
        clusterList3 = [cluster3[:,i]
                             for i in xrange(sp.size(cluster3,1))]
        mean1 = sp.zeros(dimension)
        mean2 = offset.flatten()
        mean3 = -mean2
        
        total, pair = qa.overlap_fp_fn(
            {1: clusterList1, 2: clusterList2, 3: clusterList3},
            means={1: mean1, 2: mean2, 3: mean3},
            covariances={1: sp.eye(dimension), 2: sp.eye(dimension),
                         3: sp.eye(dimension)})

        # Replacing some arrays with Spike objects
        mean2 = neo.Spike(waveform=mean2.reshape(-1,4) / 1000.0 * pq.mV)
        mean3 = neo.Spike(waveform=mean3.reshape(-1,4) / 1e6 * pq.V)
        newClusterList = []
        for s in clusterList1:
            newClusterList.append(
                neo.Spike(waveform=s.reshape(-1,4) / 1000.0 * pq.mV))

        total_s, pair_s = qa.overlap_fp_fn(
                {1: newClusterList, 2: clusterList2, 3: clusterList3},
                means={1: mean1, 2: mean2, 3: mean3},
                covariances='white')

        # Results should be identical for arrays and Spike objects
        for i in total.keys():
            self.assertAlmostEqual(total[i][0], total_s[i][0])
            self.assertAlmostEqual(total[i][1], total_s[i][1])
            for j in pair[i].keys():
                self.assertAlmostEqual(pair[i][j][0], pair_s[i][j][0])
                self.assertAlmostEqual(pair[i][j][1], pair_s[i][j][1])
 def test_equal_clusters_estimate_all(self):
     # Smaller dimensionality and more data for reliable estimates
     cluster1 = self.rand.randn(8, 100000)
     cluster2 = self.rand.randn(8, 100000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn({1: clusterList1, 2: clusterList2})
     self.assertAlmostEqual(total[1][0], 0.5, 2)
     self.assertAlmostEqual(total[1][1], 0.5, 2)
     self.assertAlmostEqual(total[2][0], 0.5, 2)
     self.assertAlmostEqual(total[2][1], 0.5, 2)
     self.assertAlmostEqual(pair[1][2][0], 0.5, 2)
     self.assertAlmostEqual(pair[1][2][1], 0.5, 2)
     self.assertAlmostEqual(pair[2][1][0], 0.5, 2)
     self.assertAlmostEqual(pair[2][1][1], 0.5, 2)
Example #7
0
 def test_equal_clusters_estimate_all(self):
     # Smaller dimensionality and more data for reliable estimates
     cluster1 = self.rand.randn(8, 100000)
     cluster2 = self.rand.randn(8, 100000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn({1: clusterList1, 2: clusterList2})
     self.assertAlmostEqual(total[1][0], 0.5, 2)
     self.assertAlmostEqual(total[1][1], 0.5, 2)
     self.assertAlmostEqual(total[2][0], 0.5, 2)
     self.assertAlmostEqual(total[2][1], 0.5, 2)
     self.assertAlmostEqual(pair[1][2][0], 0.5, 2)
     self.assertAlmostEqual(pair[1][2][1], 0.5, 2)
     self.assertAlmostEqual(pair[2][1][0], 0.5, 2)
     self.assertAlmostEqual(pair[2][1][1], 0.5, 2)
Example #8
0
    def test_3_clusters_estimate_means(self):
        cluster1 = self.rand.randn(20, 10000)
        cluster2 = self.rand.randn(20, 20000)
        cluster3 = self.rand.randn(20, 10000)
        cluster3[5, :] += 11
        clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
        clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
        clusterList3 = [cluster3[:, i] for i in xrange(sp.size(cluster3, 1))]
        total, pair = qa.overlap_fp_fn(
            {
                1: clusterList1,
                2: clusterList2,
                3: clusterList3
            },
            covariances={
                1: sp.eye(20),
                2: sp.eye(20),
                3: sp.eye(20) * 1.5
            })

        self.assertAlmostEqual(total[1][0], 2.0 / 3.0, 2)
        self.assertAlmostEqual(total[1][1], 2.0 / 3.0, 2)
        self.assertAlmostEqual(total[2][0], 1.0 / 3.0, 2)
        self.assertAlmostEqual(total[2][1], 1.0 / 3.0, 2)
        self.assertLess(total[3][0], 1e-4)
        self.assertLess(total[3][1], 1e-4)
        self.assertGreater(total[3][0], 0.0)
        self.assertGreater(total[3][1], 0.0)
        self.assertAlmostEqual(pair[1][2][0], 2.0 / 3.0, 2)
        self.assertAlmostEqual(pair[1][2][1], 2.0 / 3.0, 2)
        self.assertLess(pair[1][3][0], 1e-4)
        self.assertLess(pair[1][3][1], 1e-4)
        self.assertGreater(pair[1][3][0], 0.0)
        self.assertGreater(pair[1][3][1], 0.0)
        self.assertAlmostEqual(pair[2][1][0], 1.0 / 3.0, 2)
        self.assertAlmostEqual(pair[2][1][1], 1.0 / 3.0, 2)
        self.assertLess(pair[2][3][0], 1e-4)
        self.assertLess(pair[2][3][1], 1e-4)
        self.assertGreater(pair[2][3][0], 0.0)
        self.assertGreater(pair[2][3][1], 0.0)
        self.assertLess(pair[3][1][0], 1e-4)
        self.assertLess(pair[3][1][1], 1e-4)
        self.assertGreater(pair[3][1][0], 0.0)
        self.assertGreater(pair[3][1][1], 0.0)
        self.assertLess(pair[3][2][0], 1e-4)
        self.assertLess(pair[3][2][1], 1e-4)
        self.assertGreater(pair[3][2][0], 0.0)
        self.assertGreater(pair[3][2][1], 0.0)
 def test_equal_clusters_white(self):
     cluster1 = self.rand.randn(40, 1000)
     cluster2 = self.rand.randn(40, 1000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn(
         {1: clusterList1, 2: clusterList2}, means={1: sp.zeros(40), 2: sp.zeros(40)}, covariances="white"
     )
     self.assertAlmostEqual(total[1][0], 0.5)
     self.assertAlmostEqual(total[1][1], 0.5)
     self.assertAlmostEqual(total[2][0], 0.5)
     self.assertAlmostEqual(total[2][1], 0.5)
     self.assertAlmostEqual(pair[1][2][0], 0.5)
     self.assertAlmostEqual(pair[1][2][1], 0.5)
     self.assertAlmostEqual(pair[2][1][0], 0.5)
     self.assertAlmostEqual(pair[2][1][1], 0.5)
 def test_unequal_clusters(self):
     cluster1 = self.rand.randn(40, 1000)
     cluster2 = self.rand.randn(40, 2000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn(
         {1: clusterList1, 2: clusterList2}, {1: sp.zeros(40), 2: sp.zeros(40)}, {1: sp.eye(40), 2: sp.eye(40)}
     )
     self.assertAlmostEqual(total[1][0], 2.0 / 3.0)
     self.assertAlmostEqual(total[1][1], 2.0 / 3.0)
     self.assertAlmostEqual(total[2][0], 1.0 / 3.0)
     self.assertAlmostEqual(total[2][1], 1.0 / 3.0)
     self.assertAlmostEqual(pair[1][2][0], 2.0 / 3.0)
     self.assertAlmostEqual(pair[1][2][1], 2.0 / 3.0)
     self.assertAlmostEqual(pair[2][1][0], 1.0 / 3.0)
     self.assertAlmostEqual(pair[2][1][1], 1.0 / 3.0)
    def test_overlap_3_clusters_estimate_means(self):
        cluster1 = sp.randn(20,10000)
        cluster2 = sp.randn(20,20000)
        cluster3 = sp.randn(20,10000)
        cluster3[5,:] += 11
        clusterList1 = [cluster1[:,i]
                        for i in xrange(sp.size(cluster1,1))]
        clusterList2 = [cluster2[:,i]
                        for i in xrange(sp.size(cluster2,1))]
        clusterList3 = [cluster3[:,i]
                        for i in xrange(sp.size(cluster3,1))]
        total, pair = qa.overlap_fp_fn(
            {1: clusterList1, 2: clusterList2, 3: clusterList3},
            covariances={1:sp.eye(20), 2:sp.eye(20), 3:sp.eye(20)*1.5})

        self.assertAlmostEqual(total[1][0], 2.0/3.0, 2)
        self.assertAlmostEqual(total[1][1], 2.0/3.0, 2)
        self.assertAlmostEqual(total[2][0], 1.0/3.0, 2)
        self.assertAlmostEqual(total[2][1], 1.0/3.0, 2)
        self.assertLess(total[3][0], 1e-4)
        self.assertLess(total[3][1], 1e-4)
        self.assertGreater(total[3][0], 0.0)
        self.assertGreater(total[3][1], 0.0)
        self.assertAlmostEqual(pair[1][2][0], 2.0/3.0, 2)
        self.assertAlmostEqual(pair[1][2][1], 2.0/3.0, 2)
        self.assertLess(pair[1][3][0], 1e-4)
        self.assertLess(pair[1][3][1], 1e-4)
        self.assertGreater(pair[1][3][0], 0.0)
        self.assertGreater(pair[1][3][1], 0.0)
        self.assertAlmostEqual(pair[2][1][0], 1.0/3.0, 2)
        self.assertAlmostEqual(pair[2][1][1], 1.0/3.0, 2)
        self.assertLess(pair[2][3][0], 1e-4)
        self.assertLess(pair[2][3][1], 1e-4)
        self.assertGreater(pair[2][3][0], 0.0)
        self.assertGreater(pair[2][3][1], 0.0)
        self.assertLess(pair[3][1][0], 1e-4)
        self.assertLess(pair[3][1][1], 1e-4)
        self.assertGreater(pair[3][1][0], 0.0)
        self.assertGreater(pair[3][1][1], 0.0)
        self.assertLess(pair[3][2][0], 1e-4)
        self.assertLess(pair[3][2][1], 1e-4)
        self.assertGreater(pair[3][2][0], 0.0)
        self.assertGreater(pair[3][2][1], 0.0)
Example #12
0
 def test_equal_clusters_white(self):
     cluster1 = self.rand.randn(40, 1000)
     cluster2 = self.rand.randn(40, 1000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn({
         1: clusterList1,
         2: clusterList2
     },
                                    means={
                                        1: sp.zeros(40),
                                        2: sp.zeros(40)
                                    },
                                    covariances='white')
     self.assertAlmostEqual(total[1][0], 0.5)
     self.assertAlmostEqual(total[1][1], 0.5)
     self.assertAlmostEqual(total[2][0], 0.5)
     self.assertAlmostEqual(total[2][1], 0.5)
     self.assertAlmostEqual(pair[1][2][0], 0.5)
     self.assertAlmostEqual(pair[1][2][1], 0.5)
     self.assertAlmostEqual(pair[2][1][0], 0.5)
     self.assertAlmostEqual(pair[2][1][1], 0.5)
Example #13
0
 def test_unequal_clusters(self):
     cluster1 = self.rand.randn(40, 1000)
     cluster2 = self.rand.randn(40, 2000)
     clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
     clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
     total, pair = qa.overlap_fp_fn({
         1: clusterList1,
         2: clusterList2
     }, {
         1: sp.zeros(40),
         2: sp.zeros(40)
     }, {
         1: sp.eye(40),
         2: sp.eye(40)
     })
     self.assertAlmostEqual(total[1][0], 2.0 / 3.0)
     self.assertAlmostEqual(total[1][1], 2.0 / 3.0)
     self.assertAlmostEqual(total[2][0], 1.0 / 3.0)
     self.assertAlmostEqual(total[2][1], 1.0 / 3.0)
     self.assertAlmostEqual(pair[1][2][0], 2.0 / 3.0)
     self.assertAlmostEqual(pair[1][2][1], 2.0 / 3.0)
     self.assertAlmostEqual(pair[2][1][0], 1.0 / 3.0)
     self.assertAlmostEqual(pair[2][1][1], 1.0 / 3.0)
Example #14
0
    def test_far_apart_clusters_estimate_all(self):
        cluster1 = self.rand.randn(40, 10000)
        cluster2 = self.rand.randn(40, 10000) * 2
        cluster2[0, :] += 10

        clusterList1 = [cluster1[:, i] for i in xrange(sp.size(cluster1, 1))]
        clusterList2 = [cluster2[:, i] for i in xrange(sp.size(cluster2, 1))]
        total, pair = qa.overlap_fp_fn({1: clusterList1, 2: clusterList2})
        self.assertLess(total[1][0], 1e-4)
        self.assertLess(total[1][1], 1e-4)
        self.assertLess(total[2][0], 1e-4)
        self.assertLess(total[2][1], 1e-4)
        self.assertLess(pair[1][2][0], 1e-4)
        self.assertLess(pair[1][2][1], 1e-4)
        self.assertLess(pair[2][1][0], 1e-4)
        self.assertLess(pair[2][1][1], 1e-4)
        self.assertGreater(total[1][0], 0.0)
        self.assertGreater(total[1][1], 0.0)
        self.assertGreater(total[2][0], 0.0)
        self.assertGreater(total[2][1], 0.0)
        self.assertGreater(pair[1][2][0], 0.0)
        self.assertGreater(pair[1][2][1], 0.0)
        self.assertGreater(pair[2][1][0], 0.0)
        self.assertGreater(pair[2][1][1], 0.0)