def readBAM(BAMFile, contigs):
"""
Parses an aligned BAM file for coverage.
Args:
BAMFile: The BAM file to parse.
contigs: List of sidr.common.Contigs taken from input FASTA.
Returns:
contigs: Input contigs updated with coverage, measured as an
average over the whole contig.
"""
alignment = pysam.AlignmentFile(BAMFile, "rb")
click.echo("Reading BAM file")
with click.progressbar(contigs) as ci:
for contig in ci:
covArray = [] # coverage over contig = sum(coverage per base)/number of bases
for pile in alignment.pileup(region=str(contig)):
covArray.append(pile.nsegments)
try:
contigs[contig].variables["Coverage"] = (sum(covArray) / len(covArray))
except ZeroDivisionError: # should only occur if 0 coverage recorded
contigs[contig].variables["Coverage"] = 0
return contigs
评论列表
文章目录