Mercurial > repos > iuc > ivar_trim
diff prepare_amplicon_info.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 |
line wrap: on
line diff
--- a/prepare_amplicon_info.py Thu Mar 13 09:02:49 2025 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -# extends ivar trim's amplicon info parsing abilities -# to include calculation of amplicon regions from -# sets of nested (more than two) primers - -import sys - - -# parse primers and their start positions from BED file -primer_starts = {} -with open(sys.argv[1]) as i: - for line in i: - line = line.strip() - if not line: - continue - f = line.split('\t') - try: - if f[5] == '+': - primer_starts[f[3]] = int(f[1]) - elif f[5] == '-': - primer_starts[f[3]] = int(f[2]) - 1 - else: - raise ValueError() - except (IndexError, ValueError): - sys.exit( - 'Primer BED file needs to be TAB-separated with the ' - 'following columns: ' - 'chrom, chromStart, chromEnd, name, score, strand, ' - 'where "chromStart", "chromEnd" need to be integer values ' - 'and "strand" needs to be either "+" or "-".' - ) - -# parse amplicon info and record outer primer names -with open(sys.argv[2]) as i: - ret_lines = [] - for line in i: - line = line.strip() - if not line: - continue - first = last = None - for pname in line.split('\t'): - try: - primer_start = primer_starts[pname] - except KeyError: - sys.exit( - 'Amplicon info with primer name not found in ' - f'primer BED file: "{pname}"' - ) - if first is None or primer_start < primer_starts[first]: - first = pname - if last is None or primer_start > primer_starts[last]: - last = pname - if first == last: - sys.exit( - line - + 'is not a proper amplicon info line.' - ) - ret_lines.append(f'{first}\t{last}\n') - -# write amended amplicon info -with open(sys.argv[3], 'w') as o: - o.writelines(ret_lines)
