Source code for LSD.filter
from LSD.reporter import Reporter
[docs]class Filter(Reporter):
"""Abstract filter class that every Filter implements."""
def __init__(self, reporter):
self.reporter = reporter
def report(self, dag):
self.reporter.rep(dag)
def fin(self):
self.reporter.fin()
def rep(self, dag):
pass
[docs]class SungFilter(Filter):
"""The sung filter to get only the right superbubbles."""
def __init__(self, reporter, order):
super().__init__(reporter)
self.dags = set()
self.order = order
def rep(self, dag):
source = str(dag[0])
sink = str(dag[-1])
if sink.endswith("_2"):
if source.endswith("_2"):
self.dags.add((source[:-2], sink[:-2]))
elif self.order.get_position(sink[:-2]) < self.order.get_position(source):
for i in range(len(dag)):
if dag[i].endswith("_2"):
dag[i] = dag[i][:-2]
self.report(dag)
else:
if (source, sink) in self.dags:
self.report(dag)
[docs]class WeekFilter(Filter):
"""The filter that to get only superbubbles and discards week superbubbles."""
def __init__(self, reporter, g):
super().__init__(reporter)
self.g = g
def rep(self, dag):
if not dag[0] in self.g.successors(dag[-1]):
self.report(dag)