コード例 #1
0
 def term_to_term(self,node_a,node_b,limit = 10000):
     """Given two diseases, check the co-occurrence """
     icd9_a = list(filter( lambda x: x.startswith('ICD9'), node_a.synonyms ) )
     icd9_b = list(filter( lambda x: x.startswith('ICD9'), node_b.synonyms ) )
     if (len(icd9_a) == 0)  or (len(icd9_b) == 0):
         #can't do co-occurence unless we get icd9 codes
         return
     co_occurrences = []
     for icd9a_curie in icd9_a:
         icd9a = Text.un_curie(icd9a_curie)
         if icd9a not in self.icd9_codes:
             logging.getLogger('application').debug('Dont have data for {}'.format(icd9a))
             continue
         for icd9b_curie in icd9_b:
             icd9b = Text.un_curie(icd9b_curie)
             if icd9b not in self.icd9_codes:
                 logging.getLogger('application').debug('Dont have data for {}'.format(icd9b))
                 continue
             #Now we have nodes that both have ICD9 codees and the both map to our results!
             k = (icd9a, icd9b)
             if k not in self.icd9_paircounts:
                 #There were less than 11 shared counts.
                 counta = self.icd9_codes[icd9a]
                 countb = self.icd9_codes[icd9b]
                 expected = float(counta) * float(countb) / self.total
                 co_occurrences.append( (k, {'c1': counta, 'c2': countb, 'c': '<11', 'e': expected, 'p':None}) )
             else:
                 co_occurrences.append( (k, self.icd9_paircounts[k] ) )
     if len(co_occurrences) > 0:
         return self.make_edge(co_occurrences, node_a, node_b)
     return None
コード例 #2
0
 def go_term_to_cell_xontology_relationships(self, go_node):
     #This call is not paged!
     url = "{0}/QuickGO/services/ontology/go/terms/GO:{1}/xontologyrelations".format(
         self.url, Text.un_curie(go_node.id))
     response = self.query(url)
     if 'results' not in response:
         return []
     results = []
     for r in response['results']:
         if 'xRelations' in r:
             for xrel in r['xRelations']:
                 if xrel['id'].startswith('CL:'):
                     predicate = self.get_predicate(xrel['relation'])
                     if predicate is None:
                         continue
                     cell_node = KNode(xrel['id'],
                                       type=node_types.CELL,
                                       name=xrel['term'])
                     edge = self.create_edge(
                         go_node,
                         cell_node,
                         'quickgo.go_term_to_cell_xontology_relationships',
                         go_node.id,
                         predicate,
                         url=url)
                     results.append((edge, cell_node))
     return results
コード例 #3
0
 async def get_inchikey_data(self, inchikey_id):
     conf = self.get_prefix_config('INCHIKEY')
     inchikey_c_id = Text.un_curie(inchikey_id) 
     url = conf['url'] + inchikey_c_id
     response = await self.async_get_text(url)
     inchikey_dict = self.parse_flat_file_to_dict(response)
     return self.extract_inchikey_data(inchikey_dict, conf['keys'])
コード例 #4
0
 async def get_kegg_data(self, kegg_id):
     conf = self.get_prefix_config('KEGG.COMPOUND')
     kegg_c_id = Text.un_curie(kegg_id)
     url = conf['url'] + kegg_c_id 
     response = await self.async_get_text(url)
     kegg_dict = self.parse_flat_file_to_dict(response)
     return self.extract_kegg_data(kegg_dict, conf['keys'])
コード例 #5
0
 def drug_get_gene(self, subject):
     """ Get a gene from a drug. """
     resolved_edge_nodes = []
     identifiers = subject.get_synonyms_by_prefix('CHEMBL.COMPOUND')
     for s in identifiers:
         pharosid = Text.un_curie(s)
         original_edge_nodes = []
         url = 'https://pharos.nih.gov/idg/api/v1/ligands(%s)?view=full' % pharosid
         r = requests.get(url)
         try: 
             result = r.json()
         except:
             #Pharos returns a 404 if it doesn't recognize the identifier, which ends up producing
             # errors in turning into json. Skip to next identifier
             continue
         actions = set()  # for testing
         predicate = LabeledID(identifier='PHAROS:drug_targets', label='is_target')
         for link in result['links']:
             if link['kind'] == 'ix.idg.models.Target':
                 pharos_target_id = int(link['refid'])
                 hgnc = self.target_to_hgnc(pharos_target_id)
                 if hgnc is not None:
                     hgnc_node = KNode(hgnc, type=node_types.GENE)
                     edge = self.create_edge(subject,hgnc_node,'pharos.drug_get_gene',pharosid,predicate,url=url)
                     resolved_edge_nodes.append((edge, hgnc_node))
                 else:
                     logging.getLogger('application').warn('Did not get HGNC for pharosID %d' % pharos_target_id)
     return resolved_edge_nodes
コード例 #6
0
 def execute(self):
     """Execute the query that defines the graph"""
     self.logger.debug('Executing Query')
     #GreenT wants a cypherquery to find transitions, and a starting point
     cyphers  = self.userquery.generate_cypher()
     starts   = self.userquery.get_start_node()
     reverses = self.userquery.get_reversed()
     lookups  = self.userquery.get_lookups()
     for cypher, start, reverse,lookup in zip(cyphers,starts,reverses,lookups):
         input_name = Text.un_curie(lookup.identifier)
         self.logger.debug(start)
         self.logger.debug('CYPHER')
         self.logger.debug(cypher)
         identifier, ntype = start
         start_node = KNode( identifier, ntype, label=input_name )
         kedge = KEdge( 'lookup', 'lookup' )
         kedge.source_node = lookup
         kedge.target_node = start_node
         self.add_nonsynonymous_edge( kedge )
         #Fire this to rosetta, collect the result
         result_graph = self.rosetta.graph([(None, start_node)],query=cypher)
         #result_graph contains duplicate edges.  Remove them, while preserving order:
         result_graph = list(OrderedDict.fromkeys( result_graph ) )
         self.add_edges( result_graph , reverse )
     self.logger.debug('Query Complete')
コード例 #7
0
 def gene_to_drug_expanded(self, gene_node):
     output = []
     identifiers = gene_node.get_synonyms_by_prefix('NCBIGENE')
     for identifier in identifiers:
         unique = set()
         geneid = Text.un_curie(identifier)
         url = f"{self.url}CTD_chem_gene_expanded_geneID/ncbigene:{geneid}/"
         obj = requests.get (url).json ()
         for r in obj:
             good_row, predicate_label, props, pmids = self.check_expanded_gene_chemical_row(r)
             if not good_row:
                 continue
             predicate = self.normalize_predicate(
                 LabeledID(identifier=f"CTD:{Text.snakify(predicate_label)}", label=predicate_label)
             )
             #Should this be substance?
             drug_node = KNode(Text.upper_curie(r['chemicalID']), type=node_types.CHEMICAL_SUBSTANCE, name=r['chem_label'])
             direction = r['direction']
             if direction == '->':
                 subject = drug_node
                 object = gene_node
             else:
                 subject = gene_node
                 object = drug_node
             edge = self.create_edge(subject,object,'ctd.gene_to_drug_expanded',identifier,predicate,properties = props,url=url,publications=pmids)
             #This is what we'd like it to be, but right now there's not enough real specificity on the predicates
             #key = (drug_node.id, edge.standard_predicate.label)
             key = (drug_node.id, edge.original_predicate.label)
             if key not in unique:
                 output.append( (edge,drug_node) )
                 unique.add(key)
     return output
コード例 #8
0
 def gene_to_drug(self, gene_node):
     output = []
     identifiers = gene_node.get_synonyms_by_prefix('NCBIGENE')
     for identifier in identifiers:
         unique = set()
         geneid = Text.un_curie(identifier)
         url = f"{self.url}/CTD_chem_gene_ixns_GeneID/{geneid}/"
         obj = requests.get (url).json ()
         for r in obj:
             if r['GeneID'] != geneid:
                 continue
             good_row, predicate_label, props = self.check_gene_chemical_row(r)
             if not good_row:
                 continue
             predicate = self.normalize_predicate(
                 LabeledID(identifier=f'CTD:{predicate_label}', label=predicate_label)
             )
             #Should this be substance?
             drug_node = KNode(f"MESH:{r['ChemicalID']}", type=node_types.CHEMICAL_SUBSTANCE, name=f"{r['ChemicalName']}")
             if sum([s in predicate.identifier for s in self.g2d_strings]) > 0:
                 subject = gene_node
                 obj = drug_node
             else:
                 subject = drug_node
                 obj = gene_node
             edge = self.create_edge(subject,obj,'ctd.gene_to_drug',identifier,predicate,
                                     publications=[f"PMID:{x}" for x in r['PubMedIDs'].split('|') ],url=url,properties=props)
             #This is what we'd like it to be, but right now there's not enough real specificity on the predicates
             #key = (drug_node.id, edge.standard_predicate.label)
             key = (drug_node.id, edge.original_predicate.label)
             if key not in unique:
                 output.append( (edge,drug_node) )
                 unique.add(key)
     return output
コード例 #9
0
 def disease_get_gene(self, disease_node):
     """ Get a gene from a pharos disease id."""
     resolved_edge_nodes = []
     hgncs = set()
     # WD:P2293 gene assoc with condition.
     # domain is gene and range is disease or phenotype for this relationship
     predicate = LabeledID(identifier='WD:P2293', label='gene_involved')
     #Pharos contains multiple kinds of disease identifiers in its disease table:
     # For OMIM identifiers, they can have either prefix OMIM or MIM
     # UMLS doen't have any prefixes.... :(
     pharos_predicates = {'DOID':('DOID',),'UMLS':(None,),'MESH':('MESH',),'OMIM':('OMIM','MIM'),'ORPHANET':('Orphanet',)}
     for ppred,dbpreds in pharos_predicates.items():
         pharos_candidates = [Text.un_curie(x) for x in disease_node.get_synonyms_by_prefix(ppred)]
         for dbpred in dbpreds:
             if dbpred is None:
                 pharos_ids = pharos_candidates
             else:
                 pharos_ids = [f'{dbpred}:{x}' for x in pharos_candidates]
                 for pharos_id in pharos_ids:
                     cursor = self.db.cursor(dictionary = True, buffered = True)
                     query = f"select distinct x.value, p.sym  from disease d join xref x on x.protein_id = d.target_id join protein p on d.target_id = p.id where x.xtype = 'HGNC' and d.dtype <> 'Expression Atlas' and d.did='{pharos_id}';"
                     cursor.execute(query)
                     for result in cursor:
                         label = result['sym']
                         hgnc = result['value']
                         if hgnc not in hgncs:
                             hgncs.add(hgnc)
                             gene_node = KNode(hgnc, type=node_types.GENE, name=label)
                             edge = self.create_edge(gene_node, disease_node, 'pharos.disease_get_gene', pharos_id, predicate)
                             resolved_edge_nodes.append((edge, gene_node))
     return resolved_edge_nodes
コード例 #10
0
    def drug_get_gene(self, subject):
        """ Get a gene from a pharos disease id. """
        pharosid = Text.un_curie (subject.identifier)
        original_edge_nodes=[]
        r = requests.get('https://pharos.nih.gov/idg/api/v1/ligands(%s)?view=full' % pharosid)
        result = r.json()
        resolved_edge_nodes = []
        actions = set() #for testing
        for link in result['links']:
            if link['kind'] == 'ix.idg.models.Target':
                pharos_target_id = int(link['refid'])
                edge_properties = {}
                for prop in link['properties']:
                    if prop['label'] == 'Pharmalogical Action': #!
                        actions.add(prop['term'] ) 
                pharos_edge = KEdge( 'pharos', 'drug_get_gene', {'properties': link['properties']} )               
                #Pharos returns target ids in its own numbering system. Collect other names for it.
                hgnc = self.target_to_hgnc (pharos_target_id)
                if hgnc is not None:
                    hgnc_node = KNode (hgnc, node_types.GENE)
                    resolved_edge_nodes.append( (pharos_edge, hgnc_node) )
                else:
                    logging.getLogger('application').warn('Did not get HGNC for pharosID %d' % pharos_target_id)
#        for a in actions:
#            print ('Action: {}'.format(a) ) 
        return resolved_edge_nodes
コード例 #11
0
ファイル: chembio.py プロジェクト: patlsc/robokop-interfaces
 def graph_drugbank_to_uniprot(self, drugbank):
     response = self.triplestore.query_template(inputs={
         "drugID":
         "DB{0}".format(Text.un_curie(drugbank.identifier))
     },
                                                outputs=["uniprotGeneID"],
                                                template_text="""
         prefix drugbank:      <http://chem2bio2rdf.org/drugbank/resource/>
         prefix drugbank_drug: <http://chem2bio2rdf.org/drugbank/resource/drugbank_drug/>
         prefix ctd:           <http://chem2bio2rdf.org/ctd/resource/>
         select distinct ?uniprotGeneID where {
            values ( ?drugID ) { ( drugbank_drug:${drugID} ) }
            ?dbInter     drugbank:GeneBank_ID        ?geneBankID ;
                         drugbank:gene               ?uniprotGeneID .
            ?drugID      drugbank:CID                ?pubchemCID ;
                         drugbank:Generic_Name       ?drugGenericName .
            ?ctd_disease ctd:diseaseid               ?diseaseID ;
                         ctd:cid                     ?pubchemCID .
         }""")
     predicate = LabeledID(identifier='SIO:001257',
                           label='chemical to gene association')
     results = []
     for r in response:
         node = KNode("UNIPROT:{0}".format(
             r['uniprotGeneID'].split('/')[-1:][0]),
                      type=node_types.GENE)
         edge = self.create_edge(drugbank, node,
                                 'chembio.graph_drugbank_to_uniprot',
                                 predicate, drugbank.id)
         results.append(edge, node)
     return results
コード例 #12
0
 def go_term_to_cell_annotation_extensions(self, go_node):
     """This is playing a little fast and loose with the annotations.  Annotations relate a gene to a go term,
     and they can have an extension like occurs_in(celltype). Technically, that occurs_in only relates to that
     particular gene/go combination.  But it's the only way to traverse from neurotransmitter release to neurons 
     that is currently available"""
     url = '{0}/QuickGO/services/annotation/search?includeFields=goName&goId=GO:{1}&taxonId=9606&extension=occurs_in(CL)'.format(
         self.url, Text.un_curie(go_node.id))
     call_results = self.page_calls(url)
     cell_ids = set()
     results = []
     for r in call_results:
         for e in r['extensions']:
             for c in e['connectedXrefs']:
                 if c['db'] == 'CL':
                     if c['id'] not in cell_ids:
                         predicate = self.get_predicate(c['qualifier'])
                         if predicate is None:
                             continue
                         #Bummer, don't get a name
                         cell_node = KNode('CL:{}'.format(c['id']),
                                           type=node_types.CELL)
                         edge = self.create_edge(
                             go_node,
                             cell_node,
                             'quickgo.go_term_to_cell_annotation_extensions',
                             go_node.id,
                             predicate,
                             url=url)
                         results.append((edge, cell_node))
                         cell_ids.add(c['id'])
     return results
コード例 #13
0
 def gene_get_drug(self, gene_node):
     """ Get a drug from a gene. """
     resolved_edge_nodes = []
     identifiers = gene_node.get_synonyms_by_prefix('UNIPROTKB')
     for s in identifiers:
         try:
             logger.debug(f'Call with {s}')
             pharosid = Text.un_curie(s)
             original_edge_nodes = []
             url = 'https://pharos.nih.gov/idg/api/v1/targets(%s)?view=full' % pharosid
             r = requests.get(url)
             try:
                 result = r.json()
                 logger.debug('back')
             except:
                 #If pharos doesn't know the identifier, it just 404s.  move to the next
                 logger.debug('404')
                 continue 
             actions = set()  # for testing
             predicate = LabeledID(identifier='PHAROS:drug_targets', label='is_target')
             chembl_id = None
             for link in result['links']:
                 if link['kind'] == 'ix.idg.models.Ligand':
                     pharos_drug_id = link['refid']
                     chembl_id, label = self.drugid_to_identifiers(pharos_drug_id)
                     if chembl_id is not None:
                         drug_node = KNode(chembl_id, type=node_types.CHEMICAL_SUBSTANCE, name=label)
                         edge = self.create_edge(drug_node,gene_node, 'pharos.gene_get_drug',
                                 pharosid,predicate, url=url)
                         resolved_edge_nodes.append( (edge,drug_node) )
         except:
             logger.debug("Error encountered calling pharos with",s)
         logger.debug('ok')
     return resolved_edge_nodes
コード例 #14
0
 def chemical_get_enzyme(self,chemnode):
     """To get an enzyme from chemicals, we first look up the reactions for the chemical.
     Then we pull the reaction which gives us (1) the enzyme and (2) whether the chemical
     is a reactant or a product."""
     reactions = self.chemical_get_reaction(chemnode)
     chemids = set([Text.un_curie(x) for x in chemnode.get_synonyms_by_prefix('KEGG')])
     results = []
     for reaction_id in reactions:
         rxns = self.get_reaction(reaction_id)
         for rxn in rxns:
             if 'enzyme' in rxn:
                 for gene_id in rxn['enzyme']:
                     enzyme = KNode(gene_id, type=node_types.GENE)
                     if len(chemids.intersection(rxn['reactants'])) > 0:
                         predicate = LabeledID('CTD:increases_degradation_of', label='increases degradation of')
                         #predicate = LabeledID('RO:0002449','negatively regulates, entity to entity')
                         input_identifier = chemids.intersection(rxn['reactants']).pop()
                     elif len(chemids.intersection(rxn['products'])) > 0:
                         predicate = LabeledID('CTD:increases_synthesis_of', label='increases synthesis of')
                         #predicate = LabeledID('RO:0002450','positively regulates, entity to entity')
                         input_identifier = chemids.intersection(rxn['products']).pop()
                     else:
                         logger.error(f"Mismatch between query and answer: {rxn} {chemids}")
                         continue
                     edge = self.create_edge(enzyme, chemnode, f'kegg.chemical_get_enzyme',  input_identifier, predicate)
                     results.append( (edge, enzyme))
     return results
コード例 #15
0
ファイル: chembio.py プロジェクト: patlsc/robokop-interfaces
 def graph_diseasename_to_uniprot(self, disease):
     results = []
     response = self.triplestore.query_template(
         inputs={"diseaseName": Text.un_curie(disease.id)},
         outputs=["pubChemCID"],
         template_text="""
         prefix ctd: <http://chem2bio2rdf.org/ctd/resource/>
         select distinct ?pubChemCID where {
            values ( ?diseaseName ) { ( "$diseaseName" ) }
            ?ctdChemDis  ctd:cid         ?pubChemCID;
                         ctd:diseasename ?diseaseNameRec.
            filter regex(lcase(str(?diseaseNameRec)), lcase(?diseaseName))
         } LIMIT 1""")
     if len(response) > 0:  # This is a disease.
         response = self.triplestore.query_template(
             inputs={"diseaseName": Text.un_curie(disease.id)},
             outputs=["disPmids", "chemPmids", "uniprotSym"],
             template_text="""
             prefix ctd: <http://chem2bio2rdf.org/ctd/resource/>
             select ?disPmids ?ctdChemDis ?chemPmids ?uniprotSym ?diseaseId where {
               values ( ?diseaseName ) { ( "$diseaseName" ) }
               ?ctdChemGene ctd:cid         ?pubChemCID;
                            ctd:pubmedids   ?chemPmids;
                            ctd:gene        ?uniprotSym.
               ?ctdChemDis  ctd:cid         ?pubChemCID;
                            ctd:diseaseid   ?diseaseId;
                            ctd:diseasename ?diseaseNameRec;
                            ctd:pubmedids   ?disPmids.
               filter regex(lcase(str(?diseaseNameRec)), lcase(?diseaseName))
             } LIMIT 500""")
         predicate = LabeledID(identifier='NCIT:R176',
                               label='disease to gene association')
         for r in response:
             chemPmids = r['chemPmids']
             disPmids = r['disPmids']
             pmids = chemPmids + "|" + disPmids
             node = KNode("UNIPROT:{0}".format(
                 r['uniprotSym'].split('/')[-1:][0]),
                          type=node_types.GENE)
             edge = self.create_edge(disease,
                                     node,
                                     'chembio.graph_diseasename_to_uniprot',
                                     disease.id,
                                     predicate,
                                     publications=pmids)
             results.append((edge, node))
     return results
コード例 #16
0
 def drugname_to_pharos(self, namenode):
     drugname  = Text.un_curie(namenode.identifier)
     pharosids = drugname_string_to_pharos_string(drugname)
     for pharosid, pharoslabel in pharosids:
         newnode = KNode( pharosid, node_types.DRUG, label=pharoslabel)
         newedge = KEdge( 'pharos', 'drugname_to_pharos', {} )
         results.append( (newedge, newnode ) )
     return results
コード例 #17
0
 def gene_get_go(self, gene):
     # this function is very finicky.  gene must be in uniprotkb, and the curie prefix must be correctly capitalized
     url = "{0}/bioentity/gene/UniProtKB:{1}/function/".format(
         self.url, Text.un_curie(gene.identifier))
     response = requests.get(url).json()
     # return [ (a['object']['id'] , a['object']['label']) for a in response['associations'] ]
     return self.process_associations(response, 'gene_get_go',
                                      node_types.PROCESS)
コード例 #18
0
ファイル: hetio.py プロジェクト: stevencox/robokop-interfaces
 def gene_to_cell(self, gene):
     result = self.query(
         "MATCH (g:Gene)-[r]-(c:CellularComponent) WHERE g.name='{0}' RETURN g, r, c LIMIT 200"
         .format(Text.un_curie(gene.identifier)),
         labels=['CellularComponent'],
         node_properties=['identifier'])
     return [(self.get_edge({'res': r}, predicate='affects'),
              KNode(r['identifier'], node_types.CELLULAR_COMPONENT))
             for r in result]
コード例 #19
0
 def drugname_to_ctd(self, namenode):
     drugname = Text.un_curie(namenode.identifier)
     ctdids = self.drugname_string_to_ctd_string(drugname)
     for ctd in ctdids:
         label = drugname
         newnode = KNode(ctdid, node_types.DRUG, label=label)
         newedge = KEdge('CTD', 'drugname_to_ctd', {})
         results.append((newedge, newnode))
     return results
コード例 #20
0
ファイル: hetio.py プロジェクト: stevencox/robokop-interfaces
 def gene_to_anatomy(self, gene):
     result = self.query(
         "MATCH (a:Anatomy)-[ar]-(g:Gene) WHERE g.name='{0}' RETURN a, ar, g LIMIT 200"
         .format(Text.un_curie(gene.identifier)),
         labels=['Anatomy'],
         node_properties=['identifier'])
     print(result)
     return [(self.get_edge({'res', r}, predicate='involved_in'),
              KNode(r['identifier'], node_types.ANATOMY)) for r in result]
コード例 #21
0
def test_smdb_id_normalizer(hmdb):
    node = KNode('HMDB:HMDB0112245', type=node_types.CHEMICAL_SUBSTANCE)
    node.add_synonyms(['HMDB:HMDB0112245'])
    results = hmdb.metabolite_to_pathway(node)
    for r in results:
        r_node = r[1]
        if r_node.id.startswith('SMPDB'):
            uncuried = Text.un_curie(r_node.id)
            assert len(uncuried) == 10
コード例 #22
0
 def graph_drugname_to_gene_symbol(self, drug_name_node):
     drug_name = Text.un_curie(drug_name_node.identifier)
     response = self.drug_name_to_gene_symbol(drug_name)
     results = []
     for r in response:
         edge = self.get_edge(r, predicate="targets")
         node = KNode("UNIPROT:{0}".format(Text.path_last(r['uniprotSym'])),
                      node_types.GENE)
         results.append((edge, node))
     return results
コード例 #23
0
 def graph_name_to_drugbank(self, drug_name_node):
     drug_name = Text.un_curie(drug_name_node.identifier)
     response = self.drug_name_to_gene_symbol(drug_name)
     results = []
     for r in response:
         edge = self.get_edge(r, predicate="drugname")
         node = KNode ("DRUGBANK:{0}".format (Text.path_last (r['drugID'])), \
                       node_types.DRUG, \
                       label=r['drugName'])
         results.append((edge, node))
     return results
コード例 #24
0
 def request_concept (self, concept, stype=None):
     #Without quotes around the keyword, this function treats space as a delimiter...
     keyword = Text.un_curie (concept.identifier)
     keyword = '"{0}"'.format (keyword) if ' ' in keyword else keyword
     if stype is None:
         url = '{0}/concepts?keywords={1}'.format (self.url, keyword)
     elif stype == node_types.DISEASE:
         url = '{0}/concepts?keywords={1}&semanticGroups=DISO'.format (self.url, keyword)
     else:
         url = '{0}/concepts?keywords={1}'.format (self.url, keyword)
     return requests.get (url).json ()
コード例 #25
0
 def get_family_sub_family_ids_from_curie(self, curie):
     """
     Splits a panther curie into family id and sub family id
     when ever possible.
     """
     if 'PANTHER.FAMILY' in curie:
         curie = Text.un_curie(curie)
     splitted = curie.split(':')
     if len(splitted) == 1:
         return (splitted[0], None)
     return (splitted)
コード例 #26
0
 def drugname_to_pharos(self, namenode):
     drugname = Text.un_curie(namenode.id)
     pharosids = self.drugname_string_to_pharos_info(drugname)
     results = []
     predicate = LabeledID(identifier='RDFS:id', label='identifies')
     for pharosid, pharoslabel in pharosids:
         newnode = KNode(pharosid, type=node_types.CHEMICAL_SUBSTANCE, name=pharoslabel)
         raise RuntimeError('namenode.id is probably not a ctime...')
         newedge = KEdge(namenode, newnode, 'pharos.drugname_to_pharos', namenode.id, predicate)
         results.append((newedge, newnode))
     return results
コード例 #27
0
    def get_synonyms_by_other_ids(self, variant_node):
        # Just looking for 1 hit because any hit should return all of the available synonyms and caid if they exist
        hgvs_ids = variant_node.get_synonyms_by_prefix('HGVS')
        if hgvs_ids:
            for hgvs_id in hgvs_ids:
                synonyms = self.get_synonyms_by_hgvs(Text.un_curie(hgvs_id))
                if synonyms: return synonyms

        dbsnp_ids = variant_node.get_synonyms_by_prefix('DBSNP')
        if dbsnp_ids:
            for dbsnp_id in dbsnp_ids:
                rsid = Text.un_curie(dbsnp_id)
                if rsid.startswith('rs'):
                    synonyms = self.get_synonyms_by_parameter_matching(
                        'dbSNP.rs', rsid[2:])
                    if synonyms: return synonyms

        clinvar_ids = variant_node.get_synonyms_by_prefix('CLINVARVARIANT')
        if clinvar_ids:
            for clinvar_id in clinvar_ids:
                synonyms = self.get_synonyms_by_parameter_matching(
                    'ClinVar.variationId', Text.un_curie(clinvar_id))
                if synonyms: return synonyms

        myvariant_hg38_ids = variant_node.get_synonyms_by_prefix(
            'MYVARIANT_HG38')
        if myvariant_hg38_ids:
            for myvariant_id in myvariant_hg38_ids:
                synonyms = self.get_synonyms_by_parameter_matching(
                    'MyVariantInfo_hg38.id', Text.un_curie(myvariant_id))
                if synonyms: return synonyms

        myvariant_hg19_ids = variant_node.get_synonyms_by_prefix(
            'MYVARIANT_HG19')
        if myvariant_hg19_ids:
            for myvariant_id in myvariant_hg19_ids:
                synonyms = self.get_synonyms_by_parameter_matching(
                    'MyVariantInfo_hg19.id', Text.un_curie(myvariant_id))
                if synonyms: return synonyms

        return set()
コード例 #28
0
ファイル: biolink.py プロジェクト: patlsc/robokop-interfaces
 def gene_get_go(self, gene):
     # this function is very finicky.  gene must be in uniprotkb, and the curie prefix must be correctly capitalized
     # TODO: Not actually true anymore, seems to handle most CURIEs.
     uniprot_id = None
     uniprot_ids = gene.get_synonyms_by_prefix('UNIPROTKB')
     if len(uniprot_ids) == 0:
         return None, None, None
     uniprot_id = list(uniprot_ids)[0]
     url = "{0}/bioentity/gene/UniProtKB:{1}/function/".format(
         self.url, Text.un_curie(uniprot_id))
     response = self.query(url)
     return response, url, uniprot_id
コード例 #29
0
 async def get_chembl_data(self, chembl_id):
     """
     Fetches chembl data from ebi.ac.uk
     """
     conf = self.get_prefix_config('CHEMBL.COMPOUND')
     keys_of_interest = conf['keys']
     suffix = Text.un_curie(chembl_id)
     url_part = f'{suffix}.json'
     response_json = await self.async_get_json(conf['url'] + url_part)
     #There are some chembl id's that 404, leading to an empty response
     if len(response_json) == 0:
         return response_json
     return self.extract_chembl_data(response_json, keys_of_interest)
コード例 #30
0
 def uniprot_to_hgnc(self, uniprot_symbol):
     return self.triplestore.query_template(
         inputs={"uniprotID": Text.un_curie(uniprot_symbol.identifier)},
         outputs=["hgncID"],
         template_text="""
         prefix uniprot:    <http://chem2bio2rdf.org/uniprot/resource/gene/>
         prefix owl:        <http://www.w3.org/2002/07/owl#>
         prefix hgnc:       <http://chem2bio2rdf.org/rdf/resource/hgnc/>
         select distinct ?hgncID where {
            values ( ?uniprotID ) { ( uniprot:${uniprotID} ) }
            ?uniprotID <http://www.w3.org/2002/07/owl#sameAs> ?hgncID.
            filter ( strstarts (str(?hgncID), "http://bio2rdf.org/gene:"))
         }
         """)