# open("fm.tex", "w").write(table) # subprocess.call(["pdflatex", "fm.tex"]) # print(counts) fm = FMIndex(counts, occ, np.array(idxs)) query = "TACTGATG" # query = "ACCGTTAGAGTCAG" smems = { smem for i in range(len(query)) for smem in fm.find_smem(query, i) } mems = fm.find_mems(query) sa = SuffixArray(idxs) print(smems) matches = {(t[0], t[1]): sa.get_intervals(t[2], t[1] - t[0]) for t in smems} print(matches) print(mems) fig = Figure("memfig", "memfigs") fig.write(create_figure(orig_seq, matches, query)) # # print fm.find_seq("ACGT") # print fm.find_seq("CG") # for s in suffices: # print s """ ATTGAC ATTCAC """
rev_c = {"A": "T", "C": "G", "G": "C", "T": "A", "$": "$"} colors = ["red", "green", "blue", "yellow"] def create_figure(seq, interval_dict, query): seq_fig = tikz_matrix("seq", body([seq, "".join(rev_c[c] for c in seq)])) query_fig = tikz_matrix("q", body([query]), "below=of seq") rec_1 = r"\node[color=%s, draw, dashed, rounded corners, fit=(seq-1-%s) (seq-1-%s)] {};" rec_2 = r"\node[color=%s, draw, dashed, rounded corners, fit=(seq-2-%s) (seq-2-%s)] {};" rec_q = r"\node[color=%s, draw, dashed, rounded corners, fit=(q-1-%s) (q-1-%s)] {};" lines = [] N = len(seq) i = 0 for (s, e), (intervals, reverse_intervals) in interval_dict.iteritems(): lines.append(rec_q % (colors[i], s + 1, e)) for (start, end) in intervals: lines.append(rec_1 % (colors[i], start + 1, end)) for start, end in reverse_intervals: lines.append(rec_2 % (colors[i], N - end + 1, N - start)) i += 1 content = seq_fig + "\n" + query_fig + "\n" + "\n".join(lines) content = content.replace("$", r"\$") return content if __name__ == "__main__": fig = Figure("memfig", "memfigs") fig.write(create_figure("ATTCT", {1: ([(0, 3), (2, 5)], [(1, 3)])}))
path = backtrack_g(m, seq_graph, seq_graph2) print path figure = Figure("seqgraph_a", "seqalign_figs") c_text = r"\textcolor{red}{%s}" b_text = r"\textcolor{black!25}{%s}" m = [[ c_text % c if (i, j) in path else b_text % c for j, c in enumerate(row) ] for i, row in enumerate(m)] elems = [list("." + labels)] + [[c] + row for c, row in zip(labels2, m)] edges2 = seq_graph2.get_tikz_edges() edges = seq_graph.get_tikz_edges(False) path_edge_template = r"\path[-stealth] (m-%s-%s) edge[color=red] (m-%s-%s);" path_edges = "\n".join([ path_edge_template % (i + 2, j + 2, k + 2, l + 2) for (i, j), (k, l) in zip(path[:-1], path[1:]) ]) A, B = get_alignment(seq_graph._labels, seq_graph2._labels, path) alignment_matrix = tikz_matrix("am", body([A, B]), "below=of m") init = align2.generate_tikz("ga", "") init2 = align1.generate_tikz("gb", "below=of ga,") content = "\n".join([ init, init2, tikz_matrix("m", body(elems), "below=of gb,"), edges, edges2, path_edges, alignment_matrix ]) content = content.replace("#", r"\#") figure.write(content) # figure.write(seq_graph.to_tikz(False)) # print(edges)