#!/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/#from__future__importannotationsimportcsvimportcollectionsimportitertoolsimportpypath.share.curlascurlimportpypath.share.commonascommonimportpypath_common._constantsas_constimportpypath.resources.urlsasurlsimportpypath.utils.mappingasmappingimportpypath.utils.taxonomyastaxonomyimportpypath.internals.interaasintera
[docs]defguide2pharma_download(organism:str|int='human',endogenous:bool=True,process_interactions:bool=True,process_complexes:bool=True,)->tuple[list,dict]:""" Downloads and processes Guide to Pharmacology data. Returns list of dicts. Args: organism Name of the organism, e.g. `human`. endogenous Whether to include only endogenous ligands interactions. """get_taxid=lambdax:(_const.NOT_ORGANISM_SPECIFICifxin{'','None'}elsetaxonomy.ensure_ncbi_tax_id(x))organism_=Nonencbi_tax_id=Noneifisinstance(organism,str):ncbi_tax_id=get_taxid(organism)try:organism_=taxonomy.ensure_common_name(ncbi_tax_id)organism_=organism_.capitalize()iforganism_elseNoneexceptKeyError:pass# no organism specifiedpositives={'agonist','activator','potentiation','partial agonist','inverse antagonist','full agonist','activation','irreversible agonist','positive',}negatives={'inhibitor','antagonist','inhibition','irreversible inhibition','inverse agonist','negative','weak inhibition','reversible inhibition',}GuideToPharmacologyInteraction=collections.namedtuple('GuideToPharmacologyInteraction',['ligand','ligand_id_type','target','target_id_type','target_is_ligand','ligand_organism','target_organism','effect','ligand_location','target_type','ligand_endogenous','pubmed_ids',])defis_positive(term):returnterm.lower().strip()inpositivesdefis_negative(term):returnterm.lower().strip()innegativesinteractions=[]complexes={}url=urls.urls['gtp']['url']c=curl.Curl(url,silent=False,large=True,encoding='utf-8')line0=next(c.result)ifline0[:2]!='"#':c.fileobj.seek(0)data=csv.DictReader(c.result)iforganism_isnotNone:data=[dfordindataif(get_taxid(d['Target Species'])==ncbi_tax_idandncbi_tax_idinset(get_taxid(t)fortind['Ligand Species'].split('|')))]ifendogenous:data=[dfordindataifd['Endogenous'].strip()=='true']fordindata:ifis_positive(d['Type'])oris_positive(d['Action']):effect=1elifis_negative(d['Type'])oris_negative(d['Action']):effect=-1else:effect=0ligands=d['Ligand Gene Symbol']ord['Ligand PubChem SID']ligands=ligands.split('|')ligand_taxons=[get_taxid(l)forlind['Ligand Species'].split('|')]forligand_taxoninzip(ligands,ligand_taxons):targets=(d['Target UniProt ID']ord['Target Ligand UniProt ID']ord['Target Ligand PubChem SID'])targets=targets.split('|')references=d['PubMed ID'].split('|')ifd['PubMed ID']else[]ifprocess_interactions:forligand,targetinitertools.product(ligands,targets):interactions.append(GuideToPharmacologyInteraction(ligand=ligand,ligand_id_type=('genesymbol'ifd['Ligand Gene Symbol']else'pubchem_sid'ifd['Ligand PubChem SID']elseNone),target=target,target_id_type=('uniprot'if(d['Target UniProt ID']ord['Target Ligand UniProt ID'])else'pubchem_sid'ifd['Target Ligand PubChem SID']elseNone),target_is_ligand=bool(d['Target Ligand']),ligand_organism=ligand_taxon,target_organism=get_taxid(d['Target Species']),effect=effect,ligand_location=(d['Ligand Context'].strip().lower()orNone),target_type=(d['Receptor Site'].strip().lower()orNone),ligand_endogenous=(d['Endogenous'].strip()=='t'),pubmed_ids=references,))ifprocess_complexes:if(len(targets)>1and(d['Target UniProt ID']ord['Target Ligand UniProt ID'])):cplex=intera.Complex(components=targets,sources='Guide2Pharma',references=references,)key=cplex.__str__()ifkeyincomplexes:complexes[key]+=cplexelse:complexes[key]=cplexif(len(ligands)>1andd['Ligand Gene Symbol']):ligand_uniprots=[mapping.map_name0(ligand,'genesymbol','uniprot')forligandinligands]ligand_uniprots=[uforuinligand_uniprotsifu]iflen(ligand_uniprots)>1:cplex=intera.Complex(components=ligand_uniprots,sources='Guide2Pharma',references=references,)key=cplex.__str__()ifkeyincomplexes:complexes[key]+=cplexelse:complexes[key]=cplexreturninteractions,complexes