#!/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/#importitertoolsimportcollectionsfromtypingimportDict,Listimportxml.etree.cElementTreeasETimportpypath.share.curlascurlimportpypath.resources.urlsasurlsimportpypath.utils.mappingasmappingimportpypath.internals.interaasintera
[docs]defspike_interactions(min_confidence:int=2)->List[tuple]:""" Args min_confidence: Confidence (integrity) levels in SPIKE span from 1 to 4, 1 being the highest confidence. """url=urls.urls['spike']['url']c=curl.Curl(url,silent=False,large=True,files_needed=['LatestSpikeDB.xml'],)spikexml=c.resultxml=ET.parse(spikexml['LatestSpikeDB.xml'])xmlroot=xml.getroot()# iterating genesbblock=xmlroot.find('BuildingBlock')rblock=xmlroot.find('RegulationBlock')iblock=xmlroot.find('InteractionBlock')genes={}result=[]SpikeInteraction=collections.namedtuple('SpikeInteraction',('entrez_a','genesymbol_a','entrez_b','genesymbol_b','directed','pmids','integrity','effect','assay','data_source','description','mechanism','regulation',))Gene=collections.namedtuple('Gene',('entrez','genesymbol','type'))forgeneinbblock.findall('Gene'):sy=''if'name'notingene.attribelsegene.attrib['name']genes[gene.attrib['id']]=[Gene(entrez=gene.find('XRef').attrib['id'],genesymbol=sy,type='gene',)]forgrpinbblock.findall('Group'):ifgrp.attrib['type']=='Complex':members=[m.attrib['ref']formingrp.findall('Member')]ifall(mingenesandgenes[m][0].type!='complex'forminmembers):uniprots=[mapping.map_name(genes[m][0].entrez,'entrez','uniprot')forminmembers]genes[grp.attrib['id']]=[Gene(entrez=cplex,genesymbol=cplex,type='complex',)forcplexin(intera.Complex(name=grp.attrib['name'],components=ups,sources='SPIKE',)forupsinitertools.product(*uniprots))]foriinitertools.chain(rblock.findall('Regulation'),iblock.findall('Interaction'),):regulation=i.tag=='Regulation'src_tag='Source'ifregulationelse'ProteinA'tgt_tag='PhysicalTarget'ifregulationelse'ProteinB'ds=i.attrib['dataSource']itg=i.attrib['integrity']eff=i.attrib.get('effect','')mec=i.attrib.get('mechanism','')src=i.find(src_tag).attrib['ref']tgt=i.find(tgt_tag).attrib['ref']dcd=str(int(regulation))dsc=(''ifi.find('Description')isNoneelsei.find('Description').text.replace('\n',' '))asy=(''if'biologicalAssay'notini.attribelsei.attrib['biologicalAssay'])refs=i.findall('Reference')pmids=[r.attrib['pmid']forrinrefs]ifsrcingenesandtgtingenes:ifint(itg)<=min_confidence:for_src,_tgtinitertools.product(genes[src],genes[tgt]):result.append(SpikeInteraction(entrez_a=_src.entrez,genesymbol_a=_src.genesymbol,entrez_b=_tgt.entrez,genesymbol_b=_tgt.genesymbol,directed=dcd,pmids=';'.join(pmids),integrity=itg,effect=eff,assay=asy,data_source=ds,description=dsc,mechanism=mec,regulation=regulation,))returnresult