comparison write_amplicon_info_file.py @ 22:6606a8c97889 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/ivar/ commit 97f230215d53e71748c78cd21633d92143710b94
author iuc
date Wed, 06 Aug 2025 08:21:20 +0000
parents 7bd020da0ce5
children
comparison
equal deleted inserted replaced
21:7bd020da0ce5 22:6606a8c97889
1 #!/usr/bin/env python
2
3 import argparse
4 import re
5
6
7 AMPLICON_PAT = re.compile(r'.*_(?P<num>\d+).*_(?P<name>L(?:EFT)?|R(?:IGHT)?)')
8
9
10 def write_amplicon_info_file(bed_file, amplicon_info_file):
11 amplicon_sets = {}
12 for line in bed_file:
13 line = line.strip()
14 if not line:
15 continue
16 fields = line.split('\t')
17 start = int(fields[1])
18 name = fields[3]
19 re_match = AMPLICON_PAT.match(name)
20 if re_match is None:
21 raise ValueError(
22 '{} does not match expected amplicon name format'.format(name)
23 )
24 amplicon_id = int(re_match.group('num'))
25 amplicon_set = amplicon_sets.get(amplicon_id, [])
26 amplicon_set.append((name, start))
27 amplicon_sets[amplicon_id] = amplicon_set
28
29 # write amplicons sorted by number with primers sorted by start position
30 for id in sorted(amplicon_sets):
31 amplicon_info = '\t'.join(
32 [name for name, start in sorted(
33 amplicon_sets[id], key=lambda x: x[1]
34 )]
35 ) + '\n'
36 amplicon_info_file.write(amplicon_info)
37 amplicon_info_file.close()
38
39
40 if __name__ == '__main__':
41 parser = argparse.ArgumentParser(
42 description='Write an amplicon info file for iVar '
43 'from a BED file describing primer positions'
44 )
45 parser.add_argument(
46 'bed_file', type=argparse.FileType(), help='Primer BED file'
47 )
48 parser.add_argument(
49 'amplicon_info_file', type=argparse.FileType('w'),
50 help='Output file: amplicon info file in TSV format'
51 )
52 args = parser.parse_args()
53
54 write_amplicon_info_file(args.bed_file, args.amplicon_info_file)