예제 #1
0
def get_initial_system(model, res_dir, r_id2rev, tree_efm_path, max_efm_number, threshold, rewrite=True,
                       pw2rs=None):
    m_id2i, r_id2i = get_element2id_mapping(model)
    boundary_m_ids = [m.getId() for m in model.getListOfSpecies() if m.getBoundaryCondition()]
    N = model2stoichiometric_matrix(model, m_id2i, r_id2i)
    logging.info('Calculated N of shape %s' % 'x'.join((str(it) for it in N.shape)))
    r_id2coefficient_list = compute_efms(model, res_dir, max_efm_number, r_id2rev=r_id2rev,
                                         tree_efm_path=tree_efm_path, threshold=threshold, rewrite=rewrite)

    efm_id2pws = {'efm_%d' % i: r_ids2pws(set(r_id2coeff.keys()), pw2rs)
                  for i, r_id2coeff in enumerate(r_id2coefficient_list)}
    V = get_efm_matrix(r_id2coefficient_list, r_id2i)
    # inner_m_ids = [m.getId() for m in model.getListOfSpecies() if not m.getBoundaryCondition()]
    # rev = [model.getReaction(r_id).getReversible() for (r_id, i) in
    #        sorted(r_id2i.items(), key=lambda (_, i): i)]
    # N_in = N[[m_id2i[m_id] for m_id in inner_m_ids], :]
    # V = sampler(N_in, rev, K=None, debug=True)
    # V = V[:, [i for i in range(0, V.shape[1])
    #           if V[r_id2i[out_r_id], i] * (-1 if out_rev else 1) > 0 and
    #           next((False for (in_r_id, in_rev) in in_r_id2rev.items() if
    #                 V[r_id2i[in_r_id], i] * (-1 if in_rev else 1) <= 0), True)]]
    # V = remove_invalid_efms(N[tuple(m_id2i[m_id] for m_id in inner_m_ids), :], V)

    logging.info('Calculated V of shape %s' % 'x'.join((str(it) for it in V.shape)))
    efm_id2i = {'efm_%d' % i: i for i in range(0, V.shape[1])}
    S = System(N=N, V=V, m_id2i=m_id2i, r_id2i=r_id2i, efm_id2i=efm_id2i, boundary_m_ids=boundary_m_ids)
    return S.get_used_system(), efm_id2pws
예제 #2
0
    def setUp(self):
        """
                         r2-> m2 <-r3-> m2_b
                      <-      ^
        m1_b <-r1-> m1         r6
                      <-      |
                         r4-> m3 --r5-> m3_b


        Expect to find 2 EFMs that include r3:
            10 r1	10 r2	10 r3
            10 r1	10 r3	10 r4	10 r6
        """
        create_test_sbml()
        self.doc = libsbml.SBMLReader().readSBML(TEST_SBML)
        self.model = self.doc.getModel()
        self.s_id2i, self.r_id2i = get_element2id_mapping(self.model)