def intialize_graph(): aln_graph = nx.DiGraph() node_dict = {} node_dict[0] = aligned_seg.aligned_seg("start", "start", "start", -1, -1, -1, -1, -1, []) aln_graph.add_node(0) return node_dict, aln_graph
def add_target_node(aln_graph, node_dict, query_length, children_coords, parent): num_nodes = max(node_dict.keys()) node_dict[num_nodes + 1] = aligned_seg.aligned_seg("end", "end", "end", query_length - 1, query_length - 1, query_length - 1, query_length - 1, 0, []) for node_name in node_dict: if is_terminal_node(node_name, aln_graph): edge_weight = get_edge_weight(node_dict[node_name], node_dict[num_nodes + 1], children_coords, parent) aln_graph.add_edge(node_name, num_nodes + 1, cost=edge_weight)
def add_block(query_block_pos, reference_block_pos, aln_id, alignment, query_block_start, reference_block_start, mismatches, new_blocks, merged_children_coords, parent): query_block_end = query_block_pos - 1 reference_block_end = reference_block_pos - 1 new_block = aligned_seg.aligned_seg(aln_id, alignment.query_name, alignment.reference_name, query_block_start, query_block_end, reference_block_start, reference_block_end, alignment.is_reverse, np.array(mismatches).astype(int)) if contains_child(new_block, merged_children_coords, parent): new_blocks.append(new_block)
def update_coords(ref_start, ref_end, aln): start_diff = ref_start - aln.reference_block_start end_diff = aln.reference_block_end - ref_end if ref_start != aln.reference_block_start or ref_end != aln.reference_block_end: new_query_start = aln.query_block_start + start_diff new_query_end = aln.query_block_end - end_diff new_aln = aligned_seg.aligned_seg(aln.aln_id, aln.query_name, aln.reference_name, new_query_start, new_query_end, ref_start, ref_end, aln.is_reverse, aln.mismatches) else: new_aln = aln return new_aln