def iter_by_qname(in_genome_bam, in_trimmed_bam):
# Iterate through multiple BAMs by qname simultaneously
# Assume the trimmed-read-bam has every qname in the genome bam, in the same order.
genome_bam_iter = itertools.groupby(in_genome_bam, key=lambda read: read.qname)
if in_trimmed_bam is None:
trimmed_bam_iter = iter(())
else:
trimmed_bam_iter = itertools.groupby(in_trimmed_bam, key=lambda read: read.qname)
for (genome_qname, genome_reads), trimmed_tuple in itertools.izip_longest(genome_bam_iter,
trimmed_bam_iter):
trimmed_qname, trimmed_reads = trimmed_tuple or (None, [])
genome_reads = list(genome_reads)
trimmed_reads = list(trimmed_reads)
assert (in_trimmed_bam is None) or trimmed_qname == genome_qname
yield (genome_qname, genome_reads, trimmed_reads)
评论列表
文章目录