diff --git a/debruijn/debruijn.py b/debruijn/debruijn.py index f0e8753..8981acd 100644 --- a/debruijn/debruijn.py +++ b/debruijn/debruijn.py @@ -2,6 +2,7 @@ Small assembly module based on de bruijn graphs """ import os +import statistics import networkx as nx from networkx import algorithms @@ -83,8 +84,15 @@ def get_starting_nodes(graph): return starting_nodes -def std(): - pass +def std(values): + """ + Arguments: + values, list: list of values + + Returns : + standard deviation of the 'values' data list + """ + return stdev(float(values)) def get_sink_nodes(graph): @@ -103,12 +111,47 @@ def get_sink_nodes(graph): return sink_nodes -def path_average_weight(): - pass +def path_average_weight(graph, path): + """ + Arguments: + graph, nx.DiGraph: a de bruijn graph + path, list of str(nodes): list of nodes constituing a path + + Return: + mean weight, float: the mean weight of the path + """ + weight = 0 + for i in range(len(path)-1): + weight += graph[path[i][i+i][weight] + + return weight/(len(path)-1) -def remove_paths(): - pass + +def remove_paths(graph, paths, delete_entry_node=False, delete_sink_node=False): + """ + Removes paths in 'paths' list from 'graph' object. Don't delete entry and + sink nodes unless specified. + + Arguments: + graph, nd.DiGraph(): de bruijn graph + paths, list of string lists: list of paths composed of nodes + delete_entry_node, boolean: Delete entry if True + delete_sink_node, boolean: Delete sink node if True + + Return: + graph, nd.DiGraph(): de bruijn graph with deletes paths. + """ + entry = 1 + sink = -1 + if delete_entry_node == True: + entry = 0 + if delete_sink_node == True: + sink = None + for path in paths: + graph.remove_nodes_from(path[entry:sink]) + + return graph def select_best_path(): @@ -153,7 +196,7 @@ def get_contigs(graph, starting_nodes, sink_nodes): for i in range(len(path)-1): contig += path[i+1][-1] contigs.append((contig, len(contig))) - + return contigs def solve_bubble():