"""This module contains classes to generate prior networks."""
[docs]class SearchTerm(object):
"""Represents a search term to be used in a model configuration.
Parameters
----------
type : str
The type of search term, e.g. gene, bioprocess, other
name : str
The name of the search term, is equivalent to an Agent name
db_refs : dict
A dict of database references for the given term, is similar
to an Agent db_refs dict
search_term : str
The actual search term to us for searching PubMed
"""
def __init__(self, type, name, db_refs, search_term):
self.type = type
self.name = name
self.db_refs = db_refs
self.search_term = search_term
def __str__(self):
return f'SearchTerm({self.type}, {self.name})'
def __repr__(self):
return str(self)
def __hash__(self):
return hash((self.type, self.name, tuple(sorted(self.db_refs.items())),
self.search_term))
[docs] def to_json(self):
"""Return search term as JSON."""
jd = {'type': self.type,
'name': self.name,
'db_refs': self.db_refs,
'search_term': self.search_term}
return jd
[docs] @classmethod
def from_json(cls, jd):
"""Return a SearchTerm object from JSON."""
return SearchTerm(**jd)
def __eq__(self, other):
return self.type == other.type and self.name == other.name and \
self.db_refs == other.db_refs and \
self.search_term == other.search_term
[docs]def get_drugs_for_gene(stmts, hgnc_id):
"""Get list of drugs that target a gene
Parameters
----------
stmts : list of :py:class:`indra.statements.Statement`
List of INDRA statements with a drug as subject
hgnc_id : str
HGNC id for a gene
Returns
-------
drugs_for_gene : list of :py:class:`emmaa.priors.SearchTerm`
List of search terms for drugs targeting the input gene
"""
drugs_for_gene = []
for stmt in stmts:
if stmt.obj.db_refs.get('HGNC') == hgnc_id:
term = SearchTerm(type='drug', name=stmt.subj.name,
db_refs=stmt.subj.db_refs,
search_term=f'"{stmt.subj.name}"')
drugs_for_gene.append(term)
return drugs_for_gene