[45ad7e]: / singlecellmultiomics / bamProcessing / bamMappingRate.py

Download this file

45 lines (38 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python3
import os
import sys
import glob
import pysam
import colorama
import argparse
f'Please source or use an environment with python 3.6 or higher!'
if __name__ == '__main__':
argparser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description="""
Obtain mapping rate from libraries
""")
argparser.add_argument('bamfiles', nargs='+')
args = argparser.parse_args()
for bamfile in args.bamfiles:
mapped_reads_total = 0
unmapped_reads_total = 0
unpaired_reads_total = 0
total_reads = 0
try:
os.system(f'samtools idxstats {bamfile} > {bamfile}.stats.tsv')
with open(f'{bamfile}.stats.tsv') as f:
for line in f:
chrom, chlen, mapped_reads, unmapped_reads = line.strip().split()
mapped_reads = int(mapped_reads)
unmapped_reads = int(unmapped_reads)
total_reads += unmapped_reads
total_reads += mapped_reads
if chrom == '*':
unmapped_reads_total += unmapped_reads
else:
mapped_reads_total += mapped_reads
unpaired_reads_total += unmapped_reads
print(f'{bamfile}\t{colorama.Fore.GREEN}{mapped_reads_total}\t{colorama.Fore.RED}{unmapped_reads_total+unpaired_reads_total}\t{colorama.Style.RESET_ALL}{mapped_reads_total/total_reads}')
except Exception as e:
continue