Mercurial > repos > petr-novak > dante
comparison coverage2gff.py @ 15:3151a72a6671 draft
Uploaded
author | petr-novak |
---|---|
date | Tue, 03 Sep 2019 05:20:02 -0400 |
parents | |
children | 0e820310d4dc |
comparison
equal
deleted
inserted
replaced
14:a6c55d1bdb6c | 15:3151a72a6671 |
---|---|
1 #!/usr/bin/env python3 | |
2 import argparse | |
3 import tempfile | |
4 import shutil | |
5 import sys | |
6 | |
7 def parse_args(): | |
8 '''Argument parsin''' | |
9 description = """ | |
10 parsing cap3 assembly aln output | |
11 """ | |
12 | |
13 parser = argparse.ArgumentParser( | |
14 description=description, | |
15 formatter_class=argparse.RawTextHelpFormatter) | |
16 parser.add_argument( | |
17 '-g', | |
18 '--gff_file', | |
19 default=None, | |
20 required=True, | |
21 help="input gff3 file for appending coverage information", | |
22 type=str, | |
23 action='store') | |
24 parser.add_argument( | |
25 '-p', | |
26 '--profile', | |
27 default=None, | |
28 required=True, | |
29 help="output file for coverage profile", | |
30 type=str, | |
31 action="store") | |
32 return parser.parse_args() | |
33 | |
34 def read_coverage(profile): | |
35 with open(profile) as p: | |
36 d = {} | |
37 for name, prof in zip(p, p): | |
38 d[name[1:].strip()] = [int(i) for i in prof.split()] | |
39 print(d, file=sys.stderr) | |
40 return d | |
41 | |
42 | |
43 def main(): | |
44 args = parse_args() | |
45 coverage_hash = read_coverage(args.profile) | |
46 gff_tmp = tempfile.NamedTemporaryFile() | |
47 with open(args.gff_file) as f, open(gff_tmp.name, 'w') as out: | |
48 for line in f: | |
49 if line[0] == "#": | |
50 out.write(line) | |
51 else: | |
52 line_parts = line.split() | |
53 start = int(line_parts[3]) | |
54 end = int(line_parts[4]) | |
55 coverage = round( sum(coverage_hash[line_parts[0]][( | |
56 start - 1):end]) / (end - start + 1), 3) | |
57 new_line = "{};Coverage={}\n".format(line.strip(), coverage) | |
58 out.write(new_line) | |
59 | |
60 shutil.copyfile(gff_tmp.name, args.gff_file) | |
61 | |
62 | |
63 if __name__ == "__main__": | |
64 | |
65 main() |