In [1]:
from biothings_explorer.hint import Hint
from biothings_explorer.user_query_dispatcher import FindConnection
In [2]:
ht = Hint()
ace2 = ht.query("ACE2")['Gene'][0]
ace2
Out[2]:
{'entrez': '59272',
'name': 'angiotensin I converting enzyme 2',
'symbol': 'ACE2',
'taxonomy': 9606,
'umls': 'C1422064',
'uniprot': 'Q9BYF1',
'hgnc': '13557',
'display': 'entrez(59272) name(angiotensin I converting enzyme 2) symbol(ACE2) taxonomy(9606) umls(C1422064) uniprot(Q9BYF1) hgnc(13557) ',
'type': 'Gene',
'primary': {'identifier': 'entrez', 'cls': 'Gene', 'value': '59272'}}
In [3]:
fc = FindConnection(input_obj=ace2,
output_obj='DiseaseOrPhenotypicFeature',
intermediate_nodes='ChemicalSubstance')
In [4]:
fc.connect(verbose=True)
==========
========== QUERY PARAMETER SUMMARY ==========
==========
BTE will find paths that join 'ACE2' and 'DiseaseOrPhenotypicFeature'. Paths will have 1 intermediate node.
Intermediate node #1 will have these type constraints: ChemicalSubstance
========== QUERY #1 -- fetch all ChemicalSubstance entities linked to ACE2 ==========
==========
==== Step #1: Query path planning ====
Because ACE2 is of type 'Gene', BTE will query our meta-KG for APIs that can take 'Gene' as input
BTE found 3 apis:
API 1. mychem.info(3 API calls)
API 2. semmedgene(1 API call)
API 3. dgidb_gene2chemical(1 API call)
==== Step #2: Query path execution ====
NOTE: API requests are dispatched in parallel, so the list of APIs below is ordered by query time.
API 1.1: http://mychem.info/v1/query (POST "q=ACE2&scopes=drugbank.enzymes.gene_name&fields=drugbank.id&species=human&size=100")
API 1.3: http://mychem.info/v1/query (POST "q=ACE2&scopes=drugcentral.bioactivity.uniprot.gene_symbol&fields=chembl.molecule_chembl_id&species=human&size=100")
API 1.2: http://mychem.info/v1/query (POST "q=ACE2&scopes=drugbank.targets.gene_name&fields=drugbank.id&species=human&size=100")
API 3.1: http://www.dgidb.org/api/v2/interactions.json?genes=ACE2
API 2.1: https://pending.biothings.io/semmedgene/query (POST "q=C1422064&scopes=umls&fields=interacts_with_reverse.chemical_substance,associated_with_reverse.chemical_substance,interacts_with.chemical_substance,associated_with.chemical_substance,affects_reverse.chemical_substance,affects.chemical_substance&species=human&size=100")
==== Step #3: Output normalization ====
API 3.1 dgidb_gene2chemical: 4 hits
API 1.1 mychem.info: No hits
API 1.2 mychem.info: 2 hits
API 1.3 mychem.info: 2 hits
API 2.1 semmedgene: 19 hits
After id-to-object translation, BTE retrieved 26 unique objects.
========== QUERY #2.1 -- fetch all DiseaseOrPhenotypicFeature entities linked to ChemicalSubstance entites ==========
==========
==== Step #1: Query path planning ====
Because the inputs is of type 'ChemicalSubstance', BTE will query our meta-KG for APIs that can take 'ChemicalSubstance' as input
BTE found 3 apis:
API 1. mychem.info(1 API call)
API 2. mydisease.info(1 API call)
API 3. semmeddisease(5 API calls)
==== Step #2: Query path execution ====
NOTE: API requests are dispatched in parallel, so the list of APIs below is ordered by query time.
API 3.1: http://pending.biothings.io/semmed/query (POST "q=C0608663,C0309049,C0065556,C0017725,C0248719,C0014027,C0684162,C0772162,C0065374,C0003015,C1314787,C0006674,C0058206,C1257987,C0016384,C0036860,C0012854,C0014939,C1098320,C0286651,C0001962,C0682921,C0066685&scopes=AFFECTS.chemical_substance.umls&fields=umls&species=human&size=100")
API 2.1: http://mydisease.info/v1/query (POST "q=C058302,D000069059,C084178,D005485,D002117,C065179,D015773,D005947,D017706,D000431,D012721&scopes=ctd.chemical_related_to_disease.mesh_chemical_id&fields=mondo.xrefs.mesh,disgenet.xrefs.mesh&species=human&size=100")
API 1.1: http://mychem.info/v1/query (POST "q=CHEMBL1165,CHEMBL1614854,CHEMBL260273,CHEMBL429844,CHEMBL46917,CHEMBL1487,CHEMBL846,CHEMBL806,CHEMBL577,CHEMBL1237,CHEMBL1017,CHEMBL545&scopes=chembl.molecule_chembl_id&fields=drugcentral.drug_use.contraindication,drugcentral.drug_use.indication&species=human&size=100")
API 3.4: http://pending.biothings.io/semmed/query (POST "q=C0608663,C0309049,C0065556,C0017725,C0248719,C0014027,C0684162,C0772162,C0065374,C0003015,C1314787,C0006674,C0058206,C1257987,C0016384,C0036860,C0012854,C0014939,C1098320,C0286651,C0001962,C0682921,C0066685&scopes=ASSOCIATED_WITH_reverse.chemical_substance.umls&fields=umls&species=human&size=100")
API 3.5: http://pending.biothings.io/semmed/query (POST "q=C0608663,C0309049,C0065556,C0017725,C0248719,C0014027,C0684162,C0772162,C0065374,C0003015,C1314787,C0006674,C0058206,C1257987,C0016384,C0036860,C0012854,C0014939,C1098320,C0286651,C0001962,C0682921,C0066685&scopes=TREATS_reverse.chemical_substance.umls&fields=umls&species=human&size=100")
API 3.3: http://pending.biothings.io/semmed/query (POST "q=C0608663,C0309049,C0065556,C0017725,C0248719,C0014027,C0684162,C0772162,C0065374,C0003015,C1314787,C0006674,C0058206,C1257987,C0016384,C0036860,C0012854,C0014939,C1098320,C0286651,C0001962,C0682921,C0066685&scopes=ASSOCIATED_WITH.chemical_substance.umls&fields=umls&species=human&size=100")
API 3.2: http://pending.biothings.io/semmed/query (POST "q=C0608663,C0309049,C0065556,C0017725,C0248719,C0014027,C0684162,C0772162,C0065374,C0003015,C1314787,C0006674,C0058206,C1257987,C0016384,C0036860,C0012854,C0014939,C1098320,C0286651,C0001962,C0682921,C0066685&scopes=AFFECTS_reverse.chemical_substance.umls&fields=umls&species=human&size=100")
==== Step #3: Output normalization ====
API 1.1 mychem.info: 181 hits
API 2.1 mydisease.info: 7 hits
API 3.1 semmeddisease: 1 hits
API 3.2 semmeddisease: 1022 hits
API 3.3 semmeddisease: 1 hits
API 3.4 semmeddisease: 540 hits
API 3.5 semmeddisease: 1215 hits
After id-to-object translation, BTE retrieved 1759 unique objects.
==========
========== Final assembly of results ==========
==========
In the #1 query, BTE found 26 unique ChemicalSubstance nodes
In the #2 query, BTE found 1759 unique DiseaseOrPhenotypicFeature nodes
In [6]:
output = fc.to_graphml('test.graphml')
graphml file has been saved at test.graphml
In [ ]:
Content source: biothings/biothings_explorer
Similar notebooks: