Source code for goatools.semsim.termwise.dag_a

"""A GO term, A, can be represented as DAG_a = (A, T_a, E_a), aka a GoSubDag"""

__copyright__ = "Copyright (C) 2020-present, DV Klopfenstein. All rights reserved."
__author__ = "DV Klopfenstein"

## import timeit
## from goatools.godag.prttime import prt_hms


[docs] class DagA: """A GO term, A, can be represented as DAG_a = (A, T_a, E_a), aka a GoSubDag""" def __init__(self, go_a, ancestors, go2depth, w_e, godag): self.go_a = go_a self.ancestors = ancestors #tic = timeit.default_timer() self.goids = self._init_goids() #prt_hms(tic, '\nDagA INIT GO IDs') self.go2svalue = self._init_go2svalue(go2depth, w_e, godag) #prt_hms(tic, 'DagA SVALUES')
[docs] def get_sv(self): """Get the semantic value of GO term A""" return sum(self.go2svalue.values())
[docs] def get_svalues(self, goids): """Get svalues for given IDs""" s_go2svalue = self.go2svalue return [s_go2svalue[go] for go in goids]
def _init_go2svalue(self, go2depth, w_e, godag): """S-value: the contribution of GO term, t, to the semantics of GO term, A""" #tic = timeit.default_timer() go2svalue = {self.go_a: 1.0} if not self.ancestors: return go2svalue terms_a = self.goids w_r = {r:v for r, v in w_e.items() if r != 'is_a'} #prt_hms(tic, 'DagA edge weights wo/is_a') for ancestor_id in self._get_sorted(go2depth): goterm = godag[ancestor_id] weight = w_e['is_a'] svals = [weight*go2svalue[o.item_id] for o in goterm.children if o.item_id in terms_a] for rel, weight in w_r.items(): if rel in goterm.relationship_rev: for cobj in goterm.relationship_rev[rel]: if cobj.item_id in terms_a: svals.append(weight*go2svalue[cobj.item_id]) if svals: go2svalue[ancestor_id] = max(svals) ## print(ancestor_id, max(svals)) return go2svalue def _get_sorted(self, go2depth): """Get the sorted ancestors""" #tic = timeit.default_timer() go2dep = {go:go2depth[go] for go in self.ancestors} go_dep = sorted(go2dep.items(), key=lambda t: t[1], reverse=True) gos, _ = zip(*go_dep) #prt_hms(tic, 'DagA SORTED') return gos def _init_goids(self): """Return all GO IDs in GO_a's GODAG""" goids = set(self.ancestors) goids.add(self.go_a) return goids
# Copyright (C) 2020-present, DV Klopfenstein. All rights reserved."