예제 #1
0
    def merge_efm_groups(self):
        r_id2i = self.get_main_r_id2i()
        m_id2i = self.get_main_m_id2i(boundary=True)
        efm_id2i = self.get_main_efm_id2i()
        V = self.get_main_V(r_id2i, efm_id2i)
        N = self.get_main_N(r_id2i, m_id2i)
        efm_id_groups = \
            get_efm_groups_based_on_boundary_metabolites(N, V, efm_id2i)

        gr_i = 0
        for efm_ids in efm_id_groups:
            grouped_efm_id, gr_i = get_unique_id(self.efm_id2i, 'pathway', gr_i)
            self.pathways.add(grouped_efm_id)
            self.efm_id2gr_id.update({efm_id: grouped_efm_id for efm_id in efm_ids})
            self.gr_id2efm_ids[grouped_efm_id] = efm_ids
            self.efm_id2i[grouped_efm_id] = self.V.shape[1]

            indices = tuple((self.efm_id2i[efm_id] for efm_id in efm_ids))
            lambdas = np.array([[1] for _ in efm_ids])
            v_new = np.dot(self.V[:, indices], lambdas)
            replace_zeros(v_new)
            self.V = np.concatenate((self.V, v_new), axis=1)

            self.efm_ids -= set(efm_ids)
            self.efm_ids.add(grouped_efm_id)
예제 #2
0
 def test_merge_efm_groups_V_shape(self):
     N = np.array([[-1, 0, -1, 0],
                   [1, -1, 0, 0],
                   [0, 1, 0, 1],
                   [0, 0, 1, -1]])
     V = np.array([[1, 0, 1],
                   [1, 0, 0],
                   [0, 10, 0],
                   [0, 10, 0]])
     efm_id2i = {0: 0, 1: 1, 2: 2}
     groups = get_efm_groups_based_on_boundary_metabolites(N, V, efm_id2i)
     V_new, new_efm_id2i, efm_id2gr_id = merge_efm_groups(V, groups, efm_id2i)
     self.assertTupleEqual((4, 2), V_new.shape,
                           'Was supposed to get 4x2 V, got %s' % [str(it) for it in V_new.shape])
예제 #3
0
 def test_merge_efm_groups_V_content_2(self):
     N = np.array([[-1, 0, -1, 0],
                   [1, -1, 0, 0],
                   [0, 1, 0, 1],
                   [0, 0, 1, -1]])
     V = np.array([[1, 0, 1],
                   [1, 0, 0],
                   [0, 10, 0],
                   [0, 10, 0]])
     efm_id2i = {0: 0, 1: 1, 2: 2}
     groups = get_efm_groups_based_on_boundary_metabolites(N, V, efm_id2i)
     V_new, new_efm_id2i, efm_id2gr_id = merge_efm_groups(V, groups, efm_id2i)
     new_efm_index = new_efm_id2i[efm_id2gr_id[0]]
     r2 = V_new[2, new_efm_index] / V_new[3, new_efm_index]
     self.assertEqual(1, r2, 'Ratio r3/r4 in the new EFM was supposed to be 1, got %d' % r2)
예제 #4
0
 def test_get_efm_groups_based_on_b_ms_size(self):
     """
        -r1-> m2 -r2->
     m1                m3
        -r3-> m4 -r4->
     :return:
     """
     N = np.array([[-1, 0, -1, 0],
                   [1, -1, 0, 0],
                   [0, 1, 0, 1],
                   [0, 0, 1, -1]])
     V = np.array([[1, 0, 1],
                   [1, 0, 0],
                   [0, 10, 0],
                   [0, 10, 0]])
     efm_id2i = {0: 0, 1: 1, 2: 2}
     groups = get_efm_groups_based_on_boundary_metabolites(N, V, efm_id2i)
     self.assertEqual(1, len(groups), 'Was supposed to find 1 group, got %d' % len(groups))
예제 #5
0
 def test_get_efm_groups_based_on_b_ms_content(self):
     """
        -r1-> m2 -r2->
     m1                m3
        -r3-> m4 -r4->
     :return:
     """
     N = np.array([[-1, 0, -1, 0],
                   [1, -1, 0, 0],
                   [0, 1, 0, 1],
                   [0, 0, 1, -1]])
     V = np.array([[1, 0, 1],
                   [1, 0, 0],
                   [0, 10, 0],
                   [0, 10, 0]])
     efm_id2i = {0: 0, 1: 1, 2: 2}
     groups = get_efm_groups_based_on_boundary_metabolites(N, V, efm_id2i)
     self.assertSetEqual({0, 1}, set(groups[0]),
                         'Was supposed to find group {0, 1}, got %s' % {str(it) for it in groups[0]})