diff --git a/bin/convert_VCF_info_fields.py b/bin/convert_VCF_info_fields.py deleted file mode 100755 index 19cef64..0000000 --- a/bin/convert_VCF_info_fields.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python3 - -# ----------------------------------------------------------------------------- -# The MIT License (MIT) - -# Copyright (c) 2014 galaxy-iuc - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# ----------------------------------------------------------------------------- - -# Takes in VCF file annotated with medaka tools annotate and converts -# -# Usage statement: -# python convert_VCF_info_fields.py in_vcf.vcf out_vcf.vcf - -# 10/21/2020 - Nathan P. Roach, natproach@gmail.com - -# adapted June 2024 - Marie Lataretu, lataretum@rki.de -# source for this scripts: -# https://github.com/galaxyproject/tools-iuc/blob/fd148a124034b44d0d61db3eec32ff991d8c152c/tools/medaka/convert_VCF_info_fields.py - -import re -import sys -from collections import OrderedDict -from math import log10 - -import scipy.stats - - -def pval_to_phredqual(pval): - try: - ret = round(-10 * log10(pval)) - except ValueError: - ret = 2147483647 # transform pval of 0.0 to max signed 32 bit int - return ret - - -def parseInfoField(info): - info_fields = info.split(";") - info_dict = OrderedDict() - for info_field in info_fields: - code, val = info_field.split("=") - info_dict[code] = val - return info_dict - - -def annotateVCF(in_vcf_filepath, out_vcf_filepath): - """Postprocess output of medaka tools annotate. - - Splits multiallelic sites into separate records. - Replaces medaka INFO fields that might represent information of the ref - and multiple alternate alleles with simple ref, alt allele counterparts. - """ - - in_vcf = open(in_vcf_filepath, "r") - # medaka INFO fields that do not make sense after splitting of - # multi-allelic records - # DP will be overwritten with the value of DPSP because medaka tools - # annotate currently only calculates the latter correctly - # (https://github.com/nanoporetech/medaka/issues/192). - # DPS, which is as unreliable as DP, gets skipped and the code - # calculates the spanning reads equivalent DPSPS instead. - to_skip = {"SC", "SR", "AR", "DP", "DPSP", "DPS"} - struct_meta_pat = re.compile("##(.+)=") - header_lines = [] - contig_ids = set() - contig_ids_simple = set() - # parse the metadata lines of the input VCF and drop: - # - duplicate lines - # - INFO lines declaring keys we are not going to write - # - redundant contig information - while True: - line = in_vcf.readline() - if line[:2] != "##": - assert line.startswith("#CHROM") - break - if line in header_lines: - # the annotate tool may generate lines already written by - # medaka variant again (example: medaka version line) - continue - match = struct_meta_pat.match(line) - if match: - match_type, match_id, match_misc = match.groups() - if match_type == "INFO": - if match_id == "DPSP": - line = line.replace("DPSP", "DP") - elif match_id in to_skip: - continue - elif match_type == "contig": - contig_ids.add(match_id) - if not match_misc: - # the annotate tools writes its own contig info, - # which is redundant with contig info generated by - # medaka variant, but lacks a length value. - # We don't need the incomplete line. - contig_ids_simple.add(match_id) - continue - header_lines.append(line) - # Lets check the above assumption about each ID-only contig line - # having a more complete counterpart. - assert not (contig_ids_simple - contig_ids) - header_lines.insert(1, "##convert_VCF_info_fields=0.2\n") - header_lines += [ - '##INFO=\n', - '##INFO=\n', - '##INFO=\n', - '##INFO=\n', - '##INFO=\n', - '##INFO=\n', - '##INFO=\n', - line, - ] - - with open(out_vcf_filepath, "w") as out_vcf: - out_vcf.writelines(header_lines) - for line in in_vcf: - fields = line.split("\t") - info_dict = parseInfoField(fields[7]) - sr_list = [int(x) for x in info_dict["SR"].split(",")] - sc_list = [int(x) for x in info_dict["SC"].split(",")] - if len(sr_list) != len(sc_list): - print("WARNING - SR and SC are different lengths, " "skipping variant") - print(line.strip()) # Print the line for debugging purposes - continue - variant_list = fields[4].split(",") - dpsp = int(info_dict["DPSP"]) - ref_fwd, ref_rev = 0, 1 - dpspf, dpspr = (int(x) for x in info_dict["AR"].split(",")) - for i in range(0, len(sr_list), 2): - dpspf += sr_list[i] - dpspr += sr_list[i + 1] - for j, i in enumerate(range(2, len(sr_list), 2)): - dp4 = (sr_list[ref_fwd], sr_list[ref_rev], sr_list[i], sr_list[i + 1]) - dp2x2 = [[dp4[0], dp4[1]], [dp4[2], dp4[3]]] - _, p_val = scipy.stats.fisher_exact(dp2x2) - sb = pval_to_phredqual(p_val) - - as_ = (sc_list[ref_fwd], sc_list[ref_rev], sc_list[i], sc_list[i + 1]) - - info = [] - for code in info_dict: - if code in to_skip: - continue - val = info_dict[code] - info.append("%s=%s" % (code, val)) - - info.append("DP=%d" % dpsp) - info.append("DPSPS=%d,%d" % (dpspf, dpspr)) - - if dpsp == 0: - info.append("AF=.") - else: - af = (dp4[2] + dp4[3]) / dpsp - info.append("AF=%.6f" % af) - if dpspf == 0: - info.append("FAF=.") - else: - faf = dp4[2] / dpspf - info.append("FAF=%.6f" % faf) - if dpspr == 0: - info.append("RAF=.") - else: - raf = dp4[3] / dpspr - info.append("RAF=%.6f" % raf) - info.append("SB=%d" % sb) - info.append("DP4=%d,%d,%d,%d" % dp4) - info.append("AS=%d,%d,%d,%d" % as_) - new_info = ";".join(info) - fields[4] = variant_list[j] - fields[7] = new_info - out_vcf.write("\t".join(fields)) - in_vcf.close() - - -if __name__ == "__main__": - annotateVCF(sys.argv[1], sys.argv[2]) \ No newline at end of file diff --git a/bin/patch_legacy_bed.py b/bin/patch_legacy_bed.py new file mode 100755 index 0000000..ab93415 --- /dev/null +++ b/bin/patch_legacy_bed.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +import sys +from Bio import SeqIO +import pandas as pd + +reference_file = sys.argv[1] +bed_file = sys.argv[2] +patched_bed_file_name = f"{bed_file.replace('.bed', '.patched')}.bed" + +print(f"Reading input files REF: '{reference_file}', BED: '{bed_file}' ...") + +ref_seq = next(SeqIO.parse(reference_file, "fasta")) +bed_df = pd.read_csv(bed_file, sep="\t", names = ['chrom', 'chromStart', 'chromEnd', 'primer-name', 'pool', 'strand']) + +if len(bed_df.columns) > 6: + print('BED file is not in deprecated format and does not have to be patched for artic, how did you end up in this script?') + quit() + +print('Patching BED file primer sequences ...') + +bed_df['primer-sequence'] = bed_df.apply( + lambda row: str(ref_seq.seq[row['chromStart']:row['chromEnd']]) if row['strand'] == "+" else str(ref_seq.seq[row['chromStart']:row['chromEnd']].reverse_complement()), + axis=1 +) + +print(f"Writing patched BED file '{patched_bed_file_name}' ...") + +bed_df.to_csv(patched_bed_file_name, sep = '\t', header = False, index = False) + +print(f"Done.") diff --git a/configs/container.config b/configs/container.config index bd863e4..c903958 100755 --- a/configs/container.config +++ b/configs/container.config @@ -2,9 +2,9 @@ process { // DONT add GUPPY containers here !!! they are maintained via process // pangolin container is maintained via params.defaultpangolin in nextflow.config // nextclade container is maintained via params.defaultpangolin in nextflow.config - withLabel: artic { container = 'nanozoo/artic:1.3.0-dev--784493e' } + withLabel: artic { container = 'community.wave.seqera.io/library/artic:1.8.4--1f7aeb3df7a7d5e1' } withLabel: bwa { container = 'nanozoo/bwa:0.7.17--d11c0a4' } - withLabel: covarplot { container = 'nanozoo/covarplot:0.0.2--2c6e300' } + withLabel: covarplot { container = 'nanozoo/covarplot:0.0.3--f7d5d8e' } withLabel: demultiplex { container = 'nanozoo/guppy_cpu:5.0.7-1--47b84be' } withLabel: fastcov { container = 'raverjay/fastcov:0.1.3--ba8c8cf6ae19' } withLabel: freyja { container = 'staphb/freyja:1.5.0-03_27_2024-00-48-2024-03-27' } diff --git a/data/external_primer_schemes/aliases.json b/data/external_primer_schemes/aliases.json new file mode 100644 index 0000000..498809f --- /dev/null +++ b/data/external_primer_schemes/aliases.json @@ -0,0 +1 @@ +{"artic-chikungunya-virus": "artic-chikv-ecsa", "artic-yellow-fever": "artic-yfv-west-east-africa", "hepatitis-a-virus": "hav", "hepatitis-b-virus": "hbv", "hepatitis-e-virus": "hev", "ncov-2019": "artic-sars-cov-2", "sars-cov-2": "artic-sars-cov-2"} \ No newline at end of file diff --git a/data/external_primer_schemes/index.json b/data/external_primer_schemes/index.json new file mode 100644 index 0000000..c12c09f --- /dev/null +++ b/data/external_primer_schemes/index.json @@ -0,0 +1 @@ +{"github-commit-sha": "98fb292f8c00a7a0107a03aff9d005d61482de5f", "primerschemes": {"artic-chikv-ecsa": {"400": {"v1.0.0": {"algorithmversion": "primalscheme:3.0.3", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick-lab", "artic-network"], "citations": [], "collections": [], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-chikv-ecsa/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "5baff1de9489d4f3a62759bee611b8ea", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-chikv-ecsa/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "910eddd8a3e7b1b29a63ba24c48cf098", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-chikv-ecsa/400/v1.0.0/reference.fasta", "schemename": "artic-chikv-ecsa", "schemeversion": "v1.0.0", "species": [37124], "status": "draft"}}}, "artic-inrb-mpox": {"2500": {"v1.0.0": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "41dd2e95cbe2bda6be8556dd118c84fe", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7ca540c38981c844710721e5165d2b77", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0/reference.fasta", "refselect": {"KJ642613.1_masked": {"filename": "KJ642613.1_masked_refselect.fasta", "md5": "58062d2989d1d040b7fa06050a8b6040", "url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0/KJ642613.1_masked_refselect.fasta"}}, "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0", "species": [10244], "status": "validated"}, "v1.0.0-cladeia": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeia/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "41dd2e95cbe2bda6be8556dd118c84fe", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeia/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7ca540c38981c844710721e5165d2b77", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeia/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0-cladeia", "species": [10244], "status": "validated"}, "v1.0.0-cladeib": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeib/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "9ab6b8ace91a6e553dcd98772a28e654", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeib/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "da7b582735fd40f4fa4f96599e9d099c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeib/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0-cladeib", "species": [10244], "status": "validated"}, "v1.0.0-cladeiia": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiia/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "3286284151f7186e13eb9f8dea020d22", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiia/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "c34096003739375ed9deb262023d145d", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiia/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0-cladeiia", "species": [10244], "status": "validated"}, "v1.0.0-cladeiib": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiib/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "209d92e5d0354854064f6ef1c2e5e3d8", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiib/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "b6d72272045e76ca501cbb5371dd5a9d", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.0-cladeiib/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0-cladeiib", "species": [10244], "status": "validated"}, "v1.0.1": {"algorithmversion": "primalscheme3", "ampliconsize": 2500, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.1/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "cd8a4ef1c4ab66b4e4cae8f0abc3f2d2", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.1/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7ca540c38981c844710721e5165d2b77", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/2500/v1.0.1/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.1", "species": [10244], "status": "validated"}}, "400": {"v1.0.0": {"algorithmversion": "primalscheme3", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["ARTIC network", "INRB", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "b94ba3dc78e467463ac52f1c7214ba0c", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7ca540c38981c844710721e5165d2b77", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-inrb-mpox/400/v1.0.0/reference.fasta", "schemename": "artic-inrb-mpox", "schemeversion": "v1.0.0", "species": [10244], "status": "draft"}}}, "artic-marv": {"1200": {"v1.0.0": {"algorithmversion": "primalscheme3", "ampliconsize": 1200, "articbedversion": "v3.0", "authors": ["ARTIC network", "Quick Lab"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-marv/1200/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "de08005c31adc3e9a3fcb713aaa298d8", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-marv/1200/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "99fef270892d906f609712ec8d613381", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-marv/1200/v1.0.0/reference.fasta", "schemename": "artic-marv", "schemeversion": "v1.0.0", "species": [3052505], "status": "draft"}}}, "artic-measles": {"400": {"v1.0.0": {"algorithmversion": "primalscheme3:1.1.4", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chris Kent", "Quick Lab"], "citations": ["https://doi.org/10.1101/2024.12.20.629611"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-measles/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "b75c16322b1e1c5e606917b5653c01f1", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-measles/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "64a52bcc7c18986db1c11813db518390", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-measles/400/v1.0.0/reference.fasta", "schemename": "artic-measles", "schemeversion": "v1.0.0", "species": [11234], "status": "validated"}}}, "artic-pan-dengue": {"400": {"v1.0.0": {"algorithmversion": "3.0.3", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["ARTIC-network", "DeZi Network"], "citations": [], "collections": [], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-dengue/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "6ea45a1d1a65daee4bf3254e56accc0c", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-dengue/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "a31748c927951fe164172d3b8232f07d", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-dengue/400/v1.0.0/reference.fasta", "schemename": "artic-pan-dengue", "schemeversion": "v1.0.0", "species": [12637], "status": "draft"}}}, "artic-pan-ebola": {"1000": {"v1.0.0": {"algorithmversion": "primalscheme3:1.1.0", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["artic", "quick-lab"], "citations": ["https://virological.org/t/near-real-time-genomic-characterization-of-the-2025-sudan-ebolavirus-outbreak-in-uganda-s-index-case-insights-into-evolutionary-origins/990"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-ebola/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "6b9554c28693b521cfbe2246091c61af", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-ebola/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "c5432a6813f9a2604ea5e5e2bb94508e", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-pan-ebola/1000/v1.0.0/reference.fasta", "schemename": "artic-pan-ebola", "schemeversion": "v1.0.0", "species": [3044781], "status": "validated"}}}, "artic-sars-cov-2": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": ["https://doi.org/10.1038/nprot.2017.066"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v1.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "c79fcfba30e22def02857c8455576a82", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v1.0.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v1.0.0", "species": [2697049], "status": "deprecated"}, "v2.0.0": {"algorithmversion": "primalscheme1:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": ["https://doi.org/10.1038/nprot.2017.066"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v2.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "1557b50d412bfdc84f8e8b55652235e6", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v2.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v2.0.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v2.0.0", "species": [2697049], "status": "deprecated"}, "v3.0.0": {"algorithmversion": "primalscheme1:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["artic network", "quick lab"], "citations": ["https://doi.org/10.1038/nprot.2017.066"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v3.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "28daaaaffdb5b4755679f63df52a4d64", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v3.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v3.0.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v3.0.0", "species": [2697049], "status": "deprecated"}, "v4.0.0": {"algorithmversion": "primalscheme1:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["artic network", "quick lab"], "citations": [], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "5077a58857f44ace5a9ccd36589749a9", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.0.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v4.0.0", "species": [2697049], "status": "deprecated"}, "v4.1.0": {"algorithmversion": "primalscheme1:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": ["https://doi.org/10.1038/nprot.2017.066"], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.1.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "fa3f9b79958aa302aea429aca5a7c729", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.1.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v4.1.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v4.1.0", "species": [2697049], "status": "deprecated"}, "v5.0.0": {"algorithmversion": "primalscheme2:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["artic network", "quick lab"], "citations": [], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "5f418a89de5057d03d6c3eb53cad7f65", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.0.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v5.0.0", "species": [2697049], "status": "deprecated"}, "v5.2.0": {"algorithmversion": "primalscheme2:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": [], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.2.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "bcc36e40e758395f14dbd20f67e1e18d", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.2.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.2.0/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v5.2.0", "species": [2697049], "status": "deprecated"}, "v5.3.2": {"algorithmversion": "primalscheme2:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["artic network", "quick lab", "bccdc"], "citations": [], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.3.2/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "46a3aeddc452678bd0cd33efc1c9558f", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.3.2/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7f8995394dfc7d5ffeb9fe8322ade58c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.3.2/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v5.3.2", "species": [2697049], "status": "validated"}, "v5.4.2": {"algorithmversion": "primalscheme2:1.0.0", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Artic Network", "Quick Lab", "BCCDC"], "citations": [], "collections": ["ARTIC", "CLINICAL-ISOLATES", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.4.2/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "e7897c8be8e488836ce7777e7709ea53", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.4.2/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "d11d06b5d1eb1d85c69e341c3c026e08", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-sars-cov-2/400/v5.4.2/reference.fasta", "schemename": "artic-sars-cov-2", "schemeversion": "v5.4.2", "species": [2697049], "status": "validated"}}}, "artic-yfv-west-east-africa": {"400": {"v1.0.0": {"algorithmversion": "primalscheme:3.0.3", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick-lab", "artic-network"], "citations": [], "collections": ["ARTIC", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-yfv-west-east-africa/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "f061bf40a679846f0036ec8a9242d281", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-yfv-west-east-africa/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "b687d08a0227ccb08f2b79a9b7a0db1c", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/artic-yfv-west-east-africa/400/v1.0.0/reference.fasta", "schemename": "artic-yfv-west-east-africa", "schemeversion": "v1.0.0", "species": [11089], "status": "draft"}}}, "bccdc-mpox": {"2500": {"v2.3.0": {"algorithmversion": "primalscheme2", "ampliconsize": 2500, "articbedversion": "v2.0", "authors": ["BCCDC Public Health Laboratory"], "citations": ["dx.doi.org/10.17504/protocols.io.n2bvj34nnlk5/v1"], "collections": ["ARTIC", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/bccdc-mpox/2500/v2.3.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "eb66e63891d728357ad084eba020fe74", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/bccdc-mpox/2500/v2.3.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "fb686f305d99a4e39b1e2caf5a7c988a", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/bccdc-mpox/2500/v2.3.0/reference.fasta", "schemename": "bccdc-mpox", "schemeversion": "v2.3.0", "species": [10244], "status": "validated"}}}, "ethz-eawag-h1n1-h3n2": {"400": {"v1.0.0": {"algorithmversion": "primalscheme3:1.1.4", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Anika John", "Seju Kang", "Lara Fuhrmann", "Ivan Topolsky", "Chris Kent", "Josh Quick", "Timothy R. Julian", "Niko Beerenwinkel"], "citations": [], "collections": ["COMMUNITY", "MULTI-TARGET", "WASTE-WATER"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/ethz-eawag-h1n1-h3n2/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "e90efd4f16f533fcb39203cca854f7b1", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/ethz-eawag-h1n1-h3n2/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "fe045198b2df5021549aede48fd6b2e5", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/ethz-eawag-h1n1-h3n2/400/v1.0.0/reference.fasta", "schemename": "ethz-eawag-h1n1-h3n2", "schemeversion": "v1.0.0", "species": [36420, 41857], "status": "validated"}}}, "hav": {"400": {"v1.0.0": {"algorithmversion": "primalscheme3:1.1.5", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chris Kent", "Quick Lab"], "citations": [], "collections": ["MODJADJI", "QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hav/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "cfe6cf31d9673a9e3ab0a8e20dc9ad57", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hav/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "ab1fa7d7814de5eea0ba9d11644d0d6b", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hav/400/v1.0.0/reference.fasta", "schemename": "hav", "schemeversion": "v1.0.0", "species": [208726], "status": "draft"}}}, "hbv": {"500": {"v1.0.0": {"algorithmversion": "primaldigest:1.1.2", "ampliconsize": 500, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": [], "collections": ["CLINICAL-ISOLATES", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.0.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "c49dd3634bb727c6e04dba56236c5352", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7612eab3e2389215206ae17187da1791", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.0.0/reference.fasta", "schemename": "hbv", "schemeversion": "v1.0.0", "species": [10407], "status": "deprecated"}, "v1.1.0": {"algorithmversion": "primaldigest:1.1.3", "ampliconsize": 500, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": [], "collections": ["CLINICAL-ISOLATES", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.1.0/info.json", "license": "CC-BY-4.0", "primer_bed_md5": "4700089ebc8db0b88296512dcfc47818", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.1.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7612eab3e2389215206ae17187da1791", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/500/v1.1.0/reference.fasta", "schemename": "hbv", "schemeversion": "v1.1.0", "species": [10407], "status": "deprecated"}}, "600": {"v2.0.0": {"algorithmversion": "primalscheme3:1.1.3", "ampliconsize": 600, "articbedversion": "v3.0", "authors": ["Dr Sheila Lumley", "Chris Kent", "Quick Lab"], "citations": [], "collections": ["CLINICAL-ISOLATES", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "b87ea41cdc94f223cd4cc836f6d333eb", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "b01f2e0109981e19316692538f57b4d9", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.0.0/reference.fasta", "schemename": "hbv", "schemeversion": "v2.0.0", "species": [10407], "status": "tested"}, "v2.1.0": {"algorithmversion": "primalscheme3:1.1.4", "ampliconsize": 600, "articbedversion": "v3.0", "authors": ["Dr Sheila Lumley", "Chris Kent", "Quick Lab"], "citations": [], "collections": ["CLINICAL-ISOLATES", "QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.1.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "fe08351d442639483b771b2a9c1e3039", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.1.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "b01f2e0109981e19316692538f57b4d9", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hbv/600/v2.1.0/reference.fasta", "schemename": "hbv", "schemeversion": "v2.1.0", "species": [10407], "status": "validated"}}}, "hev": {"400": {"v1.0.0": {"algorithmversion": "primalscheme3:1.1.4", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["artic network", "quick lab"], "citations": [], "collections": ["QUICK-LAB", "WASTE-WATER", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hev/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "c74a6ee17c526bdbf6cb7f98435bd922", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hev/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "5322c8052fb3d379b18ae06ca775237b", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/hev/400/v1.0.0/reference.fasta", "schemename": "hev", "schemeversion": "v1.0.0", "species": [291484], "status": "draft"}}}, "marv-2023": {"1000": {"v1.0.0": {"algorithmversion": "primaldigest:0.1.0", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Chris Kent", "Quick Lab"], "citations": [], "collections": ["QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/marv-2023/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "dd71caa5dfb12f963704396ca3ecd28c", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/marv-2023/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "2bca0f13c96d85bc48acaa1522531540", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/marv-2023/1000/v1.0.0/reference.fasta", "schemename": "marv-2023", "schemeversion": "v1.0.0", "species": [3052505], "status": "draft"}}}, "mers-cov": {"400": {"v1.0.0": {"algorithmversion": "primaldigest:1.2.2", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": [], "collections": ["QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/mers-cov/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "44cd0826cb40f4dae7ad8982d34f7009", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/mers-cov/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "957cb36597491259c943120c55ca57d9", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/mers-cov/400/v1.0.0/reference.fasta", "schemename": "mers-cov", "schemeversion": "v1.0.0", "species": [1335626], "status": "draft"}}}, "modjadji-tb-panel": {"400": {"v1.0.0": {"algorithmversion": "primalscheme3", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["articnetwork", "modjadji"], "citations": [], "collections": [], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/modjadji-tb-panel/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "ab5874ee58f7da855065a5d5c9c7cedd", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/modjadji-tb-panel/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "0e8f3acd2c92f20c42105e014adbfe97", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/modjadji-tb-panel/400/v1.0.0/reference.fasta", "schemename": "modjadji-tb-panel", "schemeversion": "v1.0.0", "species": [1773], "status": "draft"}}}, "norovirus-gii": {"800": {"v1.0.0": {"algorithmversion": "primaldigest:1.2.2", "ampliconsize": 800, "articbedversion": "v3.0", "authors": ["Anna Kovalenko", "quick lab", "artic network"], "citations": [], "collections": ["QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "0c0e8a4dd7b6e3287b60c555a14144ad", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "88cba0415494cd9837e2523051cb636f", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.0.0/reference.fasta", "schemename": "norovirus-gii", "schemeversion": "v1.0.0", "species": [122929], "status": "tested"}, "v1.1.0": {"algorithmversion": "primaldigest:1.2.2", "ampliconsize": 800, "articbedversion": "v3.0", "authors": ["Anna Kovalenko", "quick lab", "artic network"], "citations": [], "collections": ["QUICK-LAB", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.1.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "084a18ffafd8b33998038de709dc5b5e", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.1.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "88cba0415494cd9837e2523051cb636f", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/norovirus-gii/800/v1.1.0/reference.fasta", "schemename": "norovirus-gii", "schemeversion": "v1.1.0", "species": [122929], "status": "tested"}}}, "pan-measles": {"1000": {"v1.0.0": {"algorithmversion": "primaldigest:1.2.2", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["artic network", "quick lab"], "citations": [], "collections": [], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/pan-measles/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "33c3448c2f09aed2166c0e22848866a9", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/pan-measles/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "64a52bcc7c18986db1c11813db518390", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/pan-measles/1000/v1.0.0/reference.fasta", "schemename": "pan-measles", "schemeversion": "v1.0.0", "species": [11234], "status": "draft"}}}, "rsva-rsvb": {"1000": {"v1.0.0": {"algorithmversion": "primalscheme3:0.1.0", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Quick-lab", "BCCDC"], "citations": [], "collections": ["MULTI-TARGET", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/rsva-rsvb/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "86ade75b8623839e69b0999ef9dbc0a0", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/rsva-rsvb/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "7e5199236195a5fb3a61b552225e9432", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/rsva-rsvb/1000/v1.0.0/reference.fasta", "schemename": "rsva-rsvb", "schemeversion": "v1.0.0", "species": [11250], "status": "tested"}}}, "varvamp-bodv-1": {"400": {"v1.0.0": {"algorithmversion": "varVAMP:0.6", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-bodv-1/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "ee859faf41cfd7c5c662a1b4b11ec478", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-bodv-1/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "47f4b12bac1051c565b535623f5e4098", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-bodv-1/400/v1.0.0/reference.fasta", "schemename": "varvamp-bodv-1", "schemeversion": "v1.0.0", "species": [1714621], "status": "validated"}}}, "varvamp-hav": {"1000": {"v1.0.0": {"algorithmversion": "varVAMP:0.8.3", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hav/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "bc39625c800f707d82a273c79bbf6710", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hav/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "d65a09200bbec78ffa410740ba3143ff", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hav/1000/v1.0.0/reference.fasta", "schemename": "varvamp-hav", "schemeversion": "v1.0.0", "species": [470424], "status": "validated"}}}, "varvamp-hev3-ch1-m-i-uc-l": {"1000": {"v1.0.0": {"algorithmversion": "varVAMP:0.8.2", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3-ch1-m-i-uc-l/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "1376c891fc6bc631698877ee9edb3cfc", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3-ch1-m-i-uc-l/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "cb7e70c64382a1a8434ab3923a6265c9", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3-ch1-m-i-uc-l/1000/v1.0.0/reference.fasta", "schemename": "varvamp-hev3-ch1-m-i-uc-l", "schemeversion": "v1.0.0", "species": [291484], "status": "validated"}}}, "varvamp-hev3ef": {"1000": {"v1.0.0": {"algorithmversion": "varVAMP:0.8.2", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3ef/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "56ffe2d88ae5be613f4dc3831043d90e", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3ef/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "50bf069e781ff4462d495ebd5904b56a", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-hev3ef/1000/v1.0.0/reference.fasta", "schemename": "varvamp-hev3ef", "schemeversion": "v1.0.0", "species": [291484], "status": "validated"}}}, "varvamp-polio": {"1000": {"v1.0.0": {"algorithmversion": "varVAMP:0.8", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-polio/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "a3543252563e22b770368904bdd8cbbf", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-polio/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "8db764b16699f75eb7cb438ed7224c0b", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-polio/1000/v1.0.0/reference.fasta", "schemename": "varvamp-polio", "schemeversion": "v1.0.0", "species": [12080, 12083, 12086], "status": "validated"}}}, "varvamp-rathev": {"1200": {"v1.0.0": {"algorithmversion": "varVAMP:0.8.3", "ampliconsize": 1200, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-rathev/1200/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "8d9fcdcc3e571792d9d2ffea190d3b8a", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-rathev/1200/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "6901e6ce9dd33aa804ee327a73660896", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-rathev/1200/v1.0.0/reference.fasta", "schemename": "varvamp-rathev", "schemeversion": "v1.0.0", "species": [1678145], "status": "validated"}}}, "varvamp-sars-cov-2": {"700": {"v1.0.0": {"algorithmversion": "varVAMP:0.9.4", "ampliconsize": 700, "articbedversion": "v3.0", "authors": ["Jonas Fuchs"], "citations": [], "collections": ["CLINICAL-ISOLATES", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-sars-cov-2/700/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "dd970083426f3c0d986ce105548fb4c9", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-sars-cov-2/700/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "c12180b68bcc554de9fa27522e491592", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/varvamp-sars-cov-2/700/v1.0.0/reference.fasta", "schemename": "varvamp-sars-cov-2", "schemeversion": "v1.0.0", "species": [2697049], "status": "validated"}}}, "who-tb-amr-panel": {"1000": {"v1.0.0": {"algorithmversion": "primalpanel:0.1.0", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["quick lab", "artic network"], "citations": [], "collections": ["MODJADJI", "PANEL", "QUICK-LAB"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "5f7e27087a0ec714275ba44b0ec27524", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "77cabd2a9f46614628d15371081ab4a1", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v1.0.0/reference.fasta", "schemename": "who-tb-amr-panel", "schemeversion": "v1.0.0", "species": [1773], "status": "draft"}, "v2.0.0": {"algorithmversion": "primalscheme3:1.1.2", "ampliconsize": 1000, "articbedversion": "v3.0", "authors": ["Chris Kent", "Quick lab"], "citations": [], "collections": ["MODJADJI", "PANEL", "QUICK-LAB"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v2.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "a63b24ae3669ebfd11c938c9fa37d648", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v2.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "77cabd2a9f46614628d15371081ab4a1", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/who-tb-amr-panel/1000/v2.0.0/reference.fasta", "schemename": "who-tb-amr-panel", "schemeversion": "v2.0.0", "species": [1773], "status": "draft"}}}, "yale-dev1": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chantal Vogels", "Verity Hill", "Mallery I Breban", "Chrispin Chaguza", "Afeez Sodeinde", "Emma Taylor-Salmon", "Abigail J. Porzucek", "Nathan D Grubaugh"], "citations": ["https://doi.org/10.1186/s12864-024-10350-x"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev1/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "d9313af2b6e87cf9afc0fee4d17ebeb0", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev1/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "cad1eaac8e6d90db62c25c8a8b9a644b", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev1/400/v1.0.0/reference.fasta", "schemename": "yale-dev1", "schemeversion": "v1.0.0", "species": [11053], "status": "validated"}}}, "yale-dev2": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chantal Vogels", "Verity Hill", "Mallery I Breban", "Chrispin Chaguza", "Afeez Sodeinde", "Emma Taylor-Salmon", "Abigail J. Porzucek", "Nathan D Grubaugh"], "citations": ["https://doi.org/10.1186/s12864-024-10350-x"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev2/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "d57ba5b105236d5df89ce440a1da63a2", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev2/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "9736a9a27e5ffeacd1c94019123af2f0", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev2/400/v1.0.0/reference.fasta", "schemename": "yale-dev2", "schemeversion": "v1.0.0", "species": [11060], "status": "validated"}}}, "yale-dev3": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chantal Vogels", "Verity Hill", "Mallery I Breban", "Chrispin Chaguza", "Afeez Sodeinde", "Emma Taylor-Salmon", "Abigail J. Porzucek", "Nathan D Grubaugh"], "citations": ["https://doi.org/10.1186/s12864-024-10350-x"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev3/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "bcbe1286c8c3e415764ed20fe4aa7a09", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev3/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "b0775470da71b7e22b05ab404755762e", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev3/400/v1.0.0/reference.fasta", "schemename": "yale-dev3", "schemeversion": "v1.0.0", "species": [11069], "status": "validated"}}}, "yale-dev4": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Chantal Vogels", "Verity Hill", "Mallery I Breban", "Chrispin Chaguza", "Afeez Sodeinde", "Emma Taylor-Salmon", "Abigail J. Porzucek", "Nathan D Grubaugh"], "citations": ["https://doi.org/10.1186/s12864-024-10350-x"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev4/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "472825670930a1f8a4333a3fe72259cc", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev4/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "fd26f6849d42201db457b46461554839", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-dev4/400/v1.0.0/reference.fasta", "schemename": "yale-dev4", "schemeversion": "v1.0.0", "species": [11070], "status": "validated"}}}, "yale-mpox": {"2000": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 2000, "articbedversion": "v3.0", "authors": ["Nicholas F.G. Chen", "Luc Gagne", "Glen R. Gallagher", "Chantal B.F. Vogels"], "citations": ["https://doi.org/10.1371/journal.pbio.3002151"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "f9fe29b44517167f18f9eaf66a141c44", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "585ffed8901fb4478dae3b9895e14376", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0/reference.fasta", "schemename": "yale-mpox", "schemeversion": "v1.0.0", "species": [10244], "status": "validated"}, "v1.0.0-cladei": {"algorithmversion": "primalscheme1", "ampliconsize": 2000, "articbedversion": "v3.0", "authors": ["Artic Network", "Nicholas F.G. Chen", "Luc Gagne", "Glen R. Gallagher", "Chantal B.F. Vogels"], "citations": [], "collections": ["ARTIC", "COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladei/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "5d1f7fc61e3fce597819a4a2a095e287", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladei/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "5b7977abeef3917669889e901703b37a", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladei/reference.fasta", "schemename": "yale-mpox", "schemeversion": "v1.0.0-cladei", "species": [10244], "status": "tested"}, "v1.0.0-cladeii": {"algorithmversion": "primalscheme1", "ampliconsize": 2000, "articbedversion": "v3.0", "authors": ["Nicholas F.G. Chen", "Luc Gagne", "Glen R. Gallagher", "Chantal B.F. Vogels"], "citations": ["https://doi.org/10.1371/journal.pbio.3002151"], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladeii/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "f9fe29b44517167f18f9eaf66a141c44", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladeii/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "585ffed8901fb4478dae3b9895e14376", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-mpox/2000/v1.0.0-cladeii/reference.fasta", "schemename": "yale-mpox", "schemeversion": "v1.0.0-cladeii", "species": [10244], "status": "validated"}}}, "yale-powassan-virus": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v2.0", "authors": ["Chantal Vogels", "Nathan Grubaugh"], "citations": [], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-powassan-virus/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "0ace7f3f32d025559f81cf7848bd96ca", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-powassan-virus/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "45de4c26388d5f33eeb33d03eaa6594d", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-powassan-virus/400/v1.0.0/reference.fasta", "schemename": "yale-powassan-virus", "schemeversion": "v1.0.0", "species": [11082], "status": "tested"}}}, "yale-strep-pneumo": {"2000": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 2000, "articbedversion": "v3.0", "authors": ["Freddy Gonzalez", "Isabella Distefano", "Chaney Kalinich", "Seth Redmond", "Nathan Grubaugh"], "citations": [], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-strep-pneumo/2000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "ca2090fa4c64b75fd5d83c2f7858908f", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-strep-pneumo/2000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "fe6730ebb4572f3e7d3e6d7f9bf45bdb", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-strep-pneumo/2000/v1.0.0/reference.fasta", "schemename": "yale-strep-pneumo", "schemeversion": "v1.0.0", "species": [1313], "status": "tested"}}}, "yale-tb": {"2000": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 2000, "articbedversion": "v2.0", "authors": ["Chaney Kalinich", "Freddy Gonzalez", "Isabella Distefano", "Seth Redmond", "Nathan Grubaugh"], "citations": [], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-tb/2000/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "7e720bec9e7f68eb367f5a67024a93b1", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-tb/2000/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "a5cd7cf2ad058fcad2e341d285cf16d7", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-tb/2000/v1.0.0/reference.fasta", "schemename": "yale-tb", "schemeversion": "v1.0.0", "species": [1773], "status": "tested"}}}, "yale-west-nile-virus": {"400": {"v1.0.0": {"algorithmversion": "primalscheme1", "ampliconsize": 400, "articbedversion": "v3.0", "authors": ["Nicole Feriancek", "Chantal Vogels", "Nathan Grubaugh"], "citations": [], "collections": ["COMMUNITY", "WHOLE-GENOME"], "info_json_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-west-nile-virus/400/v1.0.0/info.json", "license": "CC BY-SA 4.0", "primer_bed_md5": "8573a30b249950a1ae418d2c1a1c9c7e", "primer_bed_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-west-nile-virus/400/v1.0.0/primer.bed", "primerclass": "primerschemes", "reference_fasta_md5": "52385748c447473eea248d081b03eb1b", "reference_fasta_url": "https://raw.githubusercontent.com/quick-lab/primerschemes/main/primerschemes/yale-west-nile-virus/400/v1.0.0/reference.fasta", "schemename": "yale-west-nile-virus", "schemeversion": "v1.0.0", "species": [11082], "status": "tested"}}}}} \ No newline at end of file diff --git a/modules/add_alt_allele_ratio_vcf.nf b/modules/count_mixed_sites.nf similarity index 60% rename from modules/add_alt_allele_ratio_vcf.nf rename to modules/count_mixed_sites.nf index 396f301..f707fb4 100644 --- a/modules/add_alt_allele_ratio_vcf.nf +++ b/modules/count_mixed_sites.nf @@ -1,4 +1,4 @@ -process add_alt_allele_ratio_vcf { +process count_mixed_sites { label 'artic' publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy' input: @@ -13,25 +13,14 @@ process add_alt_allele_ratio_vcf { """ # reheader failed VCF and change FILTER echo '##FILTER=' > add-to-hdr.txt - # -c and --rename-annots add a header with a default/wrong description bcftools annotate -h add-to-hdr.txt -c "FILTER/ARTICFAIL:=FILTER/PASS" ${failed_vcf} | sed '/##FILTER=/d' > tmp_failed_updated-filter.vcf # concat failed and passed VCF - bcftools concat ${vcf} tmp_failed_updated-filter.vcf | bcftools sort -o tmp_merged.vcf - - # call medaka tools annotate for each pool and add the alternate allele ratio - for pool in `cut -f5 ${primer_dir}/${primer_version_tag}/nCoV-2019.scheme.bed | sort | uniq`; do - bcftools view -i 'INFO/Pool="'\$pool'"' tmp_merged.vcf -o tmp_\$pool.vcf - medaka tools annotate --dpsp --pad 25 --RG \$pool tmp_\$pool.vcf ${primer_dir}/${primer_version_tag}/nCoV-2019.reference.fasta ${bam} tmp_annotated_\$pool.vcf - convert_VCF_info_fields.py tmp_annotated_\$pool.vcf tmp_aar_\$pool.vcf - done - - # merge pool VCF and sort VCF - bcftools concat tmp_aar_*.vcf | bcftools sort -o ${name}_all-vars-with-aar.vcf + bcftools concat ${vcf} tmp_failed_updated-filter.vcf | bcftools sort -o ${name}_all-vars-with-aar.vcf # count mixed sites # thresholds for human geotyping: 0.35 <= x <= 0.65 - NUM_MIXED_SITES=\$(bcftools view -H -i 'INFO/DP>${params.min_depth} & INFO/AF>=0.3 & INFO/AF<=0.8' ${name}_all-vars-with-aar.vcf | wc -l) + NUM_MIXED_SITES=\$(bcftools view -H -i 'FORMAT/DP>${params.min_depth} & FORMAT/AF>=0.3 & FORMAT/AF<=0.8' ${name}_all-vars-with-aar.vcf | wc -l) echo sample,num_mixed_sites > mixed_sites_stats.csv echo ${name},\$NUM_MIXED_SITES >> mixed_sites_stats.csv diff --git a/modules/plot_coverages.nf b/modules/plot_coverages.nf index 5088a97..3d1e793 100644 --- a/modules/plot_coverages.nf +++ b/modules/plot_coverages.nf @@ -9,8 +9,17 @@ process plot_coverages { path("coverages_*.png") script: """ - fastcov.py -l -o coverages_\$(echo ${alignment_files} | tr ' ' '_').png ${alignment_files} - fastcov.py -l -p NC_045512.2:21563-25385 -o coverages_spike_\$(echo ${alignment_files} | tr ' ' '_').png ${alignment_files} + output_name=coverages_\$(echo ${alignment_files} | tr ' ' '_').png + output_name_no_ext=\${output_name//.bam/} + output_name=\$output_name_no_ext + + if [ \${#output_name} -gt 255 ]; then + echo "Output file name exceeds filename character limit" + output_name="\${output_name:0:240}.png" + fi + + fastcov.py -l -o \$output_name ${alignment_files} + fastcov.py -l -p NC_045512.2:21563-25385 -o \$output_name ${alignment_files} """ stub: """ diff --git a/nextflow.config b/nextflow.config index 166306a..0aba34b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,8 +40,9 @@ params { krakendb = '' lcs = false localguppy = false - medaka_model = 'r941_min_hac_g507' - nanopolish = '' + clair3_model_name = 'r1041_e82_400bps_sup_v410' + // --model-dir defaults to CONDA_ROOT_PREFIX but somehow this is not set in seqera containers and instead points to MAMBA_ROOT... + clair3_model_dir = '/opt/conda/bin/models/' one_end = false single = false update = false @@ -57,7 +58,9 @@ params { scorpio = false // parameters - primerV = 'V3' + primerV = 'v1.0.0' + primerRef = '' + schemeLength = 400 minLength = false maxLength = false rapid = false @@ -75,6 +78,10 @@ params { seqrepair = "5.Genome-primer-repair" jsondir = "6.json-summaries" runinfodir = "X.Pipeline-runinfo" + + // deprecated params + nanopolish = false + medaka_model = false } // runinfo @@ -99,11 +106,11 @@ includeConfig ({ profiles { test_fastq { - params.primerV = 'V1200' + params.primerV = 'v1.0.0' } stub { - params.primerV = 'V1200' + params.primerV = 'v1.0.0' } test_fasta { diff --git a/poreCov.nf b/poreCov.nf index 5ce21a0..15b5729 100755 --- a/poreCov.nf +++ b/poreCov.nf @@ -16,13 +16,13 @@ include { get_fasta } from './modules/get_fasta_test_data.nf' include { align_to_reference } from './modules/align_to_reference.nf' include { split_fasta } from './modules/split_fasta.nf' include { filter_fastq_by_length } from './modules/filter_fastq_by_length.nf' -include { add_alt_allele_ratio_vcf } from './modules/add_alt_allele_ratio_vcf.nf' +include { count_mixed_sites } from './modules/count_mixed_sites.nf' /************************** * Workflows **************************/ -include { artic_ncov_wf; artic_ncov_np_wf } from './workflows/artic_nanopore_nCov19.nf' +include { artic_ncov_wf } from './workflows/artic_nanopore_nCov19.nf' include { basecalling_wf } from './workflows/basecalling.nf' include { collect_fastq_wf } from './workflows/collect_fastq.nf' include { create_json_entries_wf } from './workflows/create_json_entries.nf' @@ -42,6 +42,7 @@ include { pangolin } from './workflows/process/pangolin.nf' workflow { header() + /************************** * HELP messages & checks **************************/ @@ -98,8 +99,8 @@ workflow { exit 1, "input missing, use [--fasta] [--fastq] [--fastq_pass] or [--fast5]" } if ( params.fastq && params.fastq_pass ) { exit 1, "Please use either: [--fastq] or [--fastq_pass]"} if ( params.fasta && ( params.fastq || params.fast5 || params.fastq_pass)) { exit 1, "Please use [--fasta] without inputs like: [--fastq], [--fastq_pass], [--fast5]" } - if (( params.fastq || params.fastq_pass ) && params.fast5 && !params.nanopolish ) { - exit 1, "Simultaneous fastq and fast5 input is only supported with [--nanopolish]"} + if (params.list && params.fasta) { exit 1, "[--fasta] and [--list] is not supported" } + } if ( (params.cores.toInteger() > params.max_cores.toInteger()) && workflow.profile.contains('local')) { @@ -114,8 +115,9 @@ workflow { if (params.fast5 == true) { exit 5, "Please provide a fast5 dir via [--fast5]" } if (params.minLength && !params.minLength.toString().matches("[0-9]+")) { exit 5, "Please provide an integer number (e.g. 300) as minimal read length via [--minLength]" } if (params.maxLength && !params.maxLength.toString().matches("[0-9]+")) { exit 5, "Please provide an integer number (e.g. 300) as maximum read length via [--maxLength]" } - if (params.nanopolish == true && (params.fastq || params.fastq_pass) ) { exit 5, "Please provide sequencing_summary.txt via [--nanopolish]" } - if (!workflow.profile.contains('test_fast5')) { if (params.nanopolish && !params.fast5 ) { exit 5, "Please provide a fast5 dir for nanopolish [--fast5]" } } + if (params.nanopolish) { println "\033[0;33mWarning: Parameter [--nanopolish] is deprecated, ignoring flag.\033[0m" } + if (params.medaka_model) { println "\033[0;33mWarning: Parameter [--medaka_model] is deprecated, please use [--clair3_model_dir] and / or [--clair3_model_name] to specify a non default model.\033[0m" } + // check correct usage of param-flags if (params.extended && !params.samples ) { exit 5, "When using --extended you need to specify also a sample.csv via [--samples]" } @@ -125,6 +127,21 @@ workflow { if (!params.screen_reads && params.lcs) {exit 5, "[--lcs] requires [--screen_reads] to work"} if (!params.screen_reads && params.freyja) {exit 5, "[--freyja] requires [--screen_reads] to work"} + + +// validate primer scheme version format + def fetched_version = "${params.primerV}" =~ /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/ + def legacy_primerV = ['V1','V1200','V2','V3','V4','V4.1','V5','V5.1','V5.2.0_1200','V5.3.2_400'] + if (!fetched_version && !("${params.primerV}".contains('.bed')) && !(legacy_primerV.any{params.primerV.contains(it)})){ exit 1, "Invalid scheme version format '${params.primerV}' provided, please provide a version in the format 'vX.X.X', e.g. v1.0.0" } + if ("${params.primerV}".contains('.bed') && !params.primerRef){ exit 1, "Custom primer scheme '${params.primerV}' was provided without primer reference. Please pass a primer scheme reference sequence via [--primerRef]." } + + if ("${params.primerV}".contains('_') && !("${params.primerV}".contains('.bed')) || (legacy_primerV.any{params.primerV.contains(it)} && !("${params.primerV}".contains('.bed')))){ + println "\033[2mPrimer scheme version in legacy format detected. Using local nCov-19 primer schemes.\033[0m" + legacy_primerV = true + } else { + legacy_primerV = false + } + // validating sample table if (params.samples) { @@ -259,11 +276,6 @@ workflow { } } else { lsc_ucsc_work_version = params.lcs_ucsc_version} - -/************************** -* Log-infos -**************************/ - defaultMSG() if ( params.fast5 || workflow.profile.contains('test_fast5') ) { basecalling() } if (!params.fasta && !workflow.profile.contains('test_fasta')) { read_length() } @@ -294,24 +306,17 @@ workflow { noreadsatall = filtered_reads_ch.ifEmpty{ log.info "\033[0;33mNot enough reads in all samples, please investigate $params.output/$params.readqcdir\033[0m" } read_classification_wf(filtered_reads_ch) - // use medaka or nanopolish artic reconstruction - if (params.nanopolish) { - artic_ncov_np_wf(filtered_reads_ch, dir_input_ch, basecalling_wf.out[1], artic_ncov_np_wf) - fasta_input_ch = artic_ncov_np_wf.out.assembly - } - else if (!params.nanopolish) { - artic_ncov_wf(filtered_reads_ch, params.artic_normalize) - fasta_input_ch = artic_ncov_wf.out.assembly + artic_ncov_wf(legacy_primerV, filtered_reads_ch, params.artic_normalize) + fasta_input_ch = artic_ncov_wf.out.assembly - // add alternative allele ratio to the VCF - if (params.primerV.toString().contains(".bed")) { - external_primer_schemes = artic_ncov_wf.out.primer_dir - } - else { - external_primer_schemes = file(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - } - add_alt_allele_ratio_vcf(artic_ncov_wf.out.trimmed_bam.join(artic_ncov_wf.out.vcf).join(artic_ncov_wf.out.failed_vcf), external_primer_schemes) + // count mixed sites + if (params.primerV.toString().contains(".bed")) { + external_primer_schemes = artic_ncov_wf.out.primer_dir + } + else { + external_primer_schemes = file(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) } + count_mixed_sites(artic_ncov_wf.out.trimmed_bam.join(artic_ncov_wf.out.vcf).join(artic_ncov_wf.out.failed_vcf), external_primer_schemes) } // fastq input via dir and or files if ( (params.fastq || params.fastq_pass) || workflow.profile.contains('test_fastq')) { @@ -329,30 +334,18 @@ workflow { noreadsatall = filtered_reads_ch.ifEmpty{ log.info "\033[0;33mNot enough reads in all samples, please investigate $params.output/$params.readqcdir\033[0m" } read_classification_wf(filtered_reads_ch) - // use medaka or nanopolish artic reconstruction - if (params.nanopolish && !params.fast5 ) { exit 3, "Please provide fast5 data for nanopolish via [--fast5]" } - else if (params.nanopolish && params.fast5 && (params.fastq_pass || params.fastq ) ) { - // get sequence summary from nanopolish - sequence_summary_ch = Channel.fromPath( params.nanopolish, checkIfExists: true ).map { file -> tuple(file.name, file) } - - external_primer_schemes = Channel.fromPath(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - - artic_ncov_np_wf(filtered_reads_ch, dir_input_ch, sequence_summary_ch, artic_ncov_np_wf) - fasta_input_ch = artic_ncov_np_wf.out - } - else if (!params.nanopolish) { - artic_ncov_wf(filtered_reads_ch, params.artic_normalize) - fasta_input_ch = artic_ncov_wf.out.assembly - - // add alternative allele ratio to the VCF - if (params.primerV.toString().contains(".bed")) { - external_primer_schemes = artic_ncov_wf.out.primer_dir - } - else { - external_primer_schemes = file(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - } - add_alt_allele_ratio_vcf(artic_ncov_wf.out.trimmed_bam.join(artic_ncov_wf.out.vcf).join(artic_ncov_wf.out.failed_vcf), external_primer_schemes) + // genome reconstruction with artic + artic_ncov_wf(legacy_primerV, filtered_reads_ch, params.artic_normalize) + fasta_input_ch = artic_ncov_wf.out.assembly + + // count mixed_sites + if (params.primerV.toString().contains(".bed")) { + external_primer_schemes = artic_ncov_wf.out.primer_dir } + else { + external_primer_schemes = file(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) + } + count_mixed_sites(artic_ncov_wf.out.trimmed_bam.join(artic_ncov_wf.out.vcf).join(artic_ncov_wf.out.failed_vcf), external_primer_schemes) } // 2. Genome quality, lineages, clades and mutations @@ -389,10 +382,10 @@ workflow { } alignments_ch = align_to_reference(filtered_reads_ch.combine(reference_for_qc_input_ch)) } - if (params.fasta || workflow.profile.contains('test_fasta') || params.nanopolish ) { + if (params.fasta || workflow.profile.contains('test_fasta')) { alt_allele_ratio_ch = Channel.from( ['deactivated'] ) } else { - alt_allele_ratio_ch = add_alt_allele_ratio_vcf.out.stats + alt_allele_ratio_ch = count_mixed_sites.out.stats } /* @@ -421,9 +414,6 @@ def helpMSG() { nextflow run replikation/poreCov --update --fastq '*.fasta.gz' -r 1.3.0 -profile local,singularity - nextflow run replikation/poreCov --fastq '*.fasta.gz' --fast5 dir/ --nanopolish sequencing_summary.txt \ - -profile local,docker - ${c_yellow}Inputs (choose one):${c_reset} --fast5 One fast5 dir of a nanopore run containing multiple samples (barcoded) Add the flag [--single] if no barcodes were used @@ -486,18 +476,19 @@ ${c_yellow}Parameters - Basecalling (optional)${c_reset} ${c_dim}e.g. "dna_r9.4.1_450bps_hac.cfg" or "dna_r9.4.1_450bps_sup.cfg"${c_reset} ${c_yellow}Parameters - SARS-CoV-2 genome reconstruction (optional)${c_reset} - --primerV Supported primer variants or primer bed files - choose one [default: ${params.primerV}] - ${c_dim}ARTIC:${c_reset} V1, V2, V3, V4, V4.1, V.5, V.5.1, V.5.3.2_400 - ${c_dim}NEB:${c_reset} VarSkipV1a, VarSkipV2, VarSkipV2b - ${c_dim}Other:${c_reset} V1200, V5.2.0_1200 ${c_dim}(also known as midnight)${c_reset} - ${c_dim}Primer bed file:${c_reset} e.g. primers.bed ${c_dim}See Readme for more help${c_reset} - --rapid Rapid-barcoding-kit was used [default: ${params.rapid}] - --minLength Min length filter raw reads [default: 100] - --maxLength Max length filter raw reads - [default: 700 (primer-scheme: V1-4, rapid); 1500 (primer-scheme: V1200, V5.2.0_1200)] - --min_depth Nucleotides below min depth will be masked to "N" [default ${params.min_depth}] - --medaka_model Medaka model for the artic workflow [default: ${params.medaka_model}] - ${c_dim}e.g. "r941_min_hac_g507" or "r941_min_sup_g507"${c_reset} + --primerV Supported primer variants or primer bed files - choose one [default: ${params.primerV}] + ${c_dim}ARTIC (>v1.6.0) :${c_reset} V1, V2, V3, V4, V4.1, V.5, V.5.1, V.5.3.2_400 + ${c_dim}ARTIC (>=v1.6.0):${c_reset} v1.0.0, v2.0.0, v3.0.0, v4.0.0, v4.1.0, v5.0.0, v5.1.0, v5.3.2 + ${c_dim}NEB:${c_reset} VarSkipV1a, VarSkipV2, VarSkipV2b + ${c_dim}Other:${c_reset} V1200, V5.2.0_1200 ${c_dim}(also known as midnight)${c_reset} + ${c_dim}Primer bed file:${c_reset} e.g. primers.bed ${c_dim}See Readme for more help${c_reset} + --schemeLength primer scheme length, e.g. 400, 700; artic remote primers are length 400, varvamp remote primers 700 [default: ${params.schemeLength}] + --rapid rapid-barcoding-kit was used [default: ${params.rapid}] + --minLength min length filter raw reads [default: 100] + --maxLength max length filter raw reads [default: 700 (primer-scheme: V1-4, rapid); 1500 (primer-scheme: V1200, V5.2.0_1200)] + --min_depth nucleotides below min depth will be masked to "N" [default ${params.min_depth}] + --clair3_model_dir directory to look for clair3 model files [default: ${params.clair3_model_dir}] + --clair3_model_name clair3 model for the artic workflow [default: ${params.clair3_model_name}] ${c_yellow}Parameters - Genome quality control (optional)${c_reset} --reference_for_qc Reference FASTA for consensus qc (optional, wuhan is provided by default) @@ -567,7 +558,8 @@ def defaultMSG(){ $params.cachedir ${c_reset} Parameters: - ${c_dim}Medaka model: $params.medaka_model [--medaka_model] + ${c_dim}Clair3 model: $params.clair3_model_name [--clair3_model_name] + Clair3 model dir: $params.clair3_model_dir Min depth nucleotide: $params.min_depth [--min_depth] Latest Pangolin/Nextclade?: $params.update [--update] CPUs to use: $params.cores [--cores] @@ -605,7 +597,13 @@ def read_length() { def log_msg_read_min_length = params.minLength def log_msg_read_max_length = params.maxLength - if ( params.primerV.matches('V1200') || params.primerV.matches('V5.2.0_1200') ) { + if ( params.primerV.matches('V1200') || params.primerV.matches('V5.2.0_1200') || params.schemeLength == 1200) { + + if ( params.primerV.matches('V1200') || params.primerV.matches('V5.2.0_1200')){ + println "\033[0;33mWarning: Definition of primer scheme length via --primerV is deprecated, please use --schemeLength instead. Setting length to 1200 ... ${c_reset}" + params.schemeLength = 1200 + } + if ( !params.minLength ) { log_msg_read_min_length = 400 } if ( !params.maxLength ) { log_msg_read_max_length = 1500 } } @@ -617,6 +615,7 @@ def read_length() { log.info """ Primerscheme: $params.primerV [--primerV] + Length: $params.schemeLength [--schemeLength] ${c_dim}Min read-length set to: $log_msg_read_min_length [--minLength] - Max read-length set to: $log_msg_read_max_length [--maxLength]${c_reset} """.stripIndent() + Max read-length set to: $log_msg_read_max_length [--maxLength]${c_reset}""".stripIndent() } diff --git a/workflows/artic_nanopore_nCov19.nf b/workflows/artic_nanopore_nCov19.nf index 3eca2d6..ffee05d 100755 --- a/workflows/artic_nanopore_nCov19.nf +++ b/workflows/artic_nanopore_nCov19.nf @@ -1,110 +1,64 @@ -include { artic_medaka ; artic_nanopolish; artic_medaka_custom_bed; artic_nanopolish_custom_bed } from './process/artic.nf' +include { artic ; artic_custom_bed } from './process/artic.nf' include { covarplot; covarplot_custom_bed } from './process/covarplot.nf' workflow artic_ncov_wf { - take: + take: + legacy_primerV fastq normalise_threshold main: + // assembly with a primer bed file - if (params.primerV.toString().contains(".bed")) { - primerBed = Channel.fromPath(params.primerV, checkIfExists: true ) + if (params.primerV.toString().contains(".bed") || legacy_primerV) { + + if (legacy_primerV) { + primerRef = "${workflow.projectDir}/data/external_primer_schemes/nCoV-2019/${params.primerV}/nCoV-2019.reference.fasta" + primerBed = Channel.fromPath("${workflow.projectDir}/data/external_primer_schemes/nCoV-2019/${params.primerV}/nCoV-2019.primer.bed", checkIfExists: true ) + } else { + primerRef = "${workflow.projectDir}/${params.primerRef}" + primerBed = Channel.fromPath("${workflow.projectDir}/${params.primerV}", checkIfExists: true ) + } external_primer_schemes = Channel.fromPath(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - artic_medaka_custom_bed(fastq.combine(external_primer_schemes).combine(primerBed), normalise_threshold) - assembly = artic_medaka_custom_bed.out.fasta - binary_alignment = artic_medaka_custom_bed.out.fullbam - trimmed_bam = artic_medaka_custom_bed.out.reference_bam - vcf = artic_medaka_custom_bed.out.vcf - failed_vcf = artic_medaka_custom_bed.out.vcf_fail - primer_dir = artic_medaka_custom_bed.out.primer_dir + artic_custom_bed(fastq.combine(external_primer_schemes).combine(primerBed), normalise_threshold, primerRef) + assembly = artic_custom_bed.out.fasta + //binary_alignment = artic_custom_bed.out.fullbam + trimmed_bam = artic_custom_bed.out.reference_bam + vcf = artic_custom_bed.out.vcf + failed_vcf = artic_custom_bed.out.vcf_fail + primer_dir = artic_custom_bed.out.primer_dir // plot amplicon coverage - covarplot_custom_bed(artic_medaka_custom_bed.out.covarplot.combine(primerBed)) + covarplot_custom_bed(artic_custom_bed.out.covarplot.combine(primerBed)) } // assembly via pre installed Primers else { external_primer_schemes = Channel.fromPath(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - artic_medaka(fastq.combine(external_primer_schemes), normalise_threshold) - assembly = artic_medaka.out.fasta - binary_alignment = artic_medaka.out.fullbam - trimmed_bam = artic_medaka.out.reference_bam - vcf = artic_medaka.out.vcf - failed_vcf = artic_medaka.out.vcf_fail + artic(fastq.combine(external_primer_schemes), normalise_threshold) + assembly = artic.out.fasta + //binary_alignment = artic.out.fullbam + trimmed_bam = artic.out.reference_bam + vcf = artic.out.vcf + failed_vcf = artic.out.vcf_fail primer_dir = Channel.empty() // plot amplicon coverage - covarplot(artic_medaka.out.covarplot.combine(external_primer_schemes)) + covarplot(artic.out.covarplot.combine(external_primer_schemes)) } // error logging assembly.ifEmpty{ log.info "\033[0;33mCould not generate any genomes, please check your reads $params.output/$params.readqcdir\033[0m" } - binary_alignment.ifEmpty{ log.info "\033[0;33mCould not generate any genomes, please check your reads $params.output/$params.readqcdir\033[0m" } + //binary_alignment.ifEmpty{ log.info "\033[0;33mCould not generate any genomes, please check your reads $params.output/$params.readqcdir\033[0m" } emit: assembly - binary_alignment + //binary_alignment trimmed_bam vcf primer_dir failed_vcf } - -workflow artic_ncov_np_wf { - take: - fastq - fast5 - sequence_summaries - normalise_threshold - main: - - // assembly - if (params.primerV.toString().contains(".bed")) { - primerBed = Channel.fromPath(params.primerV, checkIfExists: true ) - external_primer_schemes = Channel.fromPath(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - - artic_nanopolish_custom_bed( - fastq - .combine(external_primer_schemes) - .combine(fast5.map{it -> it[1]}) - .combine(sequence_summaries) - .combine(primerBed) - .map{it -> tuple(it[0],it[1],it[2],it[3],it[5],it[6])}, - normalise_threshold - ) - - assembly = artic_nanopolish_custom_bed.out.fasta - binary_alignment = artic_nanopolish_custom_bed.out.fullbam - - // plot amplicon coverage - covarplot_custom_bed(artic_nanopolish_custom_bed.out.covarplot.combine(primerBed)) - } - - - // assembly via pre installed Primers - else { - external_primer_schemes = Channel.fromPath(workflow.projectDir + "/data/external_primer_schemes", checkIfExists: true, type: 'dir' ) - artic_nanopolish( - fastq - .combine(external_primer_schemes) - .combine(fast5.map{it -> it[1]}) - .combine(sequence_summaries) - .map{it -> tuple(it[0],it[1],it[2],it[3],it[5])}, - normalise_threshold - ) - - assembly = artic_nanopolish.out.fasta - binary_alignment = artic_nanopolish.out.fullbam - - // plot amplicon coverage - covarplot(artic_nanopolish.out.covarplot.combine(external_primer_schemes)) - } - - emit: - assembly - binary_alignment -} diff --git a/workflows/process/artic.nf b/workflows/process/artic.nf index 6c738a4..19e6cdb 100755 --- a/workflows/process/artic.nf +++ b/workflows/process/artic.nf @@ -1,4 +1,4 @@ -process artic_medaka { +process artic { label 'artic' publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "*.consensus.fasta" publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}_mapped_*.primertrimmed.sorted.bam*" @@ -9,6 +9,7 @@ process artic_medaka { publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.coverage_mask.txt" publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.fail.vcf" + input: tuple val(name), path(reads), path(external_scheme) val(normalise_threshold) @@ -17,29 +18,39 @@ process artic_medaka { tuple val(name), path("${name}_mapped_*.primertrimmed.sorted.bam"), path("${name}_mapped_*.primertrimmed.sorted.bam.bai"), emit: reference_bam tuple val(name), path("SNP_${name}.pass.vcf"), emit: vcf tuple val(name), path("${name}.pass.vcf.gz"), path("${name}.coverage_mask.txt.*1.depths"), path("${name}.coverage_mask.txt.*2.depths"), emit: covarplot - tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam + //tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam // seems like this was removed in 1.8.1? https://github.com/artic-network/fieldbioinformatics/compare/v1.8.0...v1.8.1#diff-fffa888a76dc7b9d6e46c423ad95b91b045c4767e43662c5eb6f9b9d9a6da243R167 tuple val(name), path("${name}.primersitereport.txt"), emit: primersitereport tuple val(name), path("${name}.coverage_mask.txt"), emit: coverage_mask tuple val(name), path("${name}.fail.vcf"), emit: vcf_fail script: - def normalise_arg = normalise_threshold ? "--normalise ${normalise_threshold}" : '--normalise 0' + def normalise_arg = normalise_threshold ? "--normalise ${normalise_threshold}" : '--normalise 0' // why is the --normalise flag not part of the bash script ^^ """ - artic minion --medaka \ - --medaka-model ${params.medaka_model} \ - --min-depth ${params.min_depth} \ + artic minion --min-depth ${params.min_depth} \ ${normalise_arg} \ --threads ${task.cpus} \ --scheme-directory ${external_scheme} \ --read-file ${reads} \ - nCoV-2019/${params.primerV} ${name} + --scheme-name ${params.schemeLength == 400 ? 'artic' : 'varvamp'}-sars-cov-2 \ + --scheme-version ${params.primerV} \ + --model-dir ${params.clair3_model_dir} \ + --model ${params.clair3_model_name} \ + ${name} + + echo 'artic minion ran successfully' + + # artic_make_depth_mask is running as part of artic minion already now https://github.com/artic-network/fieldbioinformatics/blob/master/artic/minion.py#L208 + # so we have to rename the depth file, otherwise artic depth mask will append to the file doubling the content + mv ${name}.coverage_mask.txt ${name}.coverage_mask_from_minion.txt # generate depth files artic_make_depth_mask --depth ${params.min_depth} \ - --store-rg-depths ${external_scheme}/nCoV-2019/${params.primerV}/nCoV-2019.reference.fasta \ + --store-rg-depths ${external_scheme}/${params.schemeLength == 400 ? 'artic' : 'varvamp'}-sars-cov-2/${params.schemeLength}/${params.primerV}/reference.fasta \ ${name}.primertrimmed.rg.sorted.bam \ ${name}.coverage_mask.txt + echo 'artic_make_depth_mask ran successfully' + zcat ${name}.pass.vcf.gz > SNP_${name}.pass.vcf sed -i "1s/.*/>${name}/" *.consensus.fasta @@ -61,11 +72,11 @@ process artic_medaka { ${name}.trimmed.rg.sorted.bam \ ${name}.primersitereport.txt \ ${name}.coverage_mask.txt \ - ${name}.fail.vcf + ${name}.fail.vcf """ } -process artic_medaka_custom_bed { +process artic_custom_bed { label 'artic' publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "*.consensus.fasta" publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}_mapped_*.primertrimmed.sorted.bam*" @@ -79,198 +90,75 @@ process artic_medaka_custom_bed { input: tuple val(name), path(reads), path(external_scheme), path(primerBed) val(normalise_threshold) + path(primerRef) output: tuple val(name), path("*.consensus.fasta"), emit: fasta tuple val(name), path("${name}_mapped_*.primertrimmed.sorted.bam"), path("${name}_mapped_*.primertrimmed.sorted.bam.bai"), emit: reference_bam tuple val(name), path("SNP_${name}.pass.vcf"), emit: vcf tuple val(name), path("${name}.pass.vcf.gz"), path("${name}.coverage_mask.txt.*1.depths"), path("${name}.coverage_mask.txt.*2.depths"), emit: covarplot - tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam + //tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam // seems like this was removed in 1.8.1? https://github.com/artic-network/fieldbioinformatics/compare/v1.8.0...v1.8.1#diff-fffa888a76dc7b9d6e46c423ad95b91b045c4767e43662c5eb6f9b9d9a6da243R167 tuple val(name), path("${name}.primersitereport.txt"), emit: primersitereport tuple val(name), path("${name}.coverage_mask.txt"), emit: coverage_mask tuple val(name), path("${name}.fail.vcf"), emit: vcf_fail path ("primer_scheme/nCoV-2019/"), emit: primer_dir - script: + script: def normalise_arg = normalise_threshold ? "--normalise ${normalise_threshold}" : '--normalise 0' """ # create a new primer dir as input for artic - mkdir -p primer_scheme/nCoV-2019 - cp -r ${external_scheme}/nCoV-2019/V_custom primer_scheme/nCoV-2019/ + mkdir -p primer_scheme/nCoV-2019/V_custom + cp -r ${primerRef} primer_scheme/nCoV-2019/V_custom # clean up bed file: replace first colum with MN908947.3, remove empty lines and sort by 4th column (primer names) cut -f2- ${primerBed} |\ sed '/^[[:space:]]*\$/d' |\ sed -e \$'s/^/MN908947.3\\t/' |\ - sort -k4 > primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed - + sort -k4,4V > primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed + + # check if BED file has to be patched + # artic 1.8+ will fail on V1 primer bed files with: IndexError: Invalid BED line value: (['MN908947.3', '2826', '2850', 'nCoV-2019_10_LEFT', '2', '+']): has incorrect number of columns + if [ "\$(head -n 1 primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed | awk -F'\\t' '{print NF}')" -eq 6 ]; then + echo "Trying to patch legacy BED file ..." + patch_legacy_bed.py ${primerRef} primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed + BED="primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.patched.bed" + else + echo "No BED patching needed." + BED="primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed" + fi + + echo 'starting artic' # start artic - artic minion --medaka \ - --medaka-model ${params.medaka_model} \ - --min-depth ${params.min_depth} \ - ${normalise_arg} \ - --threads ${task.cpus} \ - --scheme-directory primer_scheme \ - --read-file ${reads} \ - nCoV-2019/V_custom ${name} - + artic minion --min-depth ${params.min_depth} \ + ${normalise_arg} \ + --threads ${task.cpus} \ + --ref primer_scheme/nCoV-2019/V_custom/*fasta \ + --bed \$BED \ + --read-file ${reads} \ + --model-dir ${params.clair3_model_dir} \ + --model ${params.clair3_model_name} \ + ${name} + + echo 'generating depth files' + # artic_make_depth_mask is running as part of artic minion already now https://github.com/artic-network/fieldbioinformatics/blob/master/artic/minion.py#L208 + # so we have to rename the depth file, otherwise artic depth mask will append to the file doubling the content + mv ${name}.coverage_mask.txt ${name}.coverage_mask_from_minion.txt # generate depth files artic_make_depth_mask --depth ${params.min_depth} \ - --store-rg-depths primer_scheme/nCoV-2019/V_custom/nCoV-2019.reference.fasta \ + --store-rg-depths primer_scheme/nCoV-2019/V_custom/*.fasta \ ${name}.primertrimmed.rg.sorted.bam \ ${name}.coverage_mask.txt + echo 'unzipping vcf' zcat ${name}.pass.vcf.gz > SNP_${name}.pass.vcf sed -i "1s/.*/>${name}/" *.consensus.fasta + echo 'rename bam' # get reference FASTA ID to rename BAM REF=\$(samtools view -H ${name}.primertrimmed.rg.sorted.bam | awk 'BEGIN{FS="\\t"};{if(\$1=="@SQ"){print \$2}}' | sed 's/SN://g') mv ${name}.primertrimmed.rg.sorted.bam ${name}_mapped_\${REF}.primertrimmed.sorted.bam samtools index ${name}_mapped_\${REF}.primertrimmed.sorted.bam - """ - stub: - """ - touch genome.consensus.fasta \ - ${name}_mapped_1.primertrimmed.sorted.bam \ - ${name}_mapped_1.primertrimmed.sorted.bam.bai \ - SNP_${name}.pass.vcf \ - ${name}.pass.vcf.gz \ - ${name}.coverage_mask.txt.nCoV-2019_1.depths \ - ${name}.coverage_mask.txt.nCoV-2019_2.depths \ - ${name}.trimmed.rg.sorted.bam \ - ${name}.primersitereport.txt \ - ${name}.coverage_mask.txt \ - ${name}.fail.vcf - """ -} - - -process artic_nanopolish { - label 'artic' - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "*.consensus.fasta" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}_mapped_*.primertrimmed.sorted.bam*" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}.trimmed.rg.sorted.bam" - publishDir "${params.output}/${params.genomedir}/all_consensus_sequences/", mode: 'copy', pattern: "*.consensus.fasta" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}.primersitereport.txt" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "SNP_${name}.pass.vcf" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.coverage_mask.txt" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.fail.vcf" - - input: - tuple val(name), path(reads), path(external_scheme), path(fast5_dir), path(txt_files) - val(normalise_threshold) - output: - tuple val(name), path("*.consensus.fasta"), emit: fasta - tuple val(name), path("${name}_mapped_*.primertrimmed.sorted.bam"), path("${name}_mapped_*.primertrimmed.sorted.bam.bai"), emit: reference_bam - tuple val(name), path("SNP_${name}.pass.vcf"), emit: vcf - tuple val(name), path("${name}.pass.vcf.gz"), path("${name}.coverage_mask.txt.*1.depths"), path("${name}.coverage_mask.txt.*2.depths"), emit: covarplot - tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam - tuple val(name), path("${name}.primersitereport.txt"), emit: primersitereport - tuple val(name), path("${name}.coverage_mask.txt"), emit: coverage_mask - tuple val(name), path("${name}.fail.vcf"), emit: vcf_fail - script: - def normalise_arg = normalise_threshold ? "--normalise ${normalise_threshold}" : '--normalise 0' - """ - artic minion --minimap2 \ - ${normalise_arg} \ - --threads ${task.cpus} \ - --scheme-directory ${external_scheme} \ - --read-file ${reads} \ - --fast5-directory ${fast5_dir} \ - --sequencing-summary sequencing_summary*.txt \ - nCoV-2019/${params.primerV} ${name} - - # generate depth files - artic_make_depth_mask --depth ${params.min_depth} \ - --store-rg-depths ${external_scheme}/nCoV-2019/${params.primerV}/nCoV-2019.reference.fasta \ - ${name}.primertrimmed.rg.sorted.bam \ - ${name}.coverage_mask.txt - - zcat ${name}.pass.vcf.gz > SNP_${name}.pass.vcf - - sed -i "1s/.*/>${name}/" *.consensus.fasta - # get reference FASTA ID to rename BAM - REF=\$(samtools view -H ${name}.primertrimmed.rg.sorted.bam | awk 'BEGIN{FS="\\t"};{if(\$1=="@SQ"){print \$2}}' | sed 's/SN://g') - mv ${name}.primertrimmed.rg.sorted.bam ${name}_mapped_\${REF}.primertrimmed.sorted.bam - samtools index ${name}_mapped_\${REF}.primertrimmed.sorted.bam - """ - stub: - """ - touch genome.consensus.fasta \ - ${name}_mapped_1.primertrimmed.sorted.bam \ - ${name}_mapped_1.primertrimmed.sorted.bam.bai \ - SNP_${name}.pass.vcf \ - ${name}.pass.vcf.gz \ - ${name}.coverage_mask.txt.nCoV-2019_1.depths \ - ${name}.coverage_mask.txt.nCoV-2019_2.depths \ - ${name}.trimmed.rg.sorted.bam \ - ${name}.primersitereport.txt \ - ${name}.coverage_mask.txt \ - ${name}.fail.vcf - """ -} - - -process artic_nanopolish_custom_bed { - label 'artic' - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "*.consensus.fasta" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}_mapped_*.primertrimmed.sorted.bam*" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}.trimmed.rg.sorted.bam" - publishDir "${params.output}/${params.genomedir}/all_consensus_sequences/", mode: 'copy', pattern: "*.consensus.fasta" - publishDir "${params.output}/${params.genomedir}/${name}/", mode: 'copy', pattern: "${name}.primersitereport.txt" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "SNP_${name}.pass.vcf" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.coverage_mask.txt" - publishDir "${params.output}/${params.lineagedir}/${name}/", mode: 'copy', pattern: "${name}.fail.vcf" - - input: - tuple val(name), path(reads), path(external_scheme), path(fast5_dir), path(txt_files), path(primerBed) - val(normalise_threshold) - output: - tuple val(name), path("*.consensus.fasta"), emit: fasta - tuple val(name), path("${name}_mapped_*.primertrimmed.sorted.bam"), path("${name}_mapped_*.primertrimmed.sorted.bam.bai"), emit: reference_bam - tuple val(name), path("SNP_${name}.pass.vcf"), emit: vcf - tuple val(name), path("${name}.pass.vcf.gz"), path("${name}.coverage_mask.txt.*1.depths"), path("${name}.coverage_mask.txt.*2.depths"), emit: covarplot - tuple val(name), path("${name}.trimmed.rg.sorted.bam"), emit: fullbam - tuple val(name), path("${name}.primersitereport.txt"), emit: primersitereport - tuple val(name), path("${name}.coverage_mask.txt"), emit: coverage_mask - tuple val(name), path("${name}.fail.vcf"), emit: vcf_fail - script: - def normalise_arg = normalise_threshold ? "--normalise ${normalise_threshold}" : '--normalise 0' - """ - # create a new primer dir as input for artic - mkdir -p primer_scheme/nCoV-2019 - cp -r ${external_scheme}/nCoV-2019/V_custom primer_scheme/nCoV-2019/ - - # clean up bed file: replace first colum with MN908947.3, remove empty lines and sort by 4th column (primer names) - cut -f2- ${primerBed} |\ - sed '/^[[:space:]]*\$/d' |\ - sed -e \$'s/^/MN908947.3\\t/' |\ - sort -k4 > primer_scheme/nCoV-2019/V_custom/nCoV-2019.scheme.bed - - # start artic - artic minion --minimap2 \ - ${normalise_arg} \ - --threads ${task.cpus} \ - --scheme-directory primer_scheme \ - --read-file ${reads} \ - --fast5-directory ${fast5_dir} \ - --sequencing-summary sequencing_summary*.txt \ - nCoV-2019/V_custom ${name} - - # generate depth files - artic_make_depth_mask --depth ${params.min_depth} \ - --store-rg-depths primer_scheme/nCoV-2019/V_custom/nCoV-2019.reference.fasta \ - ${name}.primertrimmed.rg.sorted.bam \ - ${name}.coverage_mask.txt - - zcat ${name}.pass.vcf.gz > SNP_${name}.pass.vcf - - sed -i "1s/.*/>${name}/" *.consensus.fasta - - # get reference FASTA ID to rename BAM - REF=\$(samtools view -H ${name}.primertrimmed.rg.sorted.bam | awk 'BEGIN{FS="\\t"};{if(\$1=="@SQ"){print \$2}}' | sed 's/SN://g') - mv ${name}.primertrimmed.rg.sorted.bam ${name}_mapped_\${REF}.primertrimmed.sorted.bam - samtools index ${name}_mapped_\${REF}.primertrimmed.sorted.bam + compgen -G "*coverage_mask.txt.*1.depths" > /dev/null && compgen -G "*coverage_mask.txt.*2.depths" > /dev/null && echo "Depth mask files present" || echo "Looks like there is only one read group, did you provide the correct *primer.bed file?" """ stub: """ diff --git a/workflows/process/covarplot.nf b/workflows/process/covarplot.nf index 9a17256..dea074e 100755 --- a/workflows/process/covarplot.nf +++ b/workflows/process/covarplot.nf @@ -7,9 +7,9 @@ process covarplot { tuple val(name), path("${name}_amplicon_coverage.png"), path("${name}_amplicon_coverage_log.png") script: """ - covarplot.py -v ${vcf} -d1 ${depth1} -d2 ${depth2} -b ${primerbed}/nCoV-2019/${params.primerV}/nCoV-2019.scheme.bed -s . + covarplot.py -v ${vcf} -d1 ${depth1} -d2 ${depth2} -b ${primerbed}/${params.schemeLength == 400 ? 'artic' : 'varvamp'}-sars-cov-2/${params.schemeLength}/${params.primerV}/primer.bed -s . mv ${name}.CoVarPlot.png ${name}_amplicon_coverage.png - covarplot.py -v ${vcf} -d1 ${depth1} -d2 ${depth2} -b ${primerbed}/nCoV-2019/${params.primerV}/nCoV-2019.scheme.bed -s . --log + covarplot.py -v ${vcf} -d1 ${depth1} -d2 ${depth2} -b ${primerbed}/${params.schemeLength == 400 ? 'artic' : 'varvamp'}-sars-cov-2/${params.schemeLength}/${params.primerV}/primer.bed -s . --log mv ${name}.CoVarPlot.png ${name}_amplicon_coverage_log.png """ stub: