Source code for pypath.inputs.hippie #!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# This file is part of the `pypath` python module
#
# Copyright 2014-2023
# EMBL, EMBL-EBI, Uniklinik RWTH Aachen, Heidelberg University
#
# Authors: see the file `README.rst`
# Contact: Dénes Türei (turei.denes@gmail.com)
#
# Distributed under the GPLv3 License.
# See accompanying file LICENSE.txt or copy at
# https://www.gnu.org/licenses/gpl-3.0.html
#
# Website: https://pypath.omnipathdb.org/
#
import collections
import itertools
import pypath.resources.urls as urls
import pypath.share.curl as curl
import pypath.share.common as common
import pypath.utils.mapping as mapping
import pypath.utils.taxonomy as taxonomy
[docs]
def hippie_interactions (
score_threshold = .75 ,
only_human = False ,
only_sources = None ,
only_methods = None ,
methods = False ,
sources = False ,
references = True ,
organisms = False ,
):
only_sources = common . to_set ( only_sources )
only_methods = common . to_set ( only_methods )
HippieInteraction = collections . namedtuple (
'HippieInteraction' ,
[
'id_a' ,
'id_b' ,
'score' ,
'methods' ,
'references' ,
'sources' ,
'organisms' ,
],
)
tps = lambda i : tuple ( sorted ( i ))
url = urls . urls [ 'hippie' ][ 'url' ]
c = curl . Curl ( url , large = True , silent = False )
result = set ()
for i , l in enumerate ( c . result ):
l = l . strip ( ' \r\n ' ) . split ( ' \t ' )
score = float ( l [ 4 ])
if score < score_threshold :
continue
ids_a_1 = mapping . map_name ( l [ 0 ], 'uniprot-entry' , 'uniprot' )
ids_a_2 = mapping . map_name ( l [ 1 ], 'entrez' , 'uniprot' )
ids_b_1 = mapping . map_name ( l [ 2 ], 'uniprot-entry' , 'uniprot' )
ids_b_2 = mapping . map_name ( l [ 3 ], 'entrez' , 'uniprot' )
for id_a , id_b in itertools . product (
ids_a_1 | ids_a_2 ,
ids_b_1 | ids_b_2
):
details = dict (
(
dd [ 0 ],
set ( dd [ 1 ] . split ( ',' )),
)
for dd in
( d . split ( ':' ) for d in l [ 5 ] . split ( ';' ))
)
_sources = details [ 'sources' ] if 'sources' in details else set ()
experiments = (
details [ 'experiments' ] if 'experiments' in details else set ()
)
if not all ((
not only_methods or experiments & only_methods ,
not only_methods or _sources & only_sources ,
)):
continue
_organisms = { 9606 }
if 'species' in details :
names = {
spec . split ( '(' )[ 0 ] . strip ()
for spec in details [ 'species' ]
}
_organisms = {
taxonomy . ensure_ncbi_tax_id ( name )
for name in names
}
_organisms . discard ( None )
if only_human and 9606 not in _organisms :
continue
result . add (
HippieInteraction (
id_a = id_a ,
id_b = id_b ,
score = score ,
methods = tps ( experiments ) if methods else None ,
references = (
tps ( details [ 'pmids' ]) if references else None
),
sources = tps ( _sources ) if sources else None ,
organisms = tps ( _organisms ) if organisms else None ,
)
)
return list ( result )
Copy to clipboard