def collapse_stack(stack, collapse_dict, max_tags):
"""DOCSTRING
Args
Returns
"""
new_alignment_list = []
new_alignment_dict = defaultdict(list)
for aln in stack:
new_alignment_dict[aln.query_sequence].append(aln)
# TODO 2017.10.21:
# further collapse `new_alignment_dict`
# based on degeneracy and/or read tags
for seq in new_alignment_dict:
this_alignment_qname_list = [x.qname for x in new_alignment_dict[seq] ]
is_collapsed = [True if x in collapse_dict else False for x in this_alignment_qname_list]
## if any of the alignment is collapsed before,
## we require all of them to be collapsed
if any(is_collapsed):
assert all(is_collapsed)
target_alignment_qname = collapse_dict[this_alignment_qname_list[0]][0:max_tags]
assert len(collapse_dict[this_alignment_qname_list[0]]) <= max_tags
target_alignment = [new_alignment_dict[seq][this_alignment_qname_list.index(x)] for x in target_alignment_qname]
else:
target_alignment = new_alignment_dict[seq][0:max_tags]
for aln_qname in this_alignment_qname_list:
collapse_dict[aln_qname] = [x.qname for x in target_alignment]
new_alignment_list.extend( target_alignment )
return new_alignment_list, collapse_dict
评论列表
文章目录