Repository navigation
Expand file tree
/
Copy pathanno_select_longest.py
More file actions
executable file
·64 lines (48 loc) · 1.84 KB
/
Copy pathanno_select_longest.py
File metadata and controls
executable file
·64 lines (48 loc) · 1.84 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python3
import sys
import argparse
from collections import defaultdict
from operator import itemgetter
__author__ = "Ekaterina Osipova, 2022."
def read_into_dict(file):
## Read isoformes into dict
iso_dict = defaultdict(list)
with open(file, 'r') as inf:
for line in inf.readlines():
gene = line.rstrip().split()[0]
trans = line.rstrip().split()[1]
iso_dict[gene].append(trans)
return iso_dict
def read_anno_into_dict(anno, field):
## Reads bed12 annotation file into a dictionary ID : (LEN, trancs_info)
anno_dict = {}
with open(anno, 'r') as inf:
for line in inf.readlines():
if len(line.split()) < field - 1:
print('There is no field {} in the annotation! Abort'.format(field))
sys.exit(1)
else:
id = line.split()[field - 1]
exon_lens = line.split()[10].rstrip(',').split(',')
transc_len = sum([int(i) for i in exon_lens])
transc_info = line.rstrip()
anno_dict[id] = (transc_len, transc_info)
return anno_dict
def main():
## Parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--iso', type=str, help='isoformes file : gene \t transcript')
parser.add_argument('-a', '--anno', type=str, help='annotationin bed12 format')
args = parser.parse_args()
## Read isoforms into a dict
iso_dict = read_into_dict(args.iso)
## Read annotation into a dict
field = 4
anno_dict = read_anno_into_dict(args.anno, field)
## Output the longest isoform
for gene in iso_dict:
iso_info_list = [anno_dict[iso] for iso in iso_dict[gene]]
longest_iso = max(iso_info_list, key=itemgetter(0))[1]
print(longest_iso)
if __name__ == "__main__":
main()