#!/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/#fromnumbersimportNumberfromtypingimportListimportcollectionsimportpypath.resources.urlsasurlsimportpypath.share.curlascurlimportpypath.share.progressasprogress
[docs]defintact_interactions(miscore:Number=.6,organism:int=9606,complex_expansion:bool=False,only_proteins:bool=False,only_ids:bool=False,)->List[tuple]:""" only_proteins : bool Keep only records of protein-protein interactions. only_ids : bool Load only the identifiers of interacting pairs (smaller memory footprint). """id_types={'uniprotkb':'uniprot',}IntactInteraction=collections.namedtuple('IntactInteraction',('id_a','id_b','id_type_a','id_type_b','pubmeds','methods','interaction_types','mi_score','isoform_a','isoform_b',),)IntactInteraction.__new__.__defaults__=(None,)*7defget_id_type(field):id_type=Noneiffield=='-'elsefield.split(':')[0]returnid_types[id_type]ifid_typeinid_typeselseid_typedefget_uniprot_id(field):uniprot,isoform=_try_isoform(field.split(':')[1].replace('"',''))uniprot=uniprot.split('-')[0]returnuniprot,isoformdefget_ebi_id(field):iffield=='-':returnNone,Noneelse:partner_id=field.split(':')[1]returnpartner_id,Nonedefget_taxon(field):return(0iffield=='-'elsefield.split('|')[0].split(':')[1].split('(')[0])results=[]url=urls.urls['intact']['mitab']iftype(organism)isint:organism='%u'%organismc=curl.Curl(url,silent=False,large=True,files_needed=['intact.txt'],slow=True,)data=c.result['intact.txt']size=c.sizes['intact.txt']prg=progress.Progress(size,'Reading IntAct MI-tab file',99)forlnum,linenumerate(data):prg.step(len(l))iflnum==0:continuel=l.strip('\n\r ').split('\t')taxon_a=get_taxon(l[9])taxon_b=get_taxon(l[10])if((organismisNoneor(taxon_a==organismandtaxon_b==organism))and(complex_expansionor'expansion'notinl[15])):# finding mi-score and authorsc=0au='0'forsinl[14].split('|'):ifs.startswith('intact-miscore'):sc=float(s.split(':')[1])ifs.startswith('author'):au=len(s.split(':')[1])# filtering for mi-scoreifsc<miscore:continueid_type_a=get_id_type(l[0])id_type_b=get_id_type(l[1])if(only_proteinsandnot(id_type_a=='uniprot'andid_type_b=='uniprot')):continueid_a,isoform_a=(get_uniprot_id(l[0])ifid_type_a=='uniprot'elseget_ebi_id(l[0]))id_b,isoform_b=(get_uniprot_id(l[1])ifid_type_b=='uniprot'elseget_ebi_id(l[1]))# key = tuple(sorted((id_a, id_b)))pubmeds=set(ref[1]forrefin(ref.split(':')forrefinl[8].split('|'))ifref[0]=='pubmed')methods=set(met.split('(')[1].strip(')"')formetinl[6].split('|'))interaction_types=set(int_type.split('(')[1].strip(')"')forint_typeinl[11].split('|'))results.append(IntactInteraction(id_a=id_a,id_b=id_b,id_type_a=id_type_a,id_type_b=id_type_b,pubmeds=pubmeds,methods=methods,interaction_types=interaction_types,mi_score=sc,isoform_a=isoform_a,isoform_b=isoform_b,))prg.terminate()returnresults