diff --git a/data_managers/data_manager_nextclade/.shed.yml b/data_managers/data_manager_nextclade/.shed.yml index de6ce0896c4..7157ebf9930 100644 --- a/data_managers/data_manager_nextclade/.shed.yml +++ b/data_managers/data_manager_nextclade/.shed.yml @@ -7,4 +7,5 @@ long_description: | name: data_manager_nextclade owner: iuc remote_repository_url: https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_nextclade +homepage_url: https://github.com/nextstrain/nextclade type: unrestricted diff --git a/data_managers/data_manager_nextclade/data_manager/generated_macros.xml b/data_managers/data_manager_nextclade/data_manager/generated_macros.xml new file mode 120000 index 00000000000..11033c40239 --- /dev/null +++ b/data_managers/data_manager_nextclade/data_manager/generated_macros.xml @@ -0,0 +1 @@ +../../../tools/nextclade/generated_macros.xml \ No newline at end of file diff --git a/data_managers/data_manager_nextclade/data_manager/nextclade_dm.py b/data_managers/data_manager_nextclade/data_manager/nextclade_dm.py index b95f9ac6630..b1e2973f2fe 100644 --- a/data_managers/data_manager_nextclade/data_manager/nextclade_dm.py +++ b/data_managers/data_manager_nextclade/data_manager/nextclade_dm.py @@ -10,6 +10,14 @@ from typing import List +def get_nextclade_version() -> str: + # Returns the version of the nextclade CLI tool. + version_cmd = ["nextclade", "--version"] + version_proc = subprocess.run(version_cmd, capture_output=True, check=True) + version_output = version_proc.stdout.decode("utf-8").strip() + return version_output.split()[1] # e.g., "nextclade 2.3.0" + + def parse_date(d: str) -> datetime.datetime: # Parses the publication date from the nextclade release tags or user input into a datetime object. date = None @@ -20,46 +28,57 @@ def parse_date(d: str) -> datetime.datetime: return date -def entry_to_tag(entry: dict) -> str: - return ( - entry["attributes"]["name"]["value"] + "_" + entry["attributes"]["tag"]["value"] - ) +def entry_to_tag(name: str, tag: str) -> str: + return "_".join([name, tag]) -def get_database_list() -> List[dict]: - list_cmd = [ - "nextclade", - "dataset", - "list", - "--json", - "--include-old", - "--include-incompatible", - ] +def get_database_list(default_compatibility: str) -> List[dict]: + list_cmd = ["nextclade", "dataset", "list", "--json"] list_proc = subprocess.run(list_cmd, capture_output=True, check=True) database_list = json.loads(list_proc.stdout) entry_list = [] for db_entry in database_list: attributes = db_entry["attributes"] - entry = { - "value": entry_to_tag(db_entry), - "database_name": attributes["name"]["value"], - "description": attributes["name"]["valueFriendly"], - "date": datetime.datetime.fromisoformat( - attributes["tag"]["value"].replace("Z", "") - ), - "tag": attributes["tag"]["value"], - "min_nextclade_version": db_entry["compatibility"]["nextcladeCli"]["min"], - } - entry_list.append(entry) + name = db_entry["path"] + if "shortcuts" in db_entry: + name = db_entry["shortcuts"][0] + description = attributes["name"] + if ( + "CY121680" in db_entry["path"] and description == "Influenza A H1N1pdm HA" + ) or ("CY163680" in db_entry["path"] and description == "Influenza A H3N2 HA"): + description += " (broad)" + if name.startswith("community/"): + description += " (community contributed)" + + for version in db_entry["versions"]: + version_date = datetime.datetime.fromisoformat( + version["updatedAt"].replace("Z", "") + ) + tag = version["tag"] + if "compatibility" not in version: + version["compatibility"] = { + "cli": default_compatibility, + "web": default_compatibility, + } + entry = { + "value": entry_to_tag(name, tag), + "database_name": name, + "description": description, + "date": version_date, + "tag": version["tag"], + "min_nextclade_version": version["compatibility"]["cli"], + } + entry_list.append(entry) + return entry_list def filter_by_date( - existing_release_tags: List[str], + existing_release_tags: set[str], name: str, releases: list, - start_date: datetime.datetime = None, - end_date: datetime.datetime = None, + start_date: datetime.datetime | None = None, + end_date: datetime.datetime | None = None, ) -> List[dict]: ret = [] for release in releases: @@ -108,6 +127,7 @@ def comma_split(args: str) -> List[str]: parser.add_argument("--end_date", type=parse_date) parser.add_argument("--known_revisions", type=comma_split) parser.add_argument("--datasets", type=comma_split, default=["sars-cov-2"]) + parser.add_argument("datatable_name", default="nextclade") parser.add_argument("galaxy_config") args = parser.parse_args() @@ -118,13 +138,16 @@ def comma_split(args: str) -> List[str]: else: existing_release_tags = set() - releases_available = get_database_list() + nextclade_version = get_nextclade_version() + major_version = nextclade_version.split(".")[0] + default_compatibility = f"{major_version}.0.0" + releases_available = get_database_list(default_compatibility) if args.testmode: releases = [] for name in args.datasets: releases.extend( filter_by_date( - [], + set(), name, releases_available, start_date=args.start_date, diff --git a/data_managers/data_manager_nextclade/data_manager/nextclade_dm.xml b/data_managers/data_manager_nextclade/data_manager/nextclade_dm.xml index 4f91355f33e..1ffdf0d5acd 100644 --- a/data_managers/data_manager_nextclade/data_manager/nextclade_dm.xml +++ b/data_managers/data_manager_nextclade/data_manager/nextclade_dm.xml @@ -1,8 +1,10 @@ - - + + + generated_macros.xml + - python - nextclade + python + nextclade - - - - - - - - - + ^[-A-Za-z0-9_]?[-A-Za-z0-9_,]*$ @@ -72,22 +66,24 @@ + - - + + - - - - + + + + + diff --git a/data_managers/data_manager_nextclade/test-data/nextclade.loc b/data_managers/data_manager_nextclade/test-data/nextclade.loc index 40a04e30277..d4cf7efec20 100644 --- a/data_managers/data_manager_nextclade/test-data/nextclade.loc +++ b/data_managers/data_manager_nextclade/test-data/nextclade.loc @@ -9,4 +9,4 @@ # the database_name refers to which dataset names that, in general, align with species names. for more details see the output of "nextclade dataset list" # # for example -#sars-cov-2_2022-06-14T12:00:00Z sars-cov-2 SARS-CoV-2 1.10.0 2022-06-14T12:00:00 /srv/galaxy/tool-data/nextclade/sars-cov-2_2022-06-14T12-00-00Z +#sars-cov-2_2025-05-05--13-15-29Z sars-cov-2 SARS-CoV-2 3.0.0-alpha.0 2025-05-05T13:15:29 /tmp/tmpildayi8q/galaxy-dev/tool-data/nextclade/sars-cov-2_2025-05-05--13-15-29Z diff --git a/tools/nextclade/README.md b/tools/nextclade/README.md new file mode 100644 index 00000000000..da79d3bf902 --- /dev/null +++ b/tools/nextclade/README.md @@ -0,0 +1,16 @@ +### Updating the generated_macros.xml + +Nextclade outputs differs depending on which dataset is used for clade assignment. To deal with this, the `datasets_to_macros.py` script runs nextclade to get a list of datasets and then runs nextclade with sample data and collects the expected columns from each output dataset. This information is used to generation macros, thus: + +``` +# requires nextclade to be in the path +./datasets_to_macros.py generated_macros.xml +``` + +Should be run before updating the nextclade tool. Note that there are a few special cases in here: + +1. There are two sets of Influenza datasets with the same name, but different reference sequences. These are special cased in the code to distinguish them. + +2. Some information about the SARS-CoV-2 and MPXV is used for testing, thus tokens are created specifically containing info about these datasets. + +The `generated_macros.xml` now also includes the tool version, to ensure that the generated data matches the version of nextclade used to generate it. \ No newline at end of file diff --git a/tools/nextclade/datasets_to_macros.py b/tools/nextclade/datasets_to_macros.py new file mode 100755 index 00000000000..f4f2f6bd68f --- /dev/null +++ b/tools/nextclade/datasets_to_macros.py @@ -0,0 +1,265 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Extract information from the Nextclade dataset list command that is +# needed to generate the Galaxy list of possible datasets and +# their columns names. + +import argparse +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile +from typing import TextIO + + +def get_nextclade_version() -> str: + """ + Get the version of Nextclade installed on the system. + Returns the version as a string. + """ + + nextclade_command = ["nextclade", "--version"] + proc = subprocess.run( + nextclade_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + if proc.returncode != 0: + raise RuntimeError(f"Nextclade version check failed: {proc.stderr.decode()}") + + # Nextclade outputs the version in the format "nextclade X.Y.Z" + version = proc.stdout.decode().strip().split()[-1] + return version + + +def get_datasets() -> list[dict]: + """ + Get the list of datasets from the Nextclade dataset list command. + Returns a list of dictionaries, each representing a dataset. + """ + + nextclade_command = ["nextclade", "dataset", "list", "--json"] + proc = subprocess.run( + nextclade_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + if proc.returncode != 0: + raise RuntimeError(f"Nextclade dataset list failed: {proc.stderr.decode()}") + + datasets_json = proc.stdout.decode() + datasets = json.loads(datasets_json) + + return datasets + + +def fetch_reference(dataset_name: str) -> str: + """ + Using nextclade dataset get command, + fetch the reference file for the given dataset name. + """ + + tempdir = tempfile.TemporaryDirectory(delete=False) + nextclade_command = [ + "nextclade", + "dataset", + "get", + "--name", + dataset_name, + "--output-dir", + tempdir.name, + ] + + proc = subprocess.run( + nextclade_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + if proc.returncode != 0: + raise RuntimeError( + f"Nextclade dataset get failed for dataset {dataset_name}: {proc.stderr.decode()}" + ) + + # The reference file is expected to be in the tempdir with the name "reference.fasta" + tempdir_path = pathlib.Path(tempdir.name) + dataset_info = json.load(open(tempdir_path / "pathogen.json")) + assert ( + "files" in dataset_info + ), f"Dataset {dataset_name} does not have 'files' key in pathogen.json" + assert ( + "reference" in dataset_info["files"] + ), f"Dataset {dataset_name} does not have 'reference' file in pathogen.json" + reference_file = tempdir_path / dataset_info["files"]["reference"] + assert ( + reference_file.exists() + ), f"Reference file {reference_file} does not exist for dataset {dataset_name}" + return str(reference_file) + + +def run_nextclade(dataset_name: str, reference_filename: str) -> list[str]: + """ + Run the Nextclade command to process the dataset with the given name and reference file. + Returns a list of columns in the Nextclade output. + """ + + output_filename = tempfile.NamedTemporaryFile(delete=False, suffix=".tsv") + output_filename.close() + dataset_dir = pathlib.Path(reference_filename).parent + nextclade_command = [ + "nextclade", + "run", + "--input-dataset", + dataset_dir, + "--output-tsv", + output_filename.name, + reference_filename, + ] + proc = subprocess.run( + nextclade_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + if proc.returncode != 0: + raise RuntimeError( + f"Nextclade run failed for dataset {dataset_name}: {proc.stderr.decode()}" + ) + + header = next(open(output_filename.name)).strip().split("\t") + os.remove(output_filename.name) # Clean up the temporary file + tempdir = pathlib.Path(reference_filename).parent + shutil.rmtree( + tempdir, ignore_errors=True + ) # Clean up the temporary dataset directory + return header + + +def write_with_indent(file: TextIO, text: str, indent: int) -> None: + """ + Write text to the file with the specified indentation. + """ + file.write(" " * indent + text + "\n") + + +def generate_macros( + macro_file: TextIO, nextclade_version: str, dataset_info: list[dict] +) -> None: + """ + Generate the Galaxy metadata format for the given datasets and their columns. + """ + + indent_size = 4 + indent = 0 + indent += indent_size + write_with_indent(macro_file, "", indent) + indent += indent_size + write_with_indent( + macro_file, f'{nextclade_version}', indent + ) + write_with_indent(macro_file, '', indent) + seen_first = False + names_seen = set() + descriptions_seen = set() + column_info = {} + for dataset in dataset_info: + name = dataset["name"] + if name == "sars-cov-2": + column_info[name] = dataset["columns"] + elif name == "MPXV": + column_info[name] = dataset["columns"] + description = "" + if name in names_seen: + print("Warning: Duplicate name found:", name) + names_seen.add(name) + if description in descriptions_seen: + print("Warning: Duplicate description found:", description) + descriptions_seen.add(description) + + if not seen_first: + selected = ' selected="true"' + seen_first = True + else: + selected = "" + dataset_selector = f'' + write_with_indent(macro_file, dataset_selector, indent) + indent -= indent_size + write_with_indent(macro_file, "", indent) + for name, columns in column_info.items(): + token_name = name.upper().replace("-", "_") + "_NUM_COLUMNS" + write_with_indent( + macro_file, f'{len(columns)}', indent + ) + token_name = ( + name.upper().replace("-", "_") + "_COLUMNS" + ) # e.g. SARS_COV_2_COLUMNS + columns_str = ",".join(columns) + write_with_indent( + macro_file, f'{columns_str}', indent + ) + indent -= indent_size + write_with_indent(macro_file, "", indent) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Convert Nextclade dataset list JSON to Galaxy metadata format." + ) + parser.add_argument( + "output_file", + type=argparse.FileType("w"), + default=sys.stdout, + nargs="?", + help="Path to the output file for Galaxy metadata format.", + ) + + args = parser.parse_args() + + # check that nextclade is in the PATH + if shutil.which("nextclade") is None: + print("Error: nextclade command not found in PATH.", file=sys.stderr) + sys.exit(1) + + datasets = get_datasets() + + # While the datasets JSON has no defined schema, as of 3.15.3, it contains: + # "path" - the long-form dataset name + # "shortcuts" - a list of short-form dataset names + # "attributes" - a dictionary of attributes, including the name and reference accession + # - "name" - a human-readable name for the dataset + dataset_name_key = "path" + dataset_aliases_key = "shortcuts" + dataset_attributes_key = "attributes" + dataset_attributes_name_key = "name" + dataset_infos = [] + for dataset in datasets: + name = dataset[dataset_name_key] + if dataset_aliases_key in dataset: + # Choose the first alias - typically the simplest "common name" - as the name + name = dataset[dataset_aliases_key][0] + assert ( + dataset_attributes_key in dataset + ), f"Dataset {name} does not have attributes" + assert ( + dataset_attributes_name_key in dataset[dataset_attributes_key] + ), f"Dataset has attributes key but attributes does not have {dataset_attributes_name_key}" + # since we're going to use this in a macro, we XML-escape the description + # to avoid issues with special characters e.g. "&" or "<" + description = dataset[dataset_attributes_key][dataset_attributes_name_key] + # special case for the two influenza datasets where a description is duplicated + if ( + "CY121680" in dataset[dataset_name_key] + and description == "Influenza A H1N1pdm HA" + ) or ( + "CY163680" in dataset[dataset_name_key] + and description == "Influenza A H3N2 HA" + ): + print("ADDING BROAD DESCRIPTION FOR", name, file=sys.stderr) + description += " (broad)" + if name.startswith("community/"): + description = description + " (community contributed)" + reference_filename = fetch_reference(name) + columns = run_nextclade(name, reference_filename) + dataset_infos.append( + {"name": name, "description": description, "columns": columns} + ) + + nextclade_version = get_nextclade_version() + generate_macros(args.output_file, nextclade_version, dataset_infos) diff --git a/tools/nextclade/generated_macros.xml b/tools/nextclade/generated_macros.xml new file mode 100644 index 00000000000..96be43c197a --- /dev/null +++ b/tools/nextclade/generated_macros.xml @@ -0,0 +1,64 @@ + + 3.16.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 102 + index,seqName,clade,clade_display,clade_who,clade_nextstrain,partiallyAliased,Nextclade_pango,qc.overallScore,qc.overallStatus,totalSubstitutions,totalDeletions,totalInsertions,totalFrameShifts,totalMissing,totalNonACGTNs,totalAminoacidSubstitutions,totalAminoacidDeletions,totalAminoacidInsertions,totalUnknownAa,alignmentScore,alignmentStart,alignmentEnd,coverage,cdsCoverage,isReverseComplement,substitutions,deletions,insertions,frameShifts,aaSubstitutions,aaDeletions,aaInsertions,privateNucMutations.reversionSubstitutions,privateNucMutations.labeledSubstitutions,privateNucMutations.unlabeledSubstitutions,privateNucMutations.totalReversionSubstitutions,privateNucMutations.totalLabeledSubstitutions,privateNucMutations.totalUnlabeledSubstitutions,privateNucMutations.totalPrivateSubstitutions,privateAaMutations.reversionSubstitutions,privateAaMutations.labeledSubstitutions,privateAaMutations.unlabeledSubstitutions,privateAaMutations.totalReversionSubstitutions,privateAaMutations.totalLabeledSubstitutions,privateAaMutations.totalUnlabeledSubstitutions,privateAaMutations.totalPrivateSubstitutions,missing,founderMuts['clade'].nodeName,founderMuts['clade'].substitutions,founderMuts['clade'].deletions,founderMuts['clade'].aaSubstitutions,founderMuts['clade'].aaDeletions,founderMuts['Nextclade_pango'].nodeName,founderMuts['Nextclade_pango'].substitutions,founderMuts['Nextclade_pango'].deletions,founderMuts['Nextclade_pango'].aaSubstitutions,founderMuts['Nextclade_pango'].aaDeletions,relativeMutations['JN.1 (24A)'].nodeName,relativeMutations['JN.1 (24A)'].substitutions,relativeMutations['JN.1 (24A)'].deletions,relativeMutations['JN.1 (24A)'].aaSubstitutions,relativeMutations['JN.1 (24A)'].aaDeletions,relativeMutations['XBB.1.5 (23A)'].nodeName,relativeMutations['XBB.1.5 (23A)'].substitutions,relativeMutations['XBB.1.5 (23A)'].deletions,relativeMutations['XBB.1.5 (23A)'].aaSubstitutions,relativeMutations['XBB.1.5 (23A)'].aaDeletions,unknownAaRanges,nonACGTNs,qc.missingData.missingDataThreshold,qc.missingData.score,qc.missingData.status,qc.missingData.totalMissing,qc.mixedSites.mixedSitesThreshold,qc.mixedSites.score,qc.mixedSites.status,qc.mixedSites.totalMixedSites,qc.privateMutations.cutoff,qc.privateMutations.excess,qc.privateMutations.score,qc.privateMutations.status,qc.privateMutations.total,qc.snpClusters.clusteredSNPs,qc.snpClusters.score,qc.snpClusters.status,qc.snpClusters.totalSNPs,qc.frameShifts.frameShifts,qc.frameShifts.totalFrameShifts,qc.frameShifts.frameShiftsIgnored,qc.frameShifts.totalFrameShiftsIgnored,qc.frameShifts.score,qc.frameShifts.status,qc.stopCodons.stopCodons,qc.stopCodons.totalStopCodons,qc.stopCodons.score,qc.stopCodons.status,totalPcrPrimerChanges,pcrPrimerChanges,failedCdses,warnings,errors + 94 + index,seqName,clade,lineage,outbreak,qc.overallScore,qc.overallStatus,totalSubstitutions,totalDeletions,totalInsertions,totalFrameShifts,totalMissing,totalNonACGTNs,totalAminoacidSubstitutions,totalAminoacidDeletions,totalAminoacidInsertions,totalUnknownAa,alignmentScore,alignmentStart,alignmentEnd,coverage,cdsCoverage,isReverseComplement,substitutions,deletions,insertions,frameShifts,aaSubstitutions,aaDeletions,aaInsertions,privateNucMutations.reversionSubstitutions,privateNucMutations.labeledSubstitutions,privateNucMutations.unlabeledSubstitutions,privateNucMutations.totalReversionSubstitutions,privateNucMutations.totalLabeledSubstitutions,privateNucMutations.totalUnlabeledSubstitutions,privateNucMutations.totalPrivateSubstitutions,privateAaMutations.reversionSubstitutions,privateAaMutations.labeledSubstitutions,privateAaMutations.unlabeledSubstitutions,privateAaMutations.totalReversionSubstitutions,privateAaMutations.totalLabeledSubstitutions,privateAaMutations.totalUnlabeledSubstitutions,privateAaMutations.totalPrivateSubstitutions,missing,founderMuts['clade'].nodeName,founderMuts['clade'].substitutions,founderMuts['clade'].deletions,founderMuts['clade'].aaSubstitutions,founderMuts['clade'].aaDeletions,founderMuts['outbreak'].nodeName,founderMuts['outbreak'].substitutions,founderMuts['outbreak'].deletions,founderMuts['outbreak'].aaSubstitutions,founderMuts['outbreak'].aaDeletions,founderMuts['lineage'].nodeName,founderMuts['lineage'].substitutions,founderMuts['lineage'].deletions,founderMuts['lineage'].aaSubstitutions,founderMuts['lineage'].aaDeletions,unknownAaRanges,nonACGTNs,qc.missingData.missingDataThreshold,qc.missingData.score,qc.missingData.status,qc.missingData.totalMissing,qc.mixedSites.mixedSitesThreshold,qc.mixedSites.score,qc.mixedSites.status,qc.mixedSites.totalMixedSites,qc.privateMutations.cutoff,qc.privateMutations.excess,qc.privateMutations.score,qc.privateMutations.status,qc.privateMutations.total,qc.snpClusters.clusteredSNPs,qc.snpClusters.score,qc.snpClusters.status,qc.snpClusters.totalSNPs,qc.frameShifts.frameShifts,qc.frameShifts.totalFrameShifts,qc.frameShifts.frameShiftsIgnored,qc.frameShifts.totalFrameShiftsIgnored,qc.frameShifts.score,qc.frameShifts.status,qc.stopCodons.stopCodons,qc.stopCodons.totalStopCodons,qc.stopCodons.score,qc.stopCodons.status,totalPcrPrimerChanges,pcrPrimerChanges,failedCdses,warnings,errors + diff --git a/tools/nextclade/macros.xml b/tools/nextclade/macros.xml index 1dba9275771..2a8ee0a0e8d 100644 --- a/tools/nextclade/macros.xml +++ b/tools/nextclade/macros.xml @@ -1,6 +1,4 @@ - - 2.7.0 @online{nextclade, @@ -58,18 +56,8 @@ nextclade - - - - - - - - diff --git a/tools/nextclade/make_galaxy_json.py b/tools/nextclade/make_galaxy_json.py new file mode 100644 index 00000000000..0128ea975e0 --- /dev/null +++ b/tools/nextclade/make_galaxy_json.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import argparse +import json + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Generate galaxy.json to describe nextclade column names" + ) + parser.add_argument( + "--output_name", + default="report_tsv", + help="Name of the Galaxy output to add metadata for", + ) + parser.add_argument( + "nextclade_output_file", + type=argparse.FileType("r"), + help="Nextclade output in TSV format", + ) + args = parser.parse_args() + + headers = next(args.nextclade_output_file).strip().split("\t") + galaxy_json = {args.output_name: {"metadata": {"column_names": headers}}} + print(json.dumps(galaxy_json, indent=2)) diff --git a/tools/nextclade/nextalign.xml b/tools/nextclade/nextalign.xml deleted file mode 100644 index b05763ff672..00000000000 --- a/tools/nextclade/nextalign.xml +++ /dev/null @@ -1,191 +0,0 @@ - - Viral genome sequence alignment - - macros.xml - 0 - - - - nextalign - - nextalign --version-detailed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - output_insertions - - - - translation['translation_select'] == 'yes' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/nextclade/nextclade.xml b/tools/nextclade/nextclade.xml index 75a12059b46..7a94ce80dc5 100644 --- a/tools/nextclade/nextclade.xml +++ b/tools/nextclade/nextclade.xml @@ -2,54 +2,52 @@ Viral genome clade assignment, mutation calling, and sequence quality checks macros.xml + generated_macros.xml 0 - - + + nextclade coreutils + python - nextclade --version-detailed + nextclade --version|cut -d' ' -f2 '$report_tsv' + #if $outputs and "report_tsv" in $outputs + && python '$__tool_directory__/make_galaxy_json.py' --output_name report_tsv report.tsv >galaxy.json && + #if $include_header + cp report.tsv '$report_tsv' + #else + tail -n+2 report.tsv >'$report_tsv' + #end if #end if - ]]> + ]]> - - - - - - - - - - + + @@ -100,6 +95,9 @@ + + + @@ -115,12 +113,11 @@ - - + + - + - @@ -128,22 +125,8 @@ - + outputs and "report_tsv" in outputs - - - - - - - - - - - - - - outputs and "report_json" in outputs @@ -156,6 +139,7 @@ + @@ -165,11 +149,12 @@ - + + @@ -179,10 +164,10 @@ - + - + @@ -195,6 +180,7 @@ + @@ -204,15 +190,16 @@ - + - + + @@ -226,12 +213,13 @@ - + + @@ -241,10 +229,25 @@ - + - + + + + + + + + + + + + + + + + @@ -254,7 +257,7 @@ **What it does** -Nextclade_ assigns clades, calls mutations and performs sequence quality checks on SARS-CoV-2 genomes. +Nextclade_ assigns clades, calls mutations and performs sequence quality checks on viral genome sequences. For a description of nextclade's configuration files, see the `nextclade documentation `_. diff --git a/tools/nextclade/nextclade_dataset_get.xml b/tools/nextclade/nextclade_dataset_get.xml new file mode 100644 index 00000000000..db079677a8a --- /dev/null +++ b/tools/nextclade/nextclade_dataset_get.xml @@ -0,0 +1,51 @@ + + Fetch a Nextclade dataset + + macros.xml + generated_macros.xml + 0 + + + nextclade + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/nextclade/test-data/sars-cov-2.pathogen.json b/tools/nextclade/test-data/sars-cov-2.pathogen.json new file mode 100644 index 00000000000..d2198afef5d --- /dev/null +++ b/tools/nextclade/test-data/sars-cov-2.pathogen.json @@ -0,0 +1,7444 @@ +{ + "alignmentParams": { + "excessBandwidth": 12, + "terminalBandwidth": 100, + "allowedMismatches": 4, + "gapAlignmentSide": "right", + "minSeedCover": 0.1 + }, + "compatibility": { + "cli": "3.0.0-alpha.0", + "web": "3.0.0-alpha.0" + }, + "defaultCds": "S", + "files": { + "changelog": "CHANGELOG.md", + "examples": "sequences.fasta", + "genomeAnnotation": "genome_annotation.gff3", + "pathogenJson": "pathogen.json", + "readme": "README.md", + "reference": "reference.fasta", + "treeJson": "tree.json" + }, + "cdsOrderPreference": [ + "S", + "N", + "M", + "E", + "ORF1a", + "ORF1b", + "nsp1", + "nsp2", + "nsp3", + "nsp4", + "nsp5", + "nsp6", + "nsp7", + "nsp8", + "nsp9", + "nsp10", + "nsp11", + "nsp12", + "nsp13", + "nsp14", + "nsp15", + "nsp16", + "ORF3a", + "ORF6", + "ORF7a", + "ORF7b", + "ORF8", + "ORF9b" + ], + "qc": { + "frameShifts": { + "enabled": true, + "ignoredFrameShifts": [ + { + "codonRange": { + "begin": 141, + "end": 143 + }, + "cdsName": "S" + }, + { + "codonRange": { + "begin": 210, + "end": 214 + }, + "cdsName": "S" + }, + { + "codonRange": { + "begin": 211, + "end": 214 + }, + "cdsName": "S" + }, + { + "codonRange": { + "begin": 212, + "end": 214 + }, + "cdsName": "S" + }, + { + "codonRange": { + "begin": 74, + "end": 76 + }, + "cdsName": "E" + }, + { + "codonRange": { + "begin": 1, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 15, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 27, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 28, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 28, + "end": 42 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 29, + "end": 43 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 47, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 56, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 65, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 94, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 103, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 104, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 135, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 146, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 147, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 148, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 256, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 249, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 257, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 258, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 259, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 260, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 263, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 264, + "end": 276 + }, + "cdsName": "ORF3a" + }, + { + "codonRange": { + "begin": 2, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 3, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 7, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 8, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 10, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 22, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 23, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 27, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 28, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 29, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 30, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 31, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 32, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 33, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 34, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 35, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 37, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 38, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 57, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 58, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 59, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 60, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 61, + "end": 62 + }, + "cdsName": "ORF6" + }, + { + "codonRange": { + "begin": 4, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 23, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 31, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 39, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 40, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 44, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 46, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 47, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 53, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 54, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 54, + "end": 65 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 55, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 59, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 60, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 61, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 61, + "end": 98 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 62, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 63, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 64, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 65, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 66, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 67, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 68, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 69, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 70, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 71, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 72, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 73, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 74, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 75, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 76, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 77, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 78, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 79, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 80, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 81, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 82, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 83, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 84, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 85, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 86, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 87, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 88, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 89, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 90, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 91, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 92, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 93, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 94, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 95, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 96, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 97, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 98, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 99, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 100, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 101, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 102, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 103, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 104, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 105, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 106, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 107, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 108, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 109, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 110, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 111, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 112, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 113, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 114, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 115, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 116, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 117, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 118, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 119, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 120, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 121, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 122, + "end": 122 + }, + "cdsName": "ORF7a" + }, + { + "codonRange": { + "begin": 3, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 6, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 10, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 11, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 12, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 13, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 14, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 16, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 17, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 18, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 22, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 32, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 39, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 41, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 42, + "end": 44 + }, + "cdsName": "ORF7b" + }, + { + "codonRange": { + "begin": 3, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 4, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 5, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 6, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 7, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 8, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 21, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 26, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 32, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 44, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 45, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 46, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 47, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 53, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 58, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 59, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 62, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 63, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 64, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 65, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 66, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 67, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 68, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 69, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 70, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 71, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 72, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 73, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 74, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 75, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 76, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 77, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 78, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 79, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 80, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 81, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 82, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 83, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 84, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 85, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 86, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 87, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 88, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 89, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 90, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 91, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 92, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 93, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 94, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 95, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 96, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 97, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 98, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 99, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 100, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 101, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 102, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 103, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 104, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 105, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 106, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 107, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 108, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 109, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 110, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 111, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 112, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 113, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 114, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 115, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 116, + "end": 120 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 118, + "end": 120 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 119, + "end": 120 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 116, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 117, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 118, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 119, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 120, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 121, + "end": 122 + }, + "cdsName": "ORF8" + }, + { + "codonRange": { + "begin": 2, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 3, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 4, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 5, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 6, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 7, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 8, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 9, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 10, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 11, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 12, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 13, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 14, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 15, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 16, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 17, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 18, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 19, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 20, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 21, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 22, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 23, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 24, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 25, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 26, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 27, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 28, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 29, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 29, + "end": 33 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 30, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 31, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 32, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 33, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 34, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 35, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 36, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 37, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 38, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 39, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 40, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 41, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 42, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 43, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 44, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 45, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 46, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 47, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 48, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 49, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 50, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 51, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 52, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 53, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 54, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 55, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 56, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 57, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 58, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 59, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 60, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 61, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 62, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 63, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 64, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 65, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 66, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 67, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 68, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 69, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 70, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 71, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 72, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 73, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 74, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 75, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 76, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 77, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 78, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 79, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 80, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 81, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 82, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 83, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 84, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 85, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 86, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 87, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 88, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 89, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 90, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 91, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 92, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 93, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 94, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 95, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 96, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 97, + "end": 98 + }, + "cdsName": "ORF9b" + }, + { + "codonRange": { + "begin": 98, + "end": 98 + }, + "cdsName": "ORF9b" + } + ] + }, + "missingData": { + "enabled": true, + "missingDataThreshold": 10, + "scoreBias": 300 + }, + "mixedSites": { + "enabled": true, + "mixedSitesThreshold": 10 + }, + "privateMutations": { + "cutoff": 10, + "enabled": true, + "typical": 5, + "weightLabeledSubstitutions": 4, + "weightReversionSubstitutions": 6, + "weightUnlabeledSubstitutions": 1 + }, + "snpClusters": { + "clusterCutOff": 1, + "enabled": true, + "scoreWeight": 20, + "windowSize": 100 + }, + "stopCodons": { + "enabled": true, + "ignoredStopCodons": [ + { + "codon": 417, + "cdsName": "N" + }, + { + "codon": 238, + "cdsName": "ORF3a" + }, + { + "codon": 240, + "cdsName": "ORF3a" + }, + { + "codon": 241, + "cdsName": "ORF3a" + }, + { + "codon": 244, + "cdsName": "ORF3a" + }, + { + "codon": 251, + "cdsName": "ORF3a" + }, + { + "codon": 253, + "cdsName": "ORF3a" + }, + { + "codon": 260, + "cdsName": "ORF3a" + }, + { + "codon": 263, + "cdsName": "ORF3a" + }, + { + "codon": 265, + "cdsName": "ORF3a" + }, + { + "codon": 7, + "cdsName": "ORF6" + }, + { + "codon": 12, + "cdsName": "ORF6" + }, + { + "codon": 22, + "cdsName": "ORF6" + }, + { + "codon": 26, + "cdsName": "ORF6" + }, + { + "codon": 30, + "cdsName": "ORF6" + }, + { + "codon": 42, + "cdsName": "ORF6" + }, + { + "codon": 45, + "cdsName": "ORF6" + }, + { + "codon": 48, + "cdsName": "ORF6" + }, + { + "codon": 50, + "cdsName": "ORF6" + }, + { + "codon": 53, + "cdsName": "ORF6" + }, + { + "codon": 54, + "cdsName": "ORF6" + }, + { + "codon": 55, + "cdsName": "ORF6" + }, + { + "codon": 58, + "cdsName": "ORF6" + }, + { + "codon": 20, + "cdsName": "ORF7a" + }, + { + "codon": 34, + "cdsName": "ORF7a" + }, + { + "codon": 37, + "cdsName": "ORF7a" + }, + { + "codon": 39, + "cdsName": "ORF7a" + }, + { + "codon": 40, + "cdsName": "ORF7a" + }, + { + "codon": 43, + "cdsName": "ORF7a" + }, + { + "codon": 52, + "cdsName": "ORF7a" + }, + { + "codon": 61, + "cdsName": "ORF7a" + }, + { + "codon": 71, + "cdsName": "ORF7a" + }, + { + "codon": 74, + "cdsName": "ORF7a" + }, + { + "codon": 75, + "cdsName": "ORF7a" + }, + { + "codon": 76, + "cdsName": "ORF7a" + }, + { + "codon": 79, + "cdsName": "ORF7a" + }, + { + "codon": 80, + "cdsName": "ORF7a" + }, + { + "codon": 82, + "cdsName": "ORF7a" + }, + { + "codon": 84, + "cdsName": "ORF7a" + }, + { + "codon": 88, + "cdsName": "ORF7a" + }, + { + "codon": 89, + "cdsName": "ORF7a" + }, + { + "codon": 90, + "cdsName": "ORF7a" + }, + { + "codon": 91, + "cdsName": "ORF7a" + }, + { + "codon": 93, + "cdsName": "ORF7a" + }, + { + "codon": 94, + "cdsName": "ORF7a" + }, + { + "codon": 96, + "cdsName": "ORF7a" + }, + { + "codon": 112, + "cdsName": "ORF7a" + }, + { + "codon": 116, + "cdsName": "ORF7a" + }, + { + "codon": 117, + "cdsName": "ORF7a" + }, + { + "codon": 120, + "cdsName": "ORF7a" + }, + { + "codon": 2, + "cdsName": "ORF7b" + }, + { + "codon": 4, + "cdsName": "ORF7b" + }, + { + "codon": 9, + "cdsName": "ORF7b" + }, + { + "codon": 11, + "cdsName": "ORF7b" + }, + { + "codon": 13, + "cdsName": "ORF7b" + }, + { + "codon": 18, + "cdsName": "ORF7b" + }, + { + "codon": 28, + "cdsName": "ORF7b" + }, + { + "codon": 30, + "cdsName": "ORF7b" + }, + { + "codon": 32, + "cdsName": "ORF7b" + }, + { + "codon": 34, + "cdsName": "ORF7b" + }, + { + "codon": 38, + "cdsName": "ORF7b" + }, + { + "codon": 7, + "cdsName": "ORF8" + }, + { + "codon": 17, + "cdsName": "ORF8" + }, + { + "codon": 18, + "cdsName": "ORF8" + }, + { + "codon": 22, + "cdsName": "ORF8" + }, + { + "codon": 26, + "cdsName": "ORF8" + }, + { + "codon": 28, + "cdsName": "ORF8" + }, + { + "codon": 44, + "cdsName": "ORF8" + }, + { + "codon": 49, + "cdsName": "ORF8" + }, + { + "codon": 53, + "cdsName": "ORF8" + }, + { + "codon": 58, + "cdsName": "ORF8" + }, + { + "codon": 59, + "cdsName": "ORF8" + }, + { + "codon": 60, + "cdsName": "ORF8" + }, + { + "codon": 63, + "cdsName": "ORF8" + }, + { + "codon": 67, + "cdsName": "ORF8" + }, + { + "codon": 71, + "cdsName": "ORF8" + }, + { + "codon": 89, + "cdsName": "ORF8" + }, + { + "codon": 90, + "cdsName": "ORF8" + }, + { + "codon": 91, + "cdsName": "ORF8" + }, + { + "codon": 94, + "cdsName": "ORF8" + }, + { + "codon": 102, + "cdsName": "ORF8" + }, + { + "codon": 104, + "cdsName": "ORF8" + }, + { + "codon": 105, + "cdsName": "ORF8" + }, + { + "codon": 109, + "cdsName": "ORF8" + }, + { + "codon": 6, + "cdsName": "ORF9b" + }, + { + "codon": 19, + "cdsName": "ORF9b" + }, + { + "codon": 33, + "cdsName": "ORF9b" + }, + { + "codon": 64, + "cdsName": "ORF9b" + }, + { + "codon": 76, + "cdsName": "ORF9b" + }, + { + "codon": 85, + "cdsName": "ORF9b" + } + ] + } + }, + "schemaVersion": "3.0.0", + "version": { + "updatedAt": "2025-06-09T15:42:38Z", + "tag": "2025-06-09--15-42-38Z", + "compatibility": { + "cli": "3.0.0-alpha.0", + "web": "3.0.0-alpha.0" + } + }, + "maintenance": { + "website": [ + "https://nextstrain.org", + "https://clades.nextstrain.org" + ], + "documentation": [ + "https://github.com/nextstrain/nextclade_data", + "https://docs.nextstrain.org/projects/nextclade" + ], + "source code": [ + "https://github.com/nextstrain/nextclade_data", + "https://github.com/neherlab/nextclade_data_workflows" + ], + "issues": [ + "https://github.com/nextstrain/nextclade_data", + "https://github.com/nextstrain/nextclade_data/issues" + ], + "organizations": [ + "Nextstrain" + ], + "authors": [ + "Nextstrain team " + ] + }, + "mutLabels": { + "nucMutLabelMap": { + "174T": [ + "20H" + ], + "204T": [ + "20E" + ], + "210T": [ + "21J", + "21I", + "21A", + "21B" + ], + "241T": [ + "21J", + "21K", + "21L", + "22B", + "20I", + "22E", + "20A", + "23A", + "21I", + "20B", + "24A", + "22C", + "20E", + "22A", + "23F", + "20G", + "20C", + "23D", + "20J", + "21A", + "23B", + "24E", + "22D", + "22F", + "21C", + "rec", + "24C", + "23C", + "24F", + "23E", + "21F", + "20H", + "24B", + "23H", + "24G", + "23I", + "25A", + "21H", + "23G", + "20D", + "20F", + "21G", + "21D", + "21B", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "405G": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G", + "24D", + "25B" + ], + "445C": [ + "20E" + ], + "541T": [ + "24D", + "25B" + ], + "670G": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "733C": [ + "20J" + ], + "823T": [ + "25B" + ], + "897A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "913T": [ + "20I" + ], + "936T": [ + "24I" + ], + "1059T": [ + "20G", + "20C", + "21C", + "21F", + "20H" + ], + "1163T": [ + "20F" + ], + "1170T": [ + "24D", + "25B" + ], + "1191T": [ + "21A" + ], + "1267T": [ + "21A" + ], + "1498T": [ + "21D" + ], + "1545T": [ + "23C" + ], + "1627T": [ + "22B" + ], + "1807G": [ + "21D" + ], + "1931A": [ + "22E" + ], + "1954A": [ + "25A" + ], + "1973T": [ + "23G" + ], + "2060A": [ + "24F" + ], + "2065T": [ + "25C" + ], + "2095A": [ + "25B" + ], + "2127G": [ + "23I" + ], + "2334T": [ + "23F", + "23H" + ], + "2395T": [ + "21C" + ], + "2470T": [ + "21K" + ], + "2597C": [ + "21C" + ], + "2659A": [ + "21D" + ], + "2692T": [ + "20H" + ], + "2749T": [ + "20J" + ], + "2790T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "2832G": [ + "21K" + ], + "2954C": [ + "22E" + ], + "3037T": [ + "21J", + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "20A", + "21I", + "22C", + "20B", + "24A", + "22A", + "23F", + "20E", + "20G", + "23D", + "20C", + "20J", + "23B", + "22D", + "21A", + "24E", + "22F", + "rec", + "21C", + "23C", + "24C", + "24F", + "23E", + "21F", + "20H", + "24B", + "23H", + "23I", + "24G", + "25A", + "21H", + "23G", + "20D", + "20F", + "21G", + "21D", + "21B", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "3267T": [ + "20I" + ], + "3428G": [ + "21H" + ], + "3431T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "3457T": [ + "21B" + ], + "3565C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "3686T": [ + "25B" + ], + "3796T": [ + "22D", + "23C" + ], + "3828T": [ + "20J" + ], + "3857A": [ + "23C" + ], + "3927T": [ + "22D", + "23C" + ], + "4002T": [ + "20D", + "21G" + ], + "4068T": [ + "24H" + ], + "4181T": [ + "21J" + ], + "4184A": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "4214C": [ + "25C" + ], + "4234T": [ + "23E" + ], + "4321T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "4402A": [ + "23C" + ], + "4586T": [ + "22D", + "23C" + ], + "4683T": [ + "25B" + ], + "4878T": [ + "21H" + ], + "4921T": [ + "24H" + ], + "4926G": [ + "21E" + ], + "4965T": [ + "21B" + ], + "4999T": [ + "25A", + "24B" + ], + "5183T": [ + "22D", + "23C" + ], + "5184T": [ + "21I", + "21A" + ], + "5230T": [ + "20H" + ], + "5239T": [ + "24H", + "25C" + ], + "5386G": [ + "21K" + ], + "5388A": [ + "20I" + ], + "5584G": [ + "21I" + ], + "5648C": [ + "20J" + ], + "5720A": [ + "23F", + "23D", + "23H" + ], + "5835T": [ + "23F" + ], + "5878T": [ + "25B" + ], + "5986T": [ + "20I" + ], + "6037T": [ + "21H" + ], + "6183G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "25A", + "24H", + "24I", + "25C" + ], + "6255T": [ + "25A" + ], + "6285T": [ + "21D" + ], + "6286T": [ + "20E" + ], + "6310T": [ + "24H" + ], + "6319G": [ + "20J" + ], + "6402T": [ + "21J" + ], + "6501A": [ + "24D", + "25B" + ], + "6536A": [ + "23E" + ], + "6541T": [ + "23F", + "23H", + "25C" + ], + "6613G": [ + "20J" + ], + "6954C": [ + "20I" + ], + "7113T": [ + "24E", + "24C", + "24B", + "24G", + "25A", + "24D", + "25B" + ], + "7124T": [ + "21J", + "21G" + ], + "7393T": [ + "24I" + ], + "7424G": [ + "21G" + ], + "7540C": [ + "20F" + ], + "7564A": [ + "21E" + ], + "7564T": [ + "23G" + ], + "7842G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "7851T": [ + "21J" + ], + "7869T": [ + "24H", + "25C" + ], + "8083A": [ + "20G" + ], + "8139T": [ + "21E" + ], + "8140T": [ + "22A" + ], + "8293T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "8299T": [ + "25B" + ], + "8350C": [ + "25C" + ], + "8390G": [ + "25B" + ], + "8393A": [ + "21K", + "24A", + "24E", + "24C", + "24F", + "24B", + "rec", + "23I", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "8593C": [ + "21D" + ], + "8737C": [ + "23G" + ], + "8782T": [ + "19B" + ], + "8818T": [ + "24H", + "25C" + ], + "8917T": [ + "24I" + ], + "8947T": [ + "21C" + ], + "8986T": [ + "21J" + ], + "9053T": [ + "21J" + ], + "9203A": [ + "21E" + ], + "9344T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "9424G": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "9534T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "9565T": [ + "21D" + ], + "9693T": [ + "23F", + "23H" + ], + "9857T": [ + "21G" + ], + "9866T": [ + "21L", + "23A", + "22C", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "23E", + "23H", + "rec", + "23G", + "24D", + "25B" + ], + "9867C": [ + "21F", + "21G", + "21E" + ], + "9891T": [ + "21I", + "21A" + ], + "10029T": [ + "21J", + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "21H", + "23G", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "10042G": [ + "24D", + "25B" + ], + "10097A": [ + "20D", + "21G" + ], + "10198T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "10204C": [ + "23A" + ], + "10319T": [ + "20G" + ], + "10323G": [ + "20H" + ], + "10447A": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "10449A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "11042T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "11146T": [ + "22D" + ], + "11201G": [ + "21J", + "21B" + ], + "11308A": [ + "21E" + ], + "11332G": [ + "21J" + ], + "11418C": [ + "21I", + "21A" + ], + "11451G": [ + "21H" + ], + "11514T": [ + "21I" + ], + "11537G": [ + "21K" + ], + "11572T": [ + "24D", + "25B" + ], + "11674T": [ + "22C" + ], + "11727A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "11750T": [ + "22E", + "23B" + ], + "11956T": [ + "23B", + "23D" + ], + "12049T": [ + "21E" + ], + "12053T": [ + "21E" + ], + "12100T": [ + "21C" + ], + "12160A": [ + "22B", + "22E", + "22A" + ], + "12310A": [ + "22B" + ], + "12444G": [ + "22D", + "23C" + ], + "12467T": [ + "23G" + ], + "12473T": [ + "24D", + "25B" + ], + "12616T": [ + "24E" + ], + "12730A": [ + "23B" + ], + "12778T": [ + "20J" + ], + "12789T": [ + "24A", + "23F", + "23D", + "24E", + "24C", + "24F", + "24B", + "23H", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "12815T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "12854T": [ + "25B" + ], + "12878G": [ + "21C" + ], + "12880T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "12892A": [ + "24H", + "25C" + ], + "12924T": [ + "24D", + "25B" + ], + "12946C": [ + "21A" + ], + "13019T": [ + "21I" + ], + "13057T": [ + "21H" + ], + "13121T": [ + "24E" + ], + "13195C": [ + "21K" + ], + "13339C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "13536T": [ + "20D", + "21G" + ], + "13608T": [ + "25C" + ], + "13627A": [ + "23F", + "23H" + ], + "13860T": [ + "20J" + ], + "14257C": [ + "22E" + ], + "14290T": [ + "25B" + ], + "14407T": [ + "21D" + ], + "14408T": [ + "21J", + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "20A", + "21I", + "22C", + "20B", + "24A", + "22A", + "23F", + "20E", + "20G", + "23D", + "20C", + "20J", + "23B", + "22D", + "21A", + "24E", + "22F", + "rec", + "21C", + "23C", + "24C", + "24F", + "23E", + "21F", + "20H", + "24B", + "23H", + "23I", + "24G", + "25A", + "21H", + "23G", + "20D", + "20F", + "21G", + "21D", + "21B", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "14599T": [ + "22A" + ], + "14676T": [ + "20I" + ], + "14805T": [ + "20G" + ], + "14856G": [ + "23B" + ], + "15009C": [ + "22C" + ], + "15240T": [ + "21K" + ], + "15279T": [ + "20I" + ], + "15372T": [ + "24E", + "24C" + ], + "15451A": [ + "21J", + "23A", + "21I", + "23F", + "23D", + "23B", + "22D", + "21A", + "22F", + "23C", + "23E", + "23H", + "rec", + "23G", + "24D", + "25B" + ], + "15573C": [ + "25B" + ], + "15714T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "15738T": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G", + "24D", + "25B" + ], + "15756A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "15939C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G", + "24D", + "25B" + ], + "15960T": [ + "25B" + ], + "16176C": [ + "20I" + ], + "16323T": [ + "25B" + ], + "16342C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23H", + "23G", + "24D", + "25B" + ], + "16466T": [ + "21J", + "21I", + "21A" + ], + "16500C": [ + "21F" + ], + "16600C": [ + "24H", + "25C" + ], + "16616A": [ + "22B" + ], + "16647T": [ + "20F" + ], + "16852T": [ + "21B" + ], + "16878T": [ + "23F", + "23D", + "23H" + ], + "16935A": [ + "22E" + ], + "17014T": [ + "21C" + ], + "17039G": [ + "22E" + ], + "17074T": [ + "21E" + ], + "17124C": [ + "23A", + "23G" + ], + "17259T": [ + "20J" + ], + "17334T": [ + "24E", + "24C", + "24B", + "24G", + "25A" + ], + "17339T": [ + "21E" + ], + "17410T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "17491T": [ + "21H" + ], + "17523T": [ + "21B" + ], + "17615G": [ + "20I" + ], + "17859C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G", + "24D", + "25B" + ], + "18163G": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "18171T": [ + "21D" + ], + "18176T": [ + "21A" + ], + "18424G": [ + "20G" + ], + "18492G": [ + "24A", + "23F", + "24E", + "24C", + "24F", + "24B", + "23H", + "23I", + "24G", + "rec", + "25A", + "24H", + "24I", + "25C" + ], + "18555T": [ + "20F" + ], + "18583A": [ + "23C" + ], + "18657T": [ + "24F" + ], + "18703T": [ + "23B" + ], + "18877T": [ + "20A", + "21H" + ], + "18894T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "25A", + "rec", + "24H", + "24I", + "25C" + ], + "19035C": [ + "21H" + ], + "19220T": [ + "21J" + ], + "19326G": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G", + "24D", + "25B" + ], + "19716T": [ + "24F" + ], + "19722G": [ + "24E", + "24C" + ], + "19884T": [ + "23E" + ], + "19886G": [ + "23C" + ], + "19955T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "24E", + "22D", + "22F", + "rec", + "24C", + "23C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "20055G": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "24E", + "22D", + "22F", + "rec", + "24C", + "23C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "20148T": [ + "21H" + ], + "20178T": [ + "25C" + ], + "20235T": [ + "22D" + ], + "20262G": [ + "21A", + "21F" + ], + "20268G": [ + "20A" + ], + "20396G": [ + "21B" + ], + "20401G": [ + "21B" + ], + "20724G": [ + "21D" + ], + "20741G": [ + "23C" + ], + "21137G": [ + "24I", + "25C" + ], + "21255C": [ + "20E" + ], + "21304T": [ + "20G" + ], + "21570G": [ + "22A" + ], + "21575T": [ + "21F" + ], + "21600T": [ + "21C" + ], + "21614T": [ + "20J", + "20E" + ], + "21618G": [ + "21J", + "21I", + "21A" + ], + "21618T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "23H", + "24B", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "21621A": [ + "20J" + ], + "21622T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "21624C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "21627A": [ + "24F", + "24H", + "24I", + "25B", + "25C" + ], + "21638T": [ + "20J" + ], + "21653C": [ + "24H", + "25C" + ], + "21654T": [ + "24I" + ], + "21711T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "21717G": [ + "21D" + ], + "21718T": [ + "23F", + "23H" + ], + "21721T": [ + "22C" + ], + "21738C": [ + "24F", + "25B" + ], + "21762T": [ + "21K", + "21D" + ], + "21786T": [ + "21G" + ], + "21789T": [ + "21G" + ], + "21801C": [ + "20H" + ], + "21810C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G" + ], + "21811T": [ + "23C" + ], + "21846T": [ + "21K", + "21J", + "21F", + "21H" + ], + "21895C": [ + "21B" + ], + "21941T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "21974T": [ + "20J" + ], + "21987A": [ + "21J", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "21I", + "23F", + "23D", + "23B", + "24E", + "22D", + "22F", + "rec", + "21A", + "24C", + "23C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21B", + "24I", + "25B", + "25C" + ], + "21993C": [ + "21H" + ], + "21995A": [ + "21H" + ], + "22000A": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "24G", + "23G" + ], + "22001G": [ + "22D", + "23C" + ], + "22016C": [ + "22D", + "23C" + ], + "22018T": [ + "21C" + ], + "22022A": [ + "21B" + ], + "22032C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22033A": [ + "24A", + "24E", + "22D", + "23C", + "24C", + "23F", + "24F", + "24B", + "rec", + "23I", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22034G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22101T": [ + "23B" + ], + "22107G": [ + "24H", + "25C" + ], + "22108C": [ + "24I" + ], + "22108T": [ + "23E" + ], + "22109G": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G" + ], + "22112A": [ + "25B" + ], + "22115G": [ + "23C" + ], + "22120A": [ + "25A" + ], + "22132T": [ + "20J", + "25A", + "24H", + "25C" + ], + "22190G": [ + "22D", + "23C" + ], + "22200A": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G" + ], + "22200G": [ + "21L", + "22B", + "22E", + "22C", + "24A", + "22A", + "24E", + "22D", + "23C", + "24C", + "rec", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22206G": [ + "20H" + ], + "22208T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22227T": [ + "21I", + "20E" + ], + "22295A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22317T": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23H", + "23G" + ], + "22320G": [ + "23E", + "21F" + ], + "22331A": [ + "22D", + "23C" + ], + "22353A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22480T": [ + "23F", + "23H" + ], + "22556G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22577C": [ + "23A", + "24A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "24F", + "23E", + "rec", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22578A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22599A": [ + "21K", + "21H" + ], + "22599C": [ + "23A", + "22E", + "23F", + "23D", + "23B", + "22D", + "22F", + "22A", + "23C", + "23E", + "23H", + "24B", + "rec", + "24G", + "25A", + "23G", + "24H", + "24I", + "25C" + ], + "22624T": [ + "23G" + ], + "22629C": [ + "24A", + "24E", + "22D", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22664A": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G" + ], + "22673C": [ + "21K" + ], + "22674T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "23B", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22679C": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "23B", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22686T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "23B", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22688G": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "23B", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22770A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22775A": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "23B", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22786C": [ + "21L", + "22B", + "22E", + "23A", + "24A", + "22C", + "22A", + "23F", + "23D", + "23B", + "24E", + "22D", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22792T": [ + "21L", + "21I", + "24H", + "25C" + ], + "22795G": [ + "24B" + ], + "22812C": [ + "20J" + ], + "22813T": [ + "21L", + "22B", + "21K", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "22D", + "24E", + "23B", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "20H", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22865T": [ + "25B" + ], + "22882G": [ + "21K", + "22B", + "21L", + "22E", + "23A", + "24A", + "22C", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22893C": [ + "22E", + "23C" + ], + "22893G": [ + "24H", + "25C" + ], + "22895C": [ + "23A", + "24A", + "23F", + "23D", + "23B", + "24E", + "22F", + "24C", + "24F", + "23E", + "24B", + "23H", + "rec", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22896A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "24H", + "24D", + "24I", + "25B" + ], + "22896C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23E", + "23H", + "23G" + ], + "22896G": [ + "25A", + "25C" + ], + "22898A": [ + "21K", + "23A", + "24A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22910G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22916T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22917A": [ + "22C", + "21G" + ], + "22917G": [ + "21J", + "22B", + "22E", + "21I", + "24A", + "22A", + "21A", + "24E", + "21C", + "23C", + "24C", + "24F", + "23F", + "24B", + "rec", + "24G", + "23I", + "25A", + "21B", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22926C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22927T": [ + "23H", + "23G" + ], + "22928C": [ + "24E", + "24C", + "24F", + "24B", + "23D", + "24G", + "25A", + "23G", + "24H", + "25C" + ], + "22928G": [ + "24I" + ], + "22930A": [ + "23F", + "23H", + "24D", + "25B" + ], + "22942A": [ + "22E", + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "22942G": [ + "23A", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "23E", + "23H", + "rec", + "23G" + ], + "22986T": [ + "24H" + ], + "22992A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "20F", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "22993T": [ + "24H" + ], + "22995A": [ + "21J", + "21K", + "21L", + "22B", + "22E", + "23A", + "21I", + "22C", + "24A", + "22A", + "23F", + "22D", + "23D", + "24E", + "21A", + "22F", + "rec", + "23C", + "24C", + "24F", + "24B", + "23H", + "23E", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "25C" + ], + "22995G": [ + "23B", + "23E" + ], + "22995T": [ + "25B" + ], + "23005A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23012A": [ + "24A", + "20J", + "24E", + "24C", + "24F", + "20H", + "24B", + "21F", + "23I", + "24G", + "rec", + "25A", + "21H", + "21D", + "24H", + "24D", + "24I", + "25B", + "21E", + "25C" + ], + "23012C": [ + "21B" + ], + "23013C": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "22A", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "rec", + "23E", + "23H", + "23G", + "21M" + ], + "23018C": [ + "23A", + "24A", + "23F", + "23D", + "23B", + "24E", + "24C", + "24F", + "rec", + "23E", + "22F", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23018G": [ + "22B", + "22E", + "22A" + ], + "23019C": [ + "23A", + "24A", + "23F", + "23D", + "23B", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23021G": [ + "25C" + ], + "23031C": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "22D", + "23E", + "23H", + "rec", + "23G", + "21G" + ], + "23039G": [ + "24E", + "24C", + "24F", + "25A", + "25B", + "25C" + ], + "23040G": [ + "21K", + "21L", + "22C", + "21M" + ], + "23048A": [ + "21K" + ], + "23055G": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "23H", + "24B", + "24G", + "23I", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "23063T": [ + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "20J", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "23H", + "24B", + "20H", + "24G", + "23I", + "25A", + "21H", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "23075C": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "23H", + "24B", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "23123T": [ + "23E" + ], + "23202A": [ + "21K" + ], + "23222A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23271A": [ + "20I" + ], + "23271T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23277T": [ + "25C" + ], + "23280T": [ + "23G" + ], + "23341C": [ + "21E" + ], + "23401A": [ + "20F" + ], + "23403G": [ + "21J", + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "20A", + "21I", + "22C", + "20B", + "24A", + "22A", + "23F", + "20E", + "20G", + "23D", + "20C", + "20J", + "23B", + "22D", + "21A", + "24E", + "22F", + "rec", + "21C", + "23C", + "24C", + "23E", + "24F", + "21F", + "20H", + "24B", + "23H", + "23I", + "24G", + "25A", + "21H", + "23G", + "20D", + "20F", + "21G", + "21D", + "21B", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "23423T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23525T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "20J", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "23H", + "24B", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "23535G": [ + "22A" + ], + "23593C": [ + "21D" + ], + "23598G": [ + "25A" + ], + "23599G": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "23H", + "24B", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "23604A": [ + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "22C", + "22A", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "rec", + "23E", + "23H", + "21H", + "23G", + "21M", + "21E" + ], + "23604G": [ + "21J", + "21I", + "24A", + "21A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "rec", + "25A", + "21B", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "23664T": [ + "20H", + "21F" + ], + "23673T": [ + "22C", + "23G" + ], + "23709T": [ + "20I" + ], + "23731T": [ + "20D", + "21G" + ], + "23854A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "23948T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "23H", + "24B", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "24130A": [ + "21K" + ], + "24138A": [ + "21G" + ], + "24187A": [ + "21E" + ], + "24224C": [ + "21D" + ], + "24283C": [ + "25C" + ], + "24349C": [ + "21C" + ], + "24378T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "rec", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "24410A": [ + "21J", + "21I", + "21A", + "21H" + ], + "24424T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "23H", + "24B", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "24469A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "23E", + "24F", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "24503T": [ + "21K" + ], + "24506G": [ + "20I" + ], + "24642T": [ + "20J" + ], + "24748T": [ + "21D" + ], + "24775T": [ + "21B" + ], + "24819G": [ + "25A", + "24B" + ], + "24836A": [ + "21E" + ], + "24863T": [ + "21E" + ], + "24872T": [ + "24E", + "24C", + "24F", + "24B", + "24G", + "25A" + ], + "24914C": [ + "20I" + ], + "24990T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "rec", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "24991A": [ + "23C" + ], + "25000T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "25006T": [ + "24F", + "24C" + ], + "25045G": [ + "23G" + ], + "25088T": [ + "20J", + "21E" + ], + "25207T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "25416T": [ + "23A", + "22C", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "23E", + "23H", + "rec", + "23G" + ], + "25469T": [ + "21J", + "21I", + "21A", + "21B" + ], + "25517T": [ + "21F" + ], + "25563T": [ + "20G", + "20C", + "20A", + "21C", + "21F", + "20H", + "21H" + ], + "25572T": [ + "23F", + "23H" + ], + "25584T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "25593T": [ + "24G" + ], + "25658T": [ + "23G", + "24I" + ], + "25671T": [ + "25B" + ], + "25721T": [ + "23C" + ], + "25793A": [ + "25B" + ], + "25904T": [ + "20H" + ], + "25907T": [ + "20G" + ], + "25925T": [ + "25A" + ], + "26060T": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "26078T": [ + "22D" + ], + "26149C": [ + "20J" + ], + "26270T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "26275G": [ + "23A", + "23F", + "23D", + "23B", + "22D", + "22F", + "23C", + "23E", + "23H", + "rec", + "23G" + ], + "26305T": [ + "21D" + ], + "26456T": [ + "20H" + ], + "26492T": [ + "21H" + ], + "26529A": [ + "22B", + "22E" + ], + "26529C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "26530G": [ + "21K" + ], + "26577G": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "26610G": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "23I", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "26681T": [ + "24A", + "24E", + "21C", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "rec", + "24H", + "24D", + "21B", + "24I", + "25B", + "25C" + ], + "26709A": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "26735T": [ + "20A", + "23G" + ], + "26767C": [ + "21J", + "21I", + "21A", + "21D" + ], + "26767G": [ + "21B" + ], + "26801G": [ + "20E" + ], + "26833T": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "26858T": [ + "21L", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "26894T": [ + "21G" + ], + "27038G": [ + "22B" + ], + "27059T": [ + "23G" + ], + "27259C": [ + "21K", + "21L", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "27382C": [ + "21L", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "27383T": [ + "21L", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "27384C": [ + "21L", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "24C", + "rec", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "27431T": [ + "23E" + ], + "27438C": [ + "22B" + ], + "27507C": [ + "23F", + "23D", + "23H" + ], + "27513T": [ + "22B" + ], + "27638C": [ + "21J", + "21I", + "21A", + "21B" + ], + "27739T": [ + "21A" + ], + "27752T": [ + "21J", + "21I", + "21A" + ], + "27788T": [ + "22A" + ], + "27807T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "27810C": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "24G", + "25A", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "27874T": [ + "21J" + ], + "27889T": [ + "22B", + "22E" + ], + "27890T": [ + "21C" + ], + "27897C": [ + "21E" + ], + "27915T": [ + "23A", + "23F", + "23D", + "23B", + "22F", + "23H", + "23G" + ], + "27925A": [ + "21H" + ], + "27925T": [ + "21F" + ], + "27944T": [ + "20E" + ], + "27964T": [ + "20G" + ], + "27972T": [ + "20I" + ], + "28005T": [ + "21H", + "23G" + ], + "28048T": [ + "20I" + ], + "28093T": [ + "21H" + ], + "28095T": [ + "20I" + ], + "28111G": [ + "20I" + ], + "28144C": [ + "19B" + ], + "28167A": [ + "20J" + ], + "28253T": [ + "20H", + "21G" + ], + "28271T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "28272T": [ + "21C", + "21H" + ], + "28280C": [ + "20I" + ], + "28281T": [ + "20I" + ], + "28282A": [ + "20I" + ], + "28291A": [ + "24F", + "24C" + ], + "28297C": [ + "23F", + "23D", + "23B", + "23H", + "22F", + "24H", + "24D", + "25B", + "25C" + ], + "28308G": [ + "21D" + ], + "28311T": [ + "21K", + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "25C" + ], + "28312T": [ + "22E" + ], + "28330G": [ + "22B" + ], + "28432T": [ + "25B" + ], + "28447G": [ + "23B" + ], + "28461G": [ + "21J", + "21I", + "21A" + ], + "28472T": [ + "20G" + ], + "28512G": [ + "20J" + ], + "28657T": [ + "23G" + ], + "28681T": [ + "22E" + ], + "28699G": [ + "21D" + ], + "28714T": [ + "24G" + ], + "28724T": [ + "22A" + ], + "28854T": [ + "20A" + ], + "28869T": [ + "20G", + "21F" + ], + "28877T": [ + "20J" + ], + "28878C": [ + "20J" + ], + "28881A": [ + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "22C", + "24A", + "20B", + "22A", + "23F", + "23D", + "20J", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "20D", + "20F", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "28881T": [ + "21J", + "21I", + "21A", + "21B" + ], + "28882A": [ + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "22C", + "24A", + "20B", + "22A", + "23F", + "23D", + "20J", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "20D", + "20F", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "28883C": [ + "21K", + "21L", + "22B", + "20I", + "22E", + "23A", + "22C", + "24A", + "20B", + "22A", + "23F", + "23D", + "20J", + "23B", + "22D", + "24E", + "22F", + "rec", + "23C", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "20D", + "20F", + "21G", + "24H", + "24D", + "21M", + "24I", + "25B", + "21E", + "25C" + ], + "28884C": [ + "24F", + "24C" + ], + "28887T": [ + "21C", + "20H", + "21H", + "21D" + ], + "28913T": [ + "21G" + ], + "28916T": [ + "21J" + ], + "28932T": [ + "20E" + ], + "28958A": [ + "24A", + "24E", + "24C", + "24F", + "24B", + "23I", + "24G", + "25A", + "24H", + "24I", + "25C" + ], + "28975A": [ + "21F" + ], + "28977T": [ + "20I" + ], + "29081T": [ + "25C" + ], + "29164C": [ + "25B" + ], + "29311T": [ + "21G" + ], + "29362T": [ + "21C" + ], + "29386T": [ + "23B" + ], + "29402T": [ + "21J", + "21I", + "21A", + "21B" + ], + "29409T": [ + "25C" + ], + "29510C": [ + "21L", + "22B", + "22E", + "23A", + "22C", + "24A", + "22A", + "23F", + "23D", + "23B", + "22D", + "24E", + "22F", + "23C", + "rec", + "24C", + "24F", + "23E", + "24B", + "23H", + "23I", + "24G", + "25A", + "23G", + "24H", + "24D", + "24I", + "25B", + "25C" + ], + "29543T": [ + "21D" + ], + "29625T": [ + "23F", + "23H" + ], + "29637A": [ + "24I" + ], + "29645T": [ + "20E" + ], + "29666T": [ + "22B" + ], + "29706T": [ + "23E" + ], + "29724T": [ + "21E" + ], + "29742T": [ + "21J", + "21I", + "21A", + "21B" + ], + "29834A": [ + "20J" + ] + } + }, + "attributes": { + "name": "SARS-CoV-2", + "reference name": "Wuhan-Hu-1/2019", + "reference accession": "MN908947" + }, + "shortcuts": [ + "sars-cov-2", + "nextstrain/sars-cov-2", + "nextstrain/sars-cov-2/wuhan-hu-1" + ] +} diff --git a/tools/nextclade/test-data/strict_qc.json b/tools/nextclade/test-data/strict_qc.json deleted file mode 100644 index 5bb47c6b1f2..00000000000 --- a/tools/nextclade/test-data/strict_qc.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "schemaVersion": "1.2.0", - "privateMutations": { - "enabled": true, - "typical": 5, - "cutoff": 10 - }, - "missingData": { - "enabled": true, - "missingDataThreshold": 10, - "scoreBias": 300 - }, - "snpClusters": { - "enabled": true, - "windowSize": 100, - "clusterCutOff": 1, - "scoreWeight": 20 - }, - "mixedSites": { - "enabled": true, - "mixedSitesThreshold": 5 - }, - "frameShifts": { - "enabled": true, - "ignoredFrameShifts": [ - { "geneName": "ORF3a", "codonRange": {"begin": 256, "end": 276} }, - { "geneName": "ORF3a", "codonRange": {"begin": 258, "end": 276} }, - { "geneName": "ORF7a", "codonRange": {"begin": 61, "end": 122} }, - { "geneName": "ORF7a", "codonRange": {"begin": 62, "end": 122} }, - { "geneName": "ORF7a", "codonRange": {"begin": 76, "end": 122} }, - { "geneName": "ORF7a", "codonRange": {"begin": 101, "end": 122} }, - { "geneName": "ORF7b", "codonRange": {"begin": 41, "end": 44} }, - { "geneName": "ORF8", "codonRange": {"begin": 107, "end": 122} }, - { "geneName": "ORF8", "codonRange": {"begin": 119, "end": 122} }, - { "geneName": "ORF8", "codonRange": {"begin": 120, "end": 122} }, - { "geneName": "ORF8", "codonRange": {"begin": 121, "end": 123} } - ] - }, - "stopCodons": { - "enabled": true, - "ignoredStopCodons": [ - {"geneName": "ORF7a", "codon": 61}, - {"geneName": "ORF7a", "codon": 93}, - {"geneName": "ORF7b", "codon": 32}, - {"geneName": "ORF7b", "codon": 38}, - {"geneName": "ORF8", "codon": 17}, - {"geneName": "ORF8", "codon": 18}, - {"geneName": "ORF8", "codon": 25}, - {"geneName": "ORF8", "codon": 26}, - {"geneName": "ORF8", "codon": 58}, - {"geneName": "ORF8", "codon": 66}, - {"geneName": "ORF8", "codon": 67}, - {"geneName": "ORF8", "codon": 105} - ] - } -} diff --git a/tools/nextclade/test-data/yellowfever.fasta.gz b/tools/nextclade/test-data/yellowfever.fasta.gz new file mode 100644 index 00000000000..3f74fedcf41 Binary files /dev/null and b/tools/nextclade/test-data/yellowfever.fasta.gz differ diff --git a/tools/nextclade/test-data/yellowfever_dataset.zip b/tools/nextclade/test-data/yellowfever_dataset.zip new file mode 100644 index 00000000000..0124e3661a8 Binary files /dev/null and b/tools/nextclade/test-data/yellowfever_dataset.zip differ