Пример #1
0
    def test_load_kinetic_laws_with_same_reaction(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        src.load_kinetic_laws([16011, 16013, 16016])

        session = src.session

        l = session.query(KineticLaw).filter_by(id=16011).first()
        self.assertEqual(
            next(xr.id for xr in l.cross_references
                 if xr.namespace == 'sabiork.reaction'), '9886')

        l = session.query(KineticLaw).filter_by(id=16013).first()
        self.assertEqual(
            next(xr.id for xr in l.cross_references
                 if xr.namespace == 'sabiork.reaction'), '9886')

        l = session.query(KineticLaw).filter_by(id=16016).first()
        self.assertEqual(
            next(xr.id for xr in l.cross_references
                 if xr.namespace == 'sabiork.reaction'), '9930')

        r = session.query(Resource).filter_by(namespace='sabiork.reaction',
                                              id='9886').first()
        self.assertEqual(set([l.id for l in r.entries]), set([16011, 16013]))

        r = session.query(Resource).filter_by(namespace='sabiork.reaction',
                                              id='9930').first()
        self.assertEqual([l.id for l in r.entries], [16016])
Пример #2
0
    def test_update_all_and_backup(self):
        src = sabio_rk.SabioRk(download_backups=False,
                               load_content=True,
                               clear_content=True,
                               verbose=True,
                               clear_requests_cache=False,
                               max_entries=float('inf'))
        self.assertGreaterEqual(src.session.query(KineticLaw).count(), 55000)

        src.upload_backups()
Пример #3
0
    def test_load_kinetic_laws_modifier_type(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        src.load_kinetic_laws([10054])

        session = src.session

        l = session.query(KineticLaw).filter_by(id=10054).first()
        self.assertEqual(l.enzyme_type, 'Modifier-Catalyst')
Пример #4
0
 def test_load_content_commit_intermediate_results(self):
     src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                            download_backups=False,
                            load_content=True,
                            max_entries=9,
                            commit_intermediate_results=True,
                            webservice_batch_size=1,
                            excel_batch_size=3,
                            verbose=True)
     self.assertEqual(
         src.session.query(KineticLaw).count(), src.max_entries)
Пример #5
0
 def test_load_kinetic_law_ids(self):
     src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                            download_backups=False,
                            load_content=False,
                            max_entries=10,
                            webservice_batch_size=1,
                            excel_batch_size=5,
                            verbose=True)
     ids = src.load_kinetic_law_ids()
     self.assertEqual(ids[0:10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
     self.assertGreater(len(ids), 55000)
Пример #6
0
    def test_full_kinetic_laws(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        src.load_kinetic_laws([23637])
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv([23637])

        law = session.query(KineticLaw).filter_by(id=23637).first()
        self.assertEqual(law.equation, 'V * S / (Km + S + S^2 / Ki)')
Пример #7
0
    def test_load_content(self):
        # get some kinetic laws
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=True,
                               max_entries=9,
                               webservice_batch_size=1,
                               excel_batch_size=3,
                               verbose=True)
        self.assertTrue(os.path.isfile(src.filename))
        self.assertEqual(
            src.session.query(KineticLaw).count(), src.max_entries)

        # get some more
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=True,
                               max_entries=18,
                               webservice_batch_size=1,
                               excel_batch_size=3,
                               verbose=True)
        self.assertTrue(os.path.isfile(src.filename))
        self.assertEqual(
            src.session.query(KineticLaw).count(), src.max_entries)
Пример #8
0
    def test_load_kinetic_laws_multiple(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        ids = [2, 10026]
        src.load_kinetic_laws(ids)
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv(ids)
        src.normalize_kinetic_laws(ids)
        """ compartments """
        self.assertEqual(
            session.query(Compartment).filter_by(name='Cell').count(), 0)

        cytosol = session.query(Compartment).filter_by(name='cytosol').first()
        """ reactions """
        l = session.query(KineticLaw).filter_by(id=10026).first()
        for part in l.reactants:
            self.assertEqual(part.compartment, cytosol)
        for part in l.products:
            self.assertEqual(part.compartment, cytosol)
        """ kinetic laws """
        l = session.query(KineticLaw).filter_by(id=2).first()
        self.assertEqual(l.enzyme_compartment, None)
        self.assertEqual(l.tissue, None)
        self.assertEqual(l.mechanism, None)
        self.assertFalse(l.taxon_wildtype)
        self.assertEqual(l.taxon_variant,
                         'S156E of subtilisin DSAI (N76D/N87S/S103A/V104I)')
        self.assertEqual(l.equation, None)
        self.assertEqual(l.media, '50 mM potassium phosphate, 4 % DMSO')

        l = session.query(KineticLaw).filter_by(id=10026).first()
        self.assertEqual(l.enzyme_compartment, cytosol)
        self.assertEqual(l.tissue, 'epidermal cell')
        self.assertEqual(l.mechanism, 'Michaelis-Menten')
        self.assertTrue(l.taxon_wildtype)
        self.assertEqual(l.taxon_variant, '')
        self.assertEqual(l.equation, 'Vmax * A / (Km + A)')
        self.assertTrue(l.media.startswith('1.25 mM CaCl2'))
        self.assertTrue(l.media.endswith('10 units/ml calmodulin'))

        for param in l.parameters:
            if param.compound:
                self.assertEqual(param.compartment, cytosol)
Пример #9
0
    def test_enzyme_parameter(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        src.load_kinetic_laws([213])
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv([213])

        law = session.query(KineticLaw).filter_by(id=213).first()

        params = list(
            filter(lambda param: isinstance(param.enzyme, sabio_rk.Enzyme),
                   law.parameters))
        self.assertEqual(len(params), 1)
        self.assertEqual(params[0].enzyme.id, 1000)
        self.assertEqual(params[0].enzyme.name, 'inorganic diphosphatase')
Пример #10
0
    def test_load_missing_kinetic_law_information_from_tsv_error_2(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        src.load_kinetic_laws([443])
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv([443])

        p = session.query(Parameter).filter_by(observed_name='kcat1').first()
        self.assertEqual(p.observed_value, 28.3333333)
        self.assertEqual(p.observed_error, 1.66667)
        self.assertEqual(p.observed_units, 's^(-1)')

        p = session.query(Parameter).filter_by(observed_name='kcat2').first()
        self.assertEqual(p.observed_value, 27.6666667)
        self.assertEqual(p.observed_error, 0.5)
        self.assertEqual(p.observed_units, 's^(-1)')
Пример #11
0
    def test_load_missing_kinetic_law_information_from_tsv_error_1(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        src.load_kinetic_laws([3962])
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv([3962])

        p = session.query(Parameter).filter_by(observed_name='kcat').first()
        self.assertEqual(p.observed_value, 0.9)
        self.assertEqual(p.observed_error, 0.6)
        self.assertEqual(p.observed_units, 's^(-1)')

        p = session.query(Parameter).filter_by(
            observed_name='app_kcat_MEP').first()
        self.assertEqual(p.observed_value, 0.54)
        self.assertEqual(p.observed_error, 0.36)
        self.assertEqual(p.observed_units, 's^(-1)')
Пример #12
0
    def test_load_kinetic_laws_with_opposite_directions_of_same_reaction(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False)
        src.load_kinetic_laws([46425, 46427])

        session = src.session

        Lactaldehyde = session.query(Compound).filter_by(id=2845).first()

        l = session.query(KineticLaw).filter_by(id=46425).first()
        self.assertEqual(
            next(xr.id for xr in l.cross_references
                 if xr.namespace == 'sabiork.reaction'), '554')
        self.assertIn(Lactaldehyde, [p.compound for p in l.reactants])
        self.assertNotIn(Lactaldehyde, [p.compound for p in l.products])

        l = session.query(KineticLaw).filter_by(id=46427).first()
        self.assertEqual(
            next(xr.id for xr in l.cross_references
                 if xr.namespace == 'sabiork.reaction'), '554')
        self.assertNotIn(Lactaldehyde, [p.compound for p in l.reactants])
        self.assertIn(Lactaldehyde, [p.compound for p in l.products])
Пример #13
0
    def test_normalize_parameter_value(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)

        self.assertEqual(
            src.normalize_parameter_value('k_d', 282, 0.25, 0.15, None, None),
            (None, None, None, None, None))
        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, None, None, 's^(-1)',
                                          None),
            (None, None, None, None, None))

        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, 0.25, 0.15, None, None),
            (None, None, None, None, None))
        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, 0.25, 0.15, 's^(-1)',
                                          None),
            ('k_cat', 25, 0.25, 0.15, 's^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, 0.25, 0.15,
                                          'katal_base', None),
            (None, None, None, None, None))
        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, 0.25, None,
                                          'katal_base', None),
            (None, None, None, None, None))
        self.assertEqual(
            src.normalize_parameter_value('k_cat', 25, 0.25, None,
                                          'mol*s^(-1)*g^(-1)', None),
            (None, None, None, None, None))

        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, None, None, 500),
            (None, None, None, None, None))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, None,
                                          'mol*s^(-1)*g^(-1)', 500),
            ('k_cat', 25, 0.25 * 500, None, 's^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, None,
                                          'mol*s^(-1)*g^(-1)', None),
            ('v_max', 186, 0.25, None, 'mol*s^(-1)*g^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, 0.15,
                                          'mol*s^(-1)*g^(-1)', 500),
            ('k_cat', 25, 0.25 * 500, 0.15 * 500, 's^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, 0.15,
                                          'mol*s^(-1)*g^(-1)', None),
            ('v_max', 186, 0.25, 0.15, 'mol*s^(-1)*g^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, None, 's^(-1)',
                                          500),
            ('k_cat', 25, 0.25, None, 's^(-1)'))
        self.assertEqual(
            src.normalize_parameter_value('v_max', 186, 0.25, None, 's^(-1)',
                                          None),
            ('k_cat', 25, 0.25, None, 's^(-1)'))

        self.assertRaises(ValueError, src.normalize_parameter_value, 'k_cat',
                          25, 0.25, 0.15, 'm', None)
Пример #14
0
    def test_load_kinetic_laws_check_units(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        session = src.session

        src.load_kinetic_laws([2023])
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv([2023])
        src.normalize_kinetic_laws([2023])

        law = session.query(KineticLaw).filter_by(id=2023).first()

        self.assertEqual(len(law.parameters), 4)

        param = next(param for param in law.parameters
                     if param.observed_type == 25)
        self.assertEqual(param.observed_name, 'kcat')
        self.assertEqual(param.observed_value, 0.329)
        self.assertEqual(param.observed_error, None)
        self.assertEqual(param.observed_units, 's^(-1)')
        self.assertEqual(param.name, 'k_cat')
        self.assertEqual(param.type, 25)
        self.assertEqual(param.value, 0.329)
        self.assertEqual(param.error, None)
        self.assertEqual(param.units, 's^(-1)')

        param = next(param for param in law.parameters
                     if param.observed_type == 27)
        self.assertEqual(param.observed_name, 'Km')
        self.assertEqual(param.observed_value, 0.232)
        self.assertEqual(param.observed_error, None)
        self.assertEqual(param.observed_units, 'mg/ml')
        self.assertEqual(param.name, None)
        self.assertEqual(param.type, None)
        self.assertEqual(param.value, None)
        self.assertEqual(param.error, None)
        self.assertEqual(param.units, None)

        param = next(param for param in law.parameters
                     if param.observed_type == 261)
        self.assertEqual(param.observed_name, 'Ki')
        self.assertEqual(param.observed_value, 2.4E-9)
        self.assertEqual(param.observed_error, None)
        self.assertEqual(param.observed_units, 'M')
        self.assertEqual(param.name, 'k_i')
        self.assertEqual(param.type, 261)
        self.assertEqual(param.value, 2.4E-9)
        self.assertEqual(param.error, None)
        self.assertEqual(param.units, 'M')

        param = next(param for param in law.parameters
                     if param.observed_type == 302)
        self.assertEqual(param.observed_name, 'kcat/Km')
        self.assertEqual(param.observed_value, 1.42)
        self.assertEqual(param.observed_error, None)
        self.assertEqual(param.observed_units, 'l*g^(-1)*s^(-1)')
        self.assertEqual(param.name, None)
        self.assertEqual(param.type, None)
        self.assertEqual(param.value, None)
        self.assertEqual(param.error, None)
        self.assertEqual(param.units, None)
Пример #15
0
    def test_loading_enzymes(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=True,
                               verbose=True)
        ids = [11021, 2139, 1645]
        src.load_kinetic_laws(ids)
        src.load_compounds()
        src.load_missing_kinetic_law_information_from_tsv(ids)
        src.load_missing_enzyme_information_from_html(ids)
        src.calc_enzyme_molecular_weights(src.session.query(Enzyme).all())
        src.normalize_kinetic_laws(ids)

        # 11021, one subunit
        law = src.session.query(KineticLaw).filter_by(id=11021).first()
        self.assertEqual(len(law.enzyme.subunits), 1)
        self.assertEqual(len(law.enzyme.subunits[0].cross_references), 1)
        self.assertEqual(law.enzyme.subunits[0].cross_references[0].namespace,
                         'uniprot')
        self.assertEqual(law.enzyme.subunits[0].cross_references[0].id,
                         'P19631')
        self.assertEqual(law.enzyme.subunits[0].coefficient, 2)
        self.assertEqual(
            law.enzyme.subunits[0].sequence,
            ('STAGKVIKCKAAVLWEANKPFSLEEVEVAPPKAHEVRIKIVATGICRSDDHVVTGALAMP'
             'FPVILGHEAAGVVESVGEKVTLLKPGDAVIPLFVPQCGECRSCLSTKGNLCIKNDLSSSP'
             'TGLMADGTTRFTCKGKAIHHFIGTSTFTEYTVVHETAAAKIDSAAPLEKVCLIGCGFSTG'
             'YGAVLQTAKVEPGSTCAVFGLGGVGLSVVMGCKAAGASRIIAIDINKDKFAKAKELGATE'
             'CVNPKDFKKPIHEVLTEMTGKGVDYSFEVIGRIETMTEALASCHYNYGVSVIVGVPPAAQ'
             'KISFDPMLIFSGRTWKGSVFGGWKSKDAVPKLVADYMKKKFVLDPLITHTLPFTKINEGF'
             'DLLRTGKSIRTVLVL'))
        numpy.testing.assert_approx_equal(
            law.enzyme.subunits[0].molecular_weight, 39810, significant=3)
        self.assertEqual(law.enzyme.cross_references, [])

        # 2139, two subunits
        law = src.session.query(KineticLaw).filter_by(id=2139).first()
        self.assertEqual(len(law.enzyme.subunits), 2)

        subunit = next(subunit for subunit in law.enzyme.subunits
                       if subunit.cross_references[0].id == 'P07677')
        self.assertEqual(len(subunit.cross_references), 1)
        self.assertEqual(subunit.cross_references[0].namespace, 'uniprot')
        self.assertEqual(subunit.cross_references[0].id, 'P07677')
        self.assertEqual(subunit.coefficient, 1)
        self.assertEqual(
            subunit.sequence,
            ('MTRGRVIQVMGPVVDVKFENGHLPAIYNALKIQHKARNENEVDIDLTLEVALHLGDDTVR'
             'TIAMASTDGLIRGMEVIDTGAPISVPVGQVTLGRVFNVLGEPIDLEGDIPADARRDPIHR'
             'PAPKFEELATEVEILETGIKVVDLLAPYIKGGKIGLFGGAGVGKTVLIQELIHNIAQEHG'
             'GISVFAGVGERTREGNDLYHEMKDSGVISKTAMVFGQMNEPPGARMRVALTGLTMAEYFR'
             'DEQGQDGLLFIDNIFRFTQAGSEVSALLGRMPSAIGYQPTLATEMGQLQERITSTAKGSI'
             'TSIQAIYVPADDYTDPAPATTFSHLDATTNLERKLAEMGIYPAVDPLVSTSRALAPEIVG'
             'EEHYQVARKVQQTLERYKELQDIIAILGMDELSDEDKLVVHRARRIQFFLSQNFHVAEQF'
             'TGQPGSYVPVKETVRGFKEILEGKYDHLPEDRFRLVGRIEEVVEKAKAMGVEV'))
        numpy.testing.assert_approx_equal(subunit.molecular_weight,
                                          51950,
                                          significant=3)

        subunit = next(subunit for subunit in law.enzyme.subunits
                       if subunit.cross_references[0].id == 'P09219')
        self.assertEqual(len(subunit.cross_references), 1)
        self.assertEqual(subunit.cross_references[0].namespace, 'uniprot')
        self.assertEqual(subunit.cross_references[0].id, 'P09219')
        self.assertEqual(subunit.coefficient, 1)
        self.assertEqual(
            subunit.sequence,
            ('MSIRAEEISALIKQQIENYESQIQVSDVGTVIQVGDGIARAHGLDNVMSGEAVEFANAVM'
             'GMALNLEENNVGIVILGPYTGIKEGDEVRRTGRIMEVPVGETLIGRVVNPLGQPVDGLGP'
             'VETTETRPIESRAPGVMDRRSVHEPLQTGIKAIDALVPIGRGQRELIIGDRQTGKTSVAI'
             'DTIINQKDQNMICIYVAIGQKESTVATVVETLAKHGAPDYTIVVTASASQPAPLLFLAPY'
             'AGVAMGEYFMIMGKHVLVVIDDLSKQAAAYRQLSLLLRRPPGREAYPGDIFYLHSRLLER'
             'AAKLSDAKGGGSLTALPFVETQAGDISAYIPTNVISITDGQIFLQSDLFFSGVRPAINAG'
             'LSVSRVGGAAQIKAMKKVAGTLRLDLAAYRELEAFAQFGSDLDKATQANVARGARTVEVL'
             'KQDLHQPIPVEKQVLIIYALTRGFLDDIPVEDVRRFEKEFYLWLDQNGQHLLEHIRTTKD'
             'LPNEDDLNQAIEAFKKTFVVSQ'))
        numpy.testing.assert_approx_equal(subunit.molecular_weight,
                                          54600,
                                          significant=3)

        self.assertEqual(law.enzyme.cross_references, [])

        # 1645, one subunit not in SBML
        law = src.session.query(KineticLaw).filter_by(id=1645).first()
        self.assertEqual(len(law.enzyme.subunits), 1)
        self.assertEqual(len(law.enzyme.subunits[0].cross_references), 1)
        self.assertEqual(law.enzyme.subunits[0].cross_references[0].namespace,
                         'uniprot')
        self.assertEqual(law.enzyme.subunits[0].cross_references[0].id,
                         'Q70GK9')
        self.assertEqual(law.enzyme.subunits[0].coefficient, 1)
        self.assertEqual(law.enzyme.cross_references, [])
Пример #16
0
    def test_parse_complex_subunit_structure(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '(<a href="http://www.uniprot.org/uniprot/Q59669" target="_blank">Q59669</a>)'
            )), {'Q59669': 1})

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '(<a href="http://www.uniprot.org/uniprot/Q59669" target="_blank">Q59669</a>)*2'
            )), {'Q59669': 2})

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '('
                '(<a href="http://www.uniprot.org/uniprot/Q59669" target="_blank">Q59669</a>)'
                '(<a href="http://www.uniprot.org/uniprot/Q59670" target="_blank">Q59670</a>)'
                ')')), {
                    'Q59669': 1,
                    'Q59670': 1
                })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '('
                '(<a href="http://www.uniprot.org/uniprot/Q59669" target="_blank">Q59669</a>)*2'
                '(<a href="http://www.uniprot.org/uniprot/Q59670" target="_blank">Q59670</a>)*3'
                ')*4')), {
                    'Q59669': 8,
                    'Q59670': 12
                })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '('
                '(<a href="http://www.uniprot.org/uniprot/Q59669" target="_blank">Q59669</a>)'
                '(<a href="http://www.uniprot.org/uniprot/Q59670" target="_blank">Q59670</a>)*2'
                ')*3')), {
                    'Q59669': 3,
                    'Q59670': 6
                })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '<a href="http://www.uniprot.org/uniprot/P09219" target=_blank>P09219</a>; '
                '<a href="http://www.uniprot.org/uniprot/P07677" target=_blank>P07677</a>; '
            )), {
                'P09219': 1,
                'P07677': 1
            })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '<a href="http://www.uniprot.org/uniprot/P09219" target=_blank>P09219</a>; '
                '<a href="http://www.uniprot.org/uniprot/P07677" target=_blank>P07677</a>; '
            )), {
                'P09219': 1,
                'P07677': 1
            })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '(<a href="http://www.uniprot.org/uniprot/P19112" target=_blank>P19112</a>)*4; '
                '<a href="http://www.uniprot.org/uniprot/Q9Z1N1" target=_blank>Q9Z1N1</a>; '
            )), {
                'P19112': 4,
                'Q9Z1N1': 1
            })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '((<a href="http://www.uniprot.org/uniprot/P16924" target="_blank">P16924</a>)*2'
                '(<a href="http://www.uniprot.org/uniprot/P09102" target="_blank">P09102</a>)*2); '
                '((<a href="http://www.uniprot.org/uniprot/Q5ZLK5" target="_blank">Q5ZLK5</a>)*2'
                '(<a href="http://www.uniprot.org/uniprot/P09102" target="_blank">P09102</a>)*2);'
            )), {
                'P16924': 2,
                'P09102': 4,
                'Q5ZLK5': 2
            })

        self.assertEqual(
            src.parse_complex_subunit_structure((
                '((<a href="http://www.uniprot.org/uniprot/Q03393" target=_blank>Q03393</a>)*3)*2); '
            )), {'Q03393': 6})
Пример #17
0
    def test_infer_compound_structures_from_names(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False)

        session = src.session

        compound_unknown = sabio_rk.Compound(name='Unknown')
        compound_no_pubchem = sabio_rk.Compound(
            name='a random string: adfkja;uvhayocbvadf')
        compound_one_pubchem = sabio_rk.Compound(name='water')
        compound_multiple_pubchem = sabio_rk.Compound(name='Aspartate')
        session.add(compound_unknown)
        session.add(compound_no_pubchem)
        session.add(compound_one_pubchem)
        session.add(compound_multiple_pubchem)

        compounds = [
            compound_unknown, compound_no_pubchem, compound_one_pubchem,
            compound_multiple_pubchem
        ]
        src.infer_compound_structures_from_names(compounds)

        self.assertEqual(compound_unknown.cross_references, [])
        self.assertEqual(compound_unknown.structures, [])

        self.assertEqual(compound_no_pubchem.cross_references, [])
        self.assertEqual(compound_no_pubchem.structures, [])

        self.assertEqual(
            set([(xr.namespace, xr.id)
                 for xr in compound_one_pubchem.cross_references]),
            set([
                ('pubchem.compound', '962'),
            ]))
        self.assertEqual(
            set([(s.format, s.value)
                 for s in compound_one_pubchem.structures]),
            set([
                ('inchi', 'InChI=1S/H2O/h1H2'),
            ]))

        self.assertEqual(
            set([(xr.namespace, xr.id)
                 for xr in compound_multiple_pubchem.cross_references]),
            set([
                ('pubchem.compound', '5960'),
                ('pubchem.compound', '5460541'),
                ('pubchem.compound', '5460294'),
            ]))
        self.assertEqual(
            set([(s.format, s.value)
                 for s in compound_multiple_pubchem.structures]),
            set([
                ('inchi',
                 'InChI=1S/C4H7NO4/c5-2(4(8)9)1-3(6)7/h2H,1,5H2,(H,6,7)(H,8,9)/t2-/m0/s1'
                 ),
                ('inchi',
                 'InChI=1S/C4H7NO4/c5-2(4(8)9)1-3(6)7/h2H,1,5H2,(H,6,7)(H,8,9)/p-2/t2-/m0/s1'
                 ),
                ('inchi',
                 'InChI=1S/C4H7NO4/c5-2(4(8)9)1-3(6)7/h2H,1,5H2,(H,6,7)(H,8,9)/p-1/t2-/m0/s1'
                 ),
            ]))
Пример #18
0
 def test_export_stats(self):
     src = sabio_rk.SabioRk()
     stats = src.calc_stats()
     filename = os.path.join(self.dirname, 'stats.xlsx')
     src.export_stats(stats, filename=filename)
     self.assertTrue(os.path.isfile(filename))
Пример #19
0
 def test_download_full_database(self):
     src = sabio_rk.SabioRk(cache_dirname=self.dirname,
                            download_backups=True,
                            load_content=False,
                            verbose=True)
     self.assertGreaterEqual(src.session.query(KineticLaw).count(), 55000)
Пример #20
0
    def build_sabio(self):
        """
        Collects SabioRK.sqlite file and integrates its data into the common ORM

        """

        t0 = time.time()
        sabiodb = sabio_rk.SabioRk(
            cache_dirname=self.cache_dirname, verbose=self.verbose)
        sabio_ses = sabiodb.session
        batch = SABIO_TEST_BATCH if self.test else SABIO_BUILD_BATCH
        sabio_progress = self.session.query(
            models.Progress).filter_by(database_name=SABIO_NAME).first()
        load_count = sabio_progress.amount_loaded

        if self.max_entries == float('inf'):
            sabio_entry = sabio_ses.query(sabio_rk.Entry)
        else:
            sabio_entry = sabio_ses.query(sabio_rk.Entry).filter(sabio_rk.Entry._id.in_
                                                                 (range(load_count, load_count + batch)))

        for item in sabio_entry:
            metadata = self.get_or_create_object(models.Metadata, name='Kinetic Law ' + str(
                item.id)) if item._type == 'kinetic_law' else self.get_or_create_object(models.Metadata, name=item.name)
            metadata.synonym = [self.get_or_create_object(
                models.Synonym, name=synonyms.name) for synonyms in item.synonyms]
            metadata.taxon = [self.get_or_create_object(
                models.Taxon, ncbi_id=docs.id) for docs in item.cross_references if docs.namespace == 'taxonomy']
            uniprot = [
                docs.id for docs in item.cross_references if docs.namespace == 'uniprot']
            metadata.resource = [self.get_or_create_object(
                models.Resource, namespace=docs.namespace, _id=docs.id) for docs in item.cross_references]
            compartment = self.get_or_create_object(
                models.CellCompartment, name=item.name) if item._type == 'compartment' else None
            if compartment:
                continue

            if item._type == 'compound':
                structure = None
                for struct in item.structures:
                    structure = self.get_or_create_object(models.Structure, type='Structure', name=item.name,
                                                          _value_smiles=struct.value, _value_inchi=struct._value_inchi,
                                                          _structure_formula_connectivity=struct._value_inchi_formula_connectivity, _metadata=metadata)\
                        if struct.format == 'smiles' else None

                self.entity.metabolite = self.get_or_create_object(models.Metabolite, type='Metabolite',
                                                                 name=item.name, metabolite_name=item.name,
                                                                 _is_name_ambiguous=sabio_ses.query(
                                                                     sabio_rk.Compound).get(item._id)._is_name_ambiguous,
                                                                 structure=structure, _metadata=metadata)
                continue

            elif item._type == 'enzyme':
                complx = sabio_ses.query(sabio_rk.Enzyme).get(item._id)
                self.entity.protein_complex = self.get_or_create_object(models.ProteinComplex, type='Enzyme',
                                                                        name=item.name, complex_name=item.name,
                                                                        molecular_weight=item.molecular_weight, funcat_dsc='Enzyme', _metadata=metadata)
                continue

            elif item._type == 'enzyme_subunit':
                result = self.session.query(models.ProteinComplex).filter_by(
                    complex_name=item.enzyme.name).first()
                self.entity.protein_subunit = self.get_or_create_object(models.ProteinSubunit, type='Enzyme Subunit',
                                                                        name=item.name, subunit_name=item.name,
                                                                        uniprot_id=uniprot, coefficient=item.coefficient,
                                                                        molecular_weight=item.molecular_weight,
                                                                        proteincomplex=result, _metadata=metadata)
                continue

            elif item._type == 'kinetic_law':

                catalyst = self.session.query(models.ProteinComplex).filter_by(
                    complex_name=item.enzyme.name).first() if item.enzyme_id else None
                metadata.resource.extend([self.get_or_create_object(
                    models.Resource, namespace=resource.namespace, _id=resource.id) for resource in item.references])
                metadata.taxon.append(self.get_or_create_object(
                    models.Taxon, ncbi_id=item.taxon))
                metadata.cell_line.append(self.get_or_create_object(
                    models.CellLine, name=item.taxon_variant))
                metadata.conditions.append(self.get_or_create_object(
                    models.Conditions, temperature=item.temperature, ph=item.ph, media=item.media))
                self.property.kinetic_law = self.get_or_create_object(models.KineticLaw, type='Kinetic Law', enzyme=catalyst,
                                                                      enzyme_type=item.enzyme_type, tissue=item.tissue, mechanism=item.mechanism, equation=item.equation, _metadata=metadata)

                def common_schema_metabolite(sabio_object):
                    metabolite_name = sabio_object.name
                    return self.session.query(models.Metabolite).filter_by(metabolite_name=metabolite_name).first()

                def common_schema_compartment(sabio_object):
                    if sabio_object:
                        compartment_name = sabio_object.name
                        return self.session.query(models.CellCompartment).filter_by(name=compartment_name).first()
                    else:
                        return None

                reactants = [models.Reaction(metabolite=common_schema_metabolite(r.compound),
                                             compartment=common_schema_compartment(r.compartment), _is_reactant=1, rxn_type=r.type,
                                             kinetic_law=self.property.kinetic_law) for r in item.reactants if item.reactants]

                products = [models.Reaction(metabolite=common_schema_metabolite(p.compound),
                                            compartment=common_schema_compartment(p.compartment), _is_product=1, rxn_type=p.type,
                                            kinetic_law=self.property.kinetic_law) for p in item.products if item.products]

                modifier = [models.Reaction(metabolite=common_schema_metabolite(m.compound),
                                            compartment=common_schema_compartment(m.compartment), _is_modifier=1, rxn_type=m.type,
                                            kinetic_law=self.property.kinetic_law) for m in item.modifiers if item.products]

                for param in item.parameters:
                    parameter = models.Parameter(sabio_type=param.type, value=param.value, error=param.error,
                                                 units=param.units, observed_name=param.observed_name, kinetic_law=self.property.kinetic_law,
                                                 observed_sabio_type=param.observed_type, observed_value=param.observed_value,
                                                 observed_error=param.observed_error, observed_units=param.observed_units)
                    parameter.metabolite = common_schema_metabolite(
                        param.compound) if param.compound else None
                continue

        sabio_progress.amount_loaded = load_count + batch

        self.vprint('Comitting')
        self.session.commit()
Пример #21
0
    def test_load_kinetic_laws_and_compounds(self):
        src = sabio_rk.SabioRk(cache_dirname=self.cache_dirname,
                               download_backups=False,
                               load_content=False,
                               verbose=True)
        src.load_kinetic_laws([1])

        session = src.session
        """ compartments """
        q = session.query(Compartment).filter_by(name='Cell')
        self.assertEqual(q.count(), 0)
        """ compounds """
        c = session.query(Compound).filter_by(id=40).first()
        self.assertEqual(c.name, 'H2O')
        xrs = [
            dict(namespace=xr.namespace, id=xr.id) for xr in c.cross_references
        ]
        self.assertEqual(sorted(xrs, key=lambda xr: xr['namespace']), [
            dict(namespace='chebi', id='CHEBI:15377'),
            dict(namespace='kegg.compound', id='C00001'),
        ])

        self.assertIsInstance(c.created, datetime.datetime)
        self.assertIsInstance(c.modified, datetime.datetime)
        self.assertLess(
            (datetime.datetime.utcnow() - c.created).total_seconds(), 3600)
        self.assertLess(
            (datetime.datetime.utcnow() - c.modified).total_seconds(), 3600)
        h20_created = c.created

        c = session.query(Compound).filter_by(id=2562).first()
        self.assertEqual(c.name, 'm n n+m Peptide')
        xrs = [
            dict(namespace=xr.namespace, id=xr.id) for xr in c.cross_references
        ]
        self.assertEqual(sorted(xrs, key=lambda xr: xr['namespace']), [
            dict(namespace='chebi', id='CHEBI:16670'),
            dict(namespace='kegg.compound', id='C00012'),
        ])

        c = session.query(Compound).filter_by(id=20035).first()
        self.assertEqual(c.name,
                         'N-(Carbobenzoxy)-Leu-Leu-Phe-trifluoromethylketone')
        self.assertEqual(c.cross_references, [])
        """ enzymes """
        e = session.query(Enzyme).filter_by(id=147631).first()
        self.assertEqual(e.name, 'subtilisin')
        self.assertEqual(e.subunits, [])
        self.assertEqual(e.cross_references, [])
        """ reactions """
        law = session.query(KineticLaw).filter_by(id=1).first()
        cpd_40 = session.query(Compound).filter_by(id=40).first()
        cpd_2562 = session.query(Compound).filter_by(id=2562).first()
        cpd_20035 = session.query(Compound).filter_by(id=20035).first()
        enz_147631 = session.query(Enzyme).filter_by(id=147631).first()

        self.assertEqual(
            next(xr.id for xr in law.cross_references
                 if xr.namespace == 'sabiork.reaction'), '6570')

        self.assertEqual(len(law.reactants), 2)
        self.assertEqual(law.reactants[0].compound, cpd_2562)
        self.assertEqual(law.reactants[0].compartment, None)
        self.assertTrue(law.reactants[0].coefficient is None
                        or math.isnan(law.reactants[0].coefficient))
        self.assertEqual(law.reactants[1].compound, cpd_40)
        self.assertEqual(law.reactants[1].coefficient, 1.)
        self.assertEqual(law.reactants[1].compartment, None)

        self.assertEqual(len(law.products), 2)
        self.assertEqual(law.products[0].compound, cpd_2562)
        self.assertEqual(law.products[1].compound, cpd_2562)
        self.assertEqual(law.products[0].compartment, None)
        self.assertEqual(law.products[1].compartment, None)
        self.assertTrue(law.products[0].coefficient is None
                        or math.isnan(law.products[0].coefficient))
        self.assertTrue(law.products[1].coefficient is None
                        or math.isnan(law.products[1].coefficient))

        self.assertEqual([(r.compound, r.coefficient) for r in law.modifiers],
                         [
                             (cpd_20035, None),
                         ])

        for mod in law.modifiers:
            self.assertEqual(mod.modifier_kinetic_law, law)
        """ kinetic laws """
        l = session.query(KineticLaw).filter_by(id=1).first()
        self.assertEqual(l.enzyme, enz_147631)
        self.assertEqual(l.enzyme_compartment, None)
        self.assertEqual(l.equation, None)
        self.assertEqual([
            dict(namespace=xr.namespace, id=xr.id) for xr in l.cross_references
        ], [
            dict(namespace='ec-code', id='3.4.21.62'),
            dict(namespace='sabiork.reaction', id='6570'),
        ])

        self.assertEqual(len(l.parameters), 4)

        p = session.query(Parameter).filter_by(
            kinetic_law=l, observed_name='kcat/Km').first()
        self.assertEqual(p.compound, cpd_2562)
        self.assertEqual(p.compartment, None)
        self.assertEqual(p.observed_type, 302)
        self.assertEqual(p.observed_value, 120000.)
        self.assertEqual(p.observed_error, None)
        self.assertEqual(p.observed_units, 'M^(-1)*s^(-1)')
        self.assertEqual(p.name, None)
        self.assertEqual(p.type, None)
        self.assertEqual(p.value, None)
        self.assertEqual(p.error, None)
        self.assertEqual(p.units, None)

        p = session.query(Parameter).filter_by(kinetic_law=l,
                                               observed_name='kcat').first()
        self.assertEqual(p.compound, None)
        self.assertEqual(p.compartment, None)
        self.assertEqual(p.observed_type, 25)
        self.assertEqual(p.observed_value, 220.)
        self.assertEqual(p.observed_error, None)
        self.assertEqual(p.observed_units, 's^(-1)')

        p = session.query(Parameter).filter_by(kinetic_law=l,
                                               observed_name='Ki').first()
        self.assertEqual(p.compound, cpd_20035)
        self.assertEqual(p.compartment, None)
        self.assertEqual(p.observed_type, 261)
        self.assertEqual(p.observed_value, 1.8E-8)
        self.assertEqual(p.observed_error, None)
        self.assertEqual(p.observed_units, 'M')

        p = session.query(Parameter).filter_by(kinetic_law=l,
                                               observed_name='Km').first()
        self.assertEqual(p.compound, cpd_2562)
        self.assertEqual(p.compartment, None)
        self.assertEqual(p.observed_type, 27)
        self.assertEqual(p.observed_value, 0.0019)
        self.assertEqual(p.observed_error, None)
        self.assertEqual(p.observed_units, 'M')

        self.assertEqual(l.taxon, 1467)
        self.assertEqual(l.taxon_wildtype, True)
        self.assertEqual(l.taxon_variant,
                         'variant DSAI (N76D/N87S/S103A/V104I)')
        self.assertEqual(l.temperature, 25.0)
        self.assertEqual(l.ph, 7.5)
        self.assertEqual(l.media, '50 mM potassium phosphate, 4 % DMSO')
        self.assertEqual(
            [dict(n=ref.namespace, i=ref.id) for ref in l.references],
            [dict(n='pubmed', i='12962477')])
        for ref in l.references:
            self.assertIn(l, ref.kinetic_laws)

        # download compounds
        src.load_compounds()
        c = session.query(Compound).filter_by(id=40).first()
        self.assertEqual(c.name, 'H2O')
        self.assertEqual(c._is_name_ambiguous, False)
        self.assertEqual([s.name for s in c.synonyms], ['Water'])
        self.assertEqual(c.get_inchi_structures(), ['InChI=1S/H2O/h1H2'])
        self.assertEqual(c.get_smiles_structures(), ['[H]O[H]'])
        xrs = [
            dict(namespace=xr.namespace, id=xr.id) for xr in c.cross_references
        ]
        self.assertNotIn(
            dict(namespace='None', id='View all entries for compound H2O'),
            xrs)
        self.assertIn(dict(namespace='chebi', id='CHEBI:15377'), xrs)
        self.assertIn(dict(namespace='kegg.compound', id='C00001'), xrs)
        self.assertIn(dict(namespace='pubchem.substance', id='3303'), xrs)

        self.assertEqual(c.created, h20_created)
        self.assertIsInstance(c.modified, datetime.datetime)
        self.assertLess(
            (datetime.datetime.utcnow() - c.modified).total_seconds(), 3600)