Mercurial > repos > iuc > ivar_trim
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) |
