diff --git a/nextclade/Snakefile b/nextclade/Snakefile index 9be52d49..044fc64a 100644 --- a/nextclade/Snakefile +++ b/nextclade/Snakefile @@ -106,11 +106,38 @@ rule decompress_metadata: """ +rule filter_known_duplicates: + input: + known_duplicates="resources/known_duplicates.txt", + includes=[ + "resources/include_accessions.txt", + expand( + "resources/{build_name}/include_accessions.txt", build_name=BUILD_NAMES + ), + "resources/all-clades/include_recombinants.txt", + ], + output: + "results/known_duplicates_to_exclude.txt", + run: + known_duplicates = { + line.strip() for line in open(input.known_duplicates) if line.strip() + } + includes = set() + for path in input.includes: + for line in open(path): + accession = line.split("#", maxsplit=1)[0].strip() + if accession: + includes.add(accession) + with open(output[0], "w") as file: + for accession in sorted(known_duplicates - includes): + print(accession, file=file) + + rule decompress_sequences_and_remove_duplicates: "Decompressing sequences and strip version from fasta ID" input: sequences="data/{file}.fasta.zst", - known_duplicates="resources/known_duplicates.txt", + known_duplicates="results/known_duplicates_to_exclude.txt", output: sequences="data/{file}.fasta", params: @@ -118,11 +145,11 @@ rule decompress_sequences_and_remove_duplicates: shell: """ zstdcat {input.sequences} \ - | seqkit replace \ - -p "^([^.]+).*" -r '$1' \ - | seqkit grep -w0 -v -f {input.known_duplicates} \ - | seqkit seq -m={params.min_length} \ - > {output.sequences} + | seqkit replace \ + -p "^([^.]+).*" -r '$1' \ + | seqkit grep -w0 -v -f {input.known_duplicates} \ + | seqkit seq -m={params.min_length} \ + >{output.sequences} """ @@ -156,18 +183,30 @@ rule premask: rule deduplicate: - """ - Remove identical sequences (even if they have differing Ns) - Keep those sequences with fewer Ns - Focus for Nextclade is on diversity, not on representativeness - """ + # Remove identical sequences (even if they have differing Ns) + # Keep those sequences with fewer Ns + # Focus for Nextclade is on diversity, not on representativeness input: sequences="results/premasked.fasta", + includes=[ + "resources/include_accessions.txt", + expand( + "resources/{build_name}/include_accessions.txt", build_name=BUILD_NAMES + ), + "resources/all-clades/include_recombinants.txt", + ], output: "results/duplicates.txt", + params: + include_options=lambda w, input: " ".join( + f"--include {path}" for path in input.includes + ), shell: """ - python3 scripts/deduplicate.py {input.sequences} {output} + python3 scripts/deduplicate.py \ + {input.sequences} \ + {output} \ + {params.include_options} """ @@ -228,7 +267,14 @@ rule reformat_ambiguous: df["date"] = df["date"].apply(replace_ambiguous_date) - + df["outbreakLineage"] = df.apply( + lambda row: ( + f"{row['outbreak']}/{row['lineage']}" + if row["outbreak"] and row["lineage"] + else "" + ), + axis=1, + ) df.to_csv(output.metadata, sep="\t", index=False) @@ -361,21 +407,21 @@ rule align: shell: """ cat {input.root} {input.reference} {input.sequences} \ - | seqkit seq -w0 -i \ - | seqkit rmdup -n \ - | nextclade3 run \ - --retry-reverse-complement \ - --input-ref {input.reference} \ - --excess-bandwidth 100 \ - --terminal-bandwidth 300 \ - --allowed-mismatches 8 \ - --window-size 40 \ - --min-seed-cover 0.1 \ - --input-annotation {input.annotation} \ - --gap-alignment-side left \ - --output-fasta /dev/stdout \ - --output-translations {params.translation_template} \ - | seqkit seq -w0 -i > {output.alignment} + | seqkit seq -w0 -i \ + | seqkit rmdup -n \ + | nextclade3 run \ + --retry-reverse-complement \ + --input-ref {input.reference} \ + --excess-bandwidth 100 \ + --terminal-bandwidth 300 \ + --allowed-mismatches 8 \ + --window-size 40 \ + --min-seed-cover 0.1 \ + --input-annotation {input.annotation} \ + --gap-alignment-side left \ + --output-fasta /dev/stdout \ + --output-translations {params.translation_template} \ + | seqkit seq -w0 -i >{output.alignment} """ @@ -395,18 +441,25 @@ rule mask: rule deduplicate_2: - """ - Remove identical sequences (even if they have differing Ns) - Keep those sequences with fewer Ns - Focus for Nextclade is on diversity, not on representativeness - """ + # Remove identical sequences (even if they have differing Ns) + # Keep those sequences with fewer Ns + # Focus for Nextclade is on diversity, not on representativeness input: sequences="results/{build_name}/masked_with_dups.fasta", + include=lambda w: config[w.build_name]["general_include"], + specific_include="resources/{build_name}/include_accessions.txt", output: duplicates="results/{build_name}/duplicates.txt", + params: + include_options=lambda w, input: " ".join( + f"--include {path}" for path in [input.include, input.specific_include] + ), shell: """ - python3 scripts/deduplicate.py {input.sequences} {output.duplicates} + python3 scripts/deduplicate.py \ + {input.sequences} \ + {output.duplicates} \ + {params.include_options} """ @@ -422,7 +475,7 @@ rule pre_tree_exclude: seqkit grep -w0 -v -f \ <(cat {input.duplicates} {input.recombinants}) \ {input.sequences} \ - > {output.sequences} + >{output.sequences} """ @@ -451,23 +504,22 @@ else: rule tree: input: alignment="results/{build_name}/masked.fasta", + constraint_tree=lambda w: config[w.build_name].get("constraint_tree", ""), output: tree="results/{build_name}/masked.fasta.treefile", + params: + constraint_option=lambda w: ( + f"-g {config[w.build_name]['constraint_tree']}" + if "constraint_tree" in config[w.build_name] + else "" + ), shell: - # """ - # augur tree \ - # --alignment {input.alignment} \ - # --tree-builder-args "--polytomy --ninit 2 -n 2 --epsilon 0.05 -T 4 --redo" \ - # --nthreads 4 \ - # --output {output.tree} - # """ """ - ~/code/pree/rust/target/release/rust_parsimony build \ - {input.alignment} \ - --output-file {output.tree} \ - --pruning-threshold 30 \ - --num-trees 20 \ - --spr-trees 10 + augur tree \ + --alignment {input.alignment} \ + --tree-builder-args "--polytomy --ninit 2 -n 2 --epsilon 0.05 -T 4 --redo {params.constraint_option}" \ + --nthreads 4 \ + --output {output.tree} """ @@ -565,7 +617,7 @@ rule ancestral: --genes {params.genes} \ --output-node-data {output.node_data} \ --inference joint \ - 2>&1 > {output.log} + 2>&1 >{output.log} """ @@ -590,14 +642,21 @@ rule clades: rule rename_clades: input: clades="results/{build_name}/clades_raw.json", + tree="results/{build_name}/tree.nwk", script="scripts/clades_renaming.py", output: node_data="results/{build_name}/clades.json", + params: + outgroup_clade_name=lambda w: config[w.build_name].get( + "outgroup_clade_name", "unassigned" + ), shell: """ python {input.script} \ - --input-node-data {input.clades} \ - --output-node-data {output.node_data} + --input-node-data {input.clades} \ + --output-node-data {output.node_data} \ + --outgroup-clade-name {params.outgroup_clade_name} \ + --tree-file {input.tree} """ @@ -642,7 +701,7 @@ rule patch_auspice_config: auspice_config="results/{build_name}/auspice_config.json", shell: """ - jsonpatch {input.auspice_config} {input.patch_json} > {output.auspice_config} + jsonpatch {input.auspice_config} {input.patch_json} >{output.auspice_config} """ diff --git a/nextclade/config/config.yaml b/nextclade/config/config.yaml index a8be7cbd..b8d84fe1 100644 --- a/nextclade/config/config.yaml +++ b/nextclade/config/config.yaml @@ -4,18 +4,25 @@ clade-iib: exclude_where: b1: "--exclude-where clade!=IIb" nonb1: >- - --exclude-where clade!=IIb lineage=B.1 lineage=B.1.1 lineage=B.1.2 lineage=B.1.3 lineage=B.1.4 lineage=B.1.5 lineage=B.1.6 - lineage=B.1.7 lineage=B.1.8 lineage=B.1.9 lineage=B.1.10 lineage=B.1.11 lineage=B.1.12 lineage=B.1.13 lineage=B.1.14 - lineage=B.1.15 - lineage=B.1.16 lineage=B.1.17 lineage=B.1.18 lineage=B.1.19 lineage=B.1.20 lineage=B.1.21 lineage=B.1.22 lineage=B.1.23 - lineage=C.1 lineage=C.2 lineage=C.3 lineage=C.4 lineage=C.5 lineage=C.6 lineage=D.1 lineage=D.2 lineage=D.3 lineage=D.4 - lineage=D.5 lineage=D.6 lineage=E.1 lineage=E.2 lineage=E.3 lineage=E.4 lineage=E.5 lineage=E.6 lineage=F.1 lineage=F.2 - lineage=F.3 lineage=F.4 lineage=F.5 lineage=F.6 lineage=C.1.2 lineage=C.1.3 lineage=E.4 lineage=E.1.1 lineage=E.2.1 - lineage=E.3.1 lineage=F.2.1 lineage=F.4.1 lineage=J.1 + --exclude-where clade!=IIb outbreakLineage=sh2017/B.1 outbreakLineage=sh2017/B.1.1 outbreakLineage=sh2017/B.1.2 outbreakLineage=sh2017/B.1.3 + outbreakLineage=sh2017/B.1.4 outbreakLineage=sh2017/B.1.5 outbreakLineage=sh2017/B.1.6 + outbreakLineage=sh2017/B.1.7 outbreakLineage=sh2017/B.1.8 outbreakLineage=sh2017/B.1.9 outbreakLineage=sh2017/B.1.10 + outbreakLineage=sh2017/B.1.11 outbreakLineage=sh2017/B.1.12 outbreakLineage=sh2017/B.1.13 outbreakLineage=sh2017/B.1.14 + outbreakLineage=sh2017/B.1.15 + outbreakLineage=sh2017/B.1.16 outbreakLineage=sh2017/B.1.17 outbreakLineage=sh2017/B.1.18 outbreakLineage=sh2017/B.1.19 + outbreakLineage=sh2017/B.1.20 outbreakLineage=sh2017/B.1.21 outbreakLineage=sh2017/B.1.22 outbreakLineage=sh2017/B.1.23 + outbreakLineage=sh2017/C.1 outbreakLineage=sh2017/C.2 outbreakLineage=sh2017/C.3 outbreakLineage=sh2017/C.4 outbreakLineage=sh2017/C.5 + outbreakLineage=sh2017/C.6 outbreakLineage=sh2017/D.1 outbreakLineage=sh2017/D.2 outbreakLineage=sh2017/D.3 outbreakLineage=sh2017/D.4 + outbreakLineage=sh2017/D.5 outbreakLineage=sh2017/D.6 outbreakLineage=sh2017/E.1 outbreakLineage=sh2017/E.2 outbreakLineage=sh2017/E.3 + outbreakLineage=sh2017/E.4 outbreakLineage=sh2017/E.5 outbreakLineage=sh2017/E.6 outbreakLineage=sh2017/F.1 outbreakLineage=sh2017/F.2 + outbreakLineage=sh2017/F.3 outbreakLineage=sh2017/F.4 outbreakLineage=sh2017/F.5 outbreakLineage=sh2017/F.6 outbreakLineage=sh2017/C.1.2 + outbreakLineage=sh2017/C.1.3 outbreakLineage=sh2017/E.4 outbreakLineage=sh2017/E.1.1 outbreakLineage=sh2017/E.2.1 + outbreakLineage=sh2017/E.3.1 outbreakLineage=sh2017/F.2.1 outbreakLineage=sh2017/F.4.1 outbreakLineage=sh2017/J.1 subsampling: - b1: "--subsample-max-sequences 1000 --group-by clade lineage year month country --probabilistic-sampling" - nonb1: "--sequences-per-group 10 --group-by clade lineage year month country --probabilistic-sampling" + b1: "--subsample-max-sequences 1000 --group-by clade outbreakLineage year month country --probabilistic-sampling" + nonb1: "--sequences-per-group 10 --group-by clade outbreakLineage year month country --probabilistic-sampling" general_include: "resources/include_accessions.txt" + outgroup_clade_name: "outgroup" clade-i: root: "reconstructed_ancestral_mpox" @@ -24,8 +31,8 @@ clade-i: b1: "--exclude-where clade=II clade=IIa clade=IIb clade=outgroup clade=Ia" nonb1: "--exclude-where clade=II clade=IIa clade=IIb clade=outgroup clade=Ib" subsampling: - b1: "--subsample-max-sequences 1000 --group-by clade lineage year month country --probabilistic-sampling" - nonb1: "--subsample-max-sequences 1000 --group-by clade lineage year month country --probabilistic-sampling" + b1: "--subsample-max-sequences 1000 --group-by clade outbreakLineage year month country --probabilistic-sampling" + nonb1: "--subsample-max-sequences 1000 --group-by clade outbreakLineage year month country --probabilistic-sampling" annotation: "resources/clade-i/genome_annotation.gff3" genes: "resources/clade-i/genes.txt" general_include: "resources/clade-i/include_accessions.txt" @@ -36,37 +43,45 @@ clade-i: - OPG005 - OPG015_dup - OPG016 + outgroup_clade_name: "outgroup" + constraint_tree: "resources/clade-i/constraint_tree.nwk" all-clades: root: "reconstructed_ancestral_mpox" min_date: "" exclude_where: - b1: "--exclude-where outbreak=hMPXV-1" - nonb1: "--exclude-where outbreak!=hMPXV-1" + b1: "--exclude-where outbreak=sh2017" + nonb1: "--exclude-where outbreak!=sh2017" subsampling: - b1: "--subsample-max-sequences 500 --group-by clade lineage year country --probabilistic-sampling" - nonb1: "--subsample-max-sequences 800 --group-by clade lineage year country --probabilistic-sampling" + b1: "--subsample-max-sequences 600 --group-by clade outbreakLineage year country --probabilistic-sampling" + nonb1: "--subsample-max-sequences 1000 --group-by clade outbreakLineage year country --probabilistic-sampling" general_include: "resources/include_accessions.txt" genes_to_exclude: - OPG001_dup - OPG002_dup - OPG003_dup - OPG015_dup + outgroup_clade_name: "unassigned" lineage-b.1: root: "ref_in_coord" min_date: "" exclude_where: b1: >- - --min-date 2022 --exclude-where outbreak!=hMPXV-1 lineage=A.2 lineage=A.2.1 lineage=A.2.2 lineage=A.2.3 lineage=A.2.4 - lineage=A.2.5 lineage=G.1 lineage=H.1 lineage=H.2 lineage=A lineage=A.1 + --min-date 2022 --exclude-where outbreak!=sh2017 outbreakLineage=sh2017/A.2 outbreakLineage=sh2017/A.2.1 outbreakLineage=sh2017/A.2.2 + outbreakLineage=sh2017/A.2.3 outbreakLineage=sh2017/A.2.4 + outbreakLineage=sh2017/A.2.5 outbreakLineage=sh2017/G.1 outbreakLineage=sh2017/H.1 outbreakLineage=sh2017/H.2 outbreakLineage=sh2017/A + outbreakLineage=sh2017/A.1 nonb1: >- - --min-date 2024 --exclude-where outbreak!=hMPXV-1 lineage=A.2 lineage=A.2.1 lineage=A.2.2 lineage=A.2.3 lineage=A.2.4 - lineage=A.2.5 lineage=G.1 lineage=H.1 lineage=H.2 lineage=A lineage=A.1 + --min-date 2024 --exclude-where outbreak!=sh2017 outbreakLineage=sh2017/A.2 outbreakLineage=sh2017/A.2.1 outbreakLineage=sh2017/A.2.2 + outbreakLineage=sh2017/A.2.3 outbreakLineage=sh2017/A.2.4 + outbreakLineage=sh2017/A.2.5 outbreakLineage=sh2017/G.1 outbreakLineage=sh2017/H.1 outbreakLineage=sh2017/H.2 outbreakLineage=sh2017/A + outbreakLineage=sh2017/A.1 subsampling: - b1: "--subsample-max-sequences 2000 --group-by clade lineage year month country --probabilistic-sampling" - nonb1: "--subsample-max-sequences 2000 --group-by clade lineage year month country --probabilistic-sampling" + b1: "--subsample-max-sequences 2000 --group-by clade outbreakLineage year month country --probabilistic-sampling" + nonb1: "--subsample-max-sequences 2000 --group-by clade outbreakLineage year month country --probabilistic-sampling" general_include: "resources/include_accessions.txt" + outgroup_clade_name: "outgroup" ## filter min_length: 160000 diff --git a/nextclade/resources/all-clades/clades.tsv b/nextclade/resources/all-clades/clades.tsv index 02a0d96b..14f8911d 100644 --- a/nextclade/resources/all-clades/clades.tsv +++ b/nextclade/resources/all-clades/clades.tsv @@ -1,6 +1,7 @@ # Nuc coordinates valid for reference NC_063383 (MPXV-M5312_HM12_Rivers) clade gene site alt -unassigned nuc 179226 T + +unassigned nuc 720 C clade Ib/IIb nuc 60171 T clade Ib/IIb nuc 122558 A @@ -19,9 +20,34 @@ sh2024 nuc 171897 A clade Ib clade clade I clade Ib nuc 19455 T +sh2023/A.1 clade clade Ib +sh2023/A.1 nuc 140753 A +sh2023/A.1 nuc 186208 A + +sh2023/A.2 clade clade Ib +sh2023/A.2 nuc 138816 A +sh2023/A.2 nuc 165799 T + +sh2023/A.3 clade clade Ib +sh2023/A.3 nuc 54739 G +sh2023/A.3 nuc 128447 T + +sh2023/A.4 clade clade Ib +sh2023/A.4 nuc 149636 T +sh2023/A.4 nuc 171609 A + +sh2023/A.4.1 clade sh2023/A.4 +sh2023/A.4.1 nuc 3656 A +sh2023/A.4.1 nuc 17707 T + +sh2023/A.5 clade clade Ib +sh2023/A.5 nuc 4301 T +sh2023/A.5 nuc 127872 A + clade II nuc 86502 G clade II nuc 150970 A clade II nuc 35352 C +clade II nuc 103424 T clade IIa clade clade II clade IIa nuc 54013 G @@ -29,243 +55,243 @@ clade IIa nuc 54013 G clade IIb clade clade II clade IIb nuc 48148 C -sh2017 clade clade IIb -sh2017 nuc 19367 T -sh2017 nuc 48527 A +sh2017/A clade clade IIb +sh2017/A nuc 19367 T +sh2017/A nuc 48527 A -A.1 clade sh2017 -A.1 nuc 83326 T +sh2017/A.1 clade sh2017/A +sh2017/A.1 nuc 83326 T -A.1.1 clade A.1 -A.1.1 nuc 34459 A +sh2017/A.1.1 clade sh2017/A.1 +sh2017/A.1.1 nuc 34459 A -B.1 clade A.1.1 -B.1 nuc 77383 A +sh2017/B.1 clade sh2017/A.1.1 +sh2017/B.1 nuc 77383 A -B.1.1 clade B.1 -B.1.1 nuc 74360 A +sh2017/B.1.1 clade sh2017/B.1 +sh2017/B.1.1 nuc 74360 A -B.1.2 clade B.1 -B.1.2 nuc 186165 A +sh2017/B.1.2 clade sh2017/B.1 +sh2017/B.1.2 nuc 186165 A -B.1.3 clade B.1 -B.1.3 nuc 190660 A +sh2017/B.1.3 clade sh2017/B.1 +sh2017/B.1.3 nuc 190660 A -C.1 clade B.1.3 -C.1 nuc 105923 A -C.1 nuc 64426 T -C.1 nuc 55133 A +sh2017/C.1 clade sh2017/B.1.3 +sh2017/C.1 nuc 105923 A +sh2017/C.1 nuc 64426 T +sh2017/C.1 nuc 55133 A -C.1.1 clade C.1 -C.1.1 nuc 21062 T -C.1.1 nuc 149963 T +sh2017/C.1.1 clade sh2017/C.1 +sh2017/C.1.1 nuc 21062 T +sh2017/C.1.1 nuc 149963 T -E.1 clade C.1.1 -E.1 nuc 13563 A -E.1 nuc 121394 T -E.1 nuc 162280 A +sh2017/E.1 clade sh2017/C.1.1 +sh2017/E.1 nuc 13563 A +sh2017/E.1 nuc 121394 T +sh2017/E.1 nuc 162280 A -E.1.1 clade E.1 -E.1.1 nuc 41405 T -E.1.1 nuc 157928 T +sh2017/E.1.1 clade sh2017/E.1 +sh2017/E.1.1 nuc 41405 T +sh2017/E.1.1 nuc 157928 T -E.2 clade C.1.1 -E.2 nuc 13563 A -E.2 nuc 151847 A -E.2 nuc 37738 T +sh2017/E.2 clade sh2017/C.1.1 +sh2017/E.2 nuc 13563 A +sh2017/E.2 nuc 151847 A +sh2017/E.2 nuc 37738 T -E.2.1 clade E.2 -E.2.1 nuc 55466 A -E.2.1 nuc 135121 T +sh2017/E.2.1 clade sh2017/E.2 +sh2017/E.2.1 nuc 55466 A +sh2017/E.2.1 nuc 135121 T -E.3 clade C.1.1 -E.3 nuc 142797 T +sh2017/E.3 clade sh2017/C.1.1 +sh2017/E.3 nuc 142797 T -E.3.1 clade E.3 -E.3.1 nuc 113957 T -E.3.1 nuc 74018 T +sh2017/E.3.1 clade sh2017/E.3 +sh2017/E.3.1 nuc 113957 T +sh2017/E.3.1 nuc 74018 T -E.4 clade C.1.1 -E.4 nuc 41806 A -E.4 nuc 136791 G +sh2017/E.4 clade sh2017/C.1.1 +sh2017/E.4 nuc 41806 A +sh2017/E.4 nuc 136791 G -C.1.2 clade C.1 -C.1.2 nuc 28142 A -C.1.2 nuc 126761 A +sh2017/C.1.2 clade sh2017/C.1 +sh2017/C.1.2 nuc 28142 A +sh2017/C.1.2 nuc 126761 A -C.1.3 clade C.1 -C.1.3 nuc 33332 T -C.1.3 nuc 37974 A +sh2017/C.1.3 clade sh2017/C.1 +sh2017/C.1.3 nuc 33332 T +sh2017/C.1.3 nuc 37974 A -B.1.4 clade B.1 -B.1.4 nuc 34308 A +sh2017/B.1.4 clade sh2017/B.1 +sh2017/B.1.4 nuc 34308 A -B.1.5 clade B.1 -B.1.5 nuc 70780 T +sh2017/B.1.5 clade sh2017/B.1 +sh2017/B.1.5 nuc 70780 T -B.1.6 clade B.1 -B.1.6 nuc 111029 A +sh2017/B.1.6 clade sh2017/B.1 +sh2017/B.1.6 nuc 111029 A -D.1 clade B.1.6 -D.1 nuc 10945 A -D.1 nuc 39515 A -D.1 nuc 44627 T -D.1 nuc 56276 A +sh2017/D.1 clade sh2017/B.1.6 +sh2017/D.1 nuc 10945 A +sh2017/D.1 nuc 39515 A +sh2017/D.1 nuc 44627 T +sh2017/D.1 nuc 56276 A -B.1.7 clade B.1 -B.1.7 nuc 25644 T +sh2017/B.1.7 clade sh2017/B.1 +sh2017/B.1.7 nuc 25644 T -B.1.8 clade B.1 -B.1.8 nuc 5595 A -B.1.8 nuc 191615 T +sh2017/B.1.8 clade sh2017/B.1 +sh2017/B.1.8 nuc 5595 A +sh2017/B.1.8 nuc 191615 T -B.1.9 clade B.1 -B.1.9 nuc 181367 A +sh2017/B.1.9 clade sh2017/B.1 +sh2017/B.1.9 nuc 181367 A -B.1.10 clade B.1 -B.1.10 nuc 89906 T -B.1.10 nuc 94798 A +sh2017/B.1.10 clade sh2017/B.1 +sh2017/B.1.10 nuc 89906 T +sh2017/B.1.10 nuc 94798 A -B.1.11 clade B.1 -B.1.11 nuc 18133 T -B.1.11 nuc 159277 A - -B.1.12 clade B.1 -B.1.12 nuc 182950 T +sh2017/B.1.11 clade sh2017/B.1 +sh2017/B.1.11 nuc 18133 T +sh2017/B.1.11 nuc 159277 A + +sh2017/B.1.12 clade sh2017/B.1 +sh2017/B.1.12 nuc 182950 T -B.1.13 clade B.1 -B.1.13 nuc 175093 A +sh2017/B.1.13 clade sh2017/B.1 +sh2017/B.1.13 nuc 175093 A -B.1.14 clade B.1 -B.1.14 nuc 36617 A -B.1.14 nuc 159779 T - -B.1.15 clade B.1 -B.1.15 nuc 149818 A -B.1.15 nuc 151362 A - -B.1.16 clade B.1 -B.1.16 nuc 9389 T -B.1.16 nuc 161797 A -B.1.16 nuc 185557 C - -B.1.17 clade B.1 -B.1.17 nuc 12169 A -B.1.17 nuc 44960 A - -B.1.18 clade B.1 -B.1.18 nuc 141757 T -B.1.18 nuc 43706 T -B.1.18 nuc 124690 C - -B.1.19 clade B.1 -B.1.19 nuc 9963 A -B.1.19 nuc 148268 T - -B.1.20 clade B.1 -B.1.20 nuc 53326 A -B.1.20 nuc 164385 T -B.1.20 nuc 187620 T - -F.1 clade B.1.20 -F.1 nuc 11668 A -F.1 nuc 35132 A -F.1 nuc 70414 T -F.1 nuc 70666 T -F.1 nuc 96938 T - -F.1.1 clade F.1 -F.1.1 nuc 133402 T -F.1.1 nuc 143277 T - -F.2 clade B.1.20 -F.2 nuc 161629 A -F.2 nuc 22167 T - -F.2.1 clade F.2 -F.2.1 nuc 44032 T -F.2.1 nuc 80820 A -F.2.1 nuc 165892 A - -F.3 clade B.1.20 -F.3 nuc 174050 T -F.3 nuc 180618 T - -F.4 clade B.1.20 -F.4 nuc 34277 T -F.4 nuc 92382 T -F.4 nuc 122551 T -F.4 nuc 126919 A -F.4 nuc 176643 A - -F.4.1 clade F.4 -F.4.1 nuc 21394 A -F.4.1 nuc 111492 T - -F.5 clade B.1.20 -F.5 nuc 150831 T -F.5 nuc 126169 A - -F.6 clade B.1.20 -F.6 nuc 146690 A -F.6 nuc 159608 T -F.6 nuc 168964 A - -B.1.21 clade B.1 -B.1.21 nuc 22415 A -B.1.21 nuc 132698 T - -B.1.22 clade B.1 -B.1.22 nuc 34784 T -B.1.22 nuc 101418 T - -J.1 clade B.1.22 -J.1 nuc 45528 T -J.1 nuc 121663 A - -B.1.23 clade B.1 -B.1.23 nuc 27935 A -B.1.23 nuc 64171 G -B.1.23 nuc 73235 T - -A.2 clade sh2017 -A.2 nuc 34472 T - -A.2.1 clade A.2 -A.2.1 nuc 25072 T -A.2.1 nuc 140492 C -A.2.1 nuc 179537 T - -H.1 clade A.2.1 -H.1 nuc 52289 A -H.1 nuc 67261 A -H.1 nuc 181947 A - -H.2 clade A.2.1 -H.2 nuc 43103 A -H.2 nuc 184924 T - -A.2.2 clade A.2 -A.2.2 nuc 21991 A -A.2.2 nuc 103019 T -A.2.2 nuc 158424 A - -G.1 clade A.2.2 -G.1 nuc 85413 T -G.1 nuc 164382 C - -A.2.3 clade A.2 -A.2.3 nuc 57284 T -A.2.3 nuc 74226 T - -A.2.4 clade A.2 -A.2.4 nuc 15105 T -A.2.4 nuc 179628 G - -A.2.5 clade A.2 -A.2.5 nuc 12426 T -A.2.5 nuc 134107 A - -A.3 clade sh2017 -A.3 nuc 96841 A -A.3 nuc 100971 T \ No newline at end of file +sh2017/B.1.14 clade sh2017/B.1 +sh2017/B.1.14 nuc 36617 A +sh2017/B.1.14 nuc 159779 T + +sh2017/B.1.15 clade sh2017/B.1 +sh2017/B.1.15 nuc 149818 A +sh2017/B.1.15 nuc 151362 A + +sh2017/B.1.16 clade sh2017/B.1 +sh2017/B.1.16 nuc 9389 T +sh2017/B.1.16 nuc 161797 A +sh2017/B.1.16 nuc 185557 C + +sh2017/B.1.17 clade sh2017/B.1 +sh2017/B.1.17 nuc 12169 A +sh2017/B.1.17 nuc 44960 A + +sh2017/B.1.18 clade sh2017/B.1 +sh2017/B.1.18 nuc 141757 T +sh2017/B.1.18 nuc 43706 T +sh2017/B.1.18 nuc 124690 C + +sh2017/B.1.19 clade sh2017/B.1 +sh2017/B.1.19 nuc 9963 A +sh2017/B.1.19 nuc 148268 T + +sh2017/B.1.20 clade sh2017/B.1 +sh2017/B.1.20 nuc 53326 A +sh2017/B.1.20 nuc 164385 T +sh2017/B.1.20 nuc 187620 T + +sh2017/F.1 clade sh2017/B.1.20 +sh2017/F.1 nuc 11668 A +sh2017/F.1 nuc 35132 A +sh2017/F.1 nuc 70414 T +sh2017/F.1 nuc 70666 T +sh2017/F.1 nuc 96938 T + +sh2017/F.1.1 clade sh2017/F.1 +sh2017/F.1.1 nuc 133402 T +sh2017/F.1.1 nuc 143277 T + +sh2017/F.2 clade sh2017/B.1.20 +sh2017/F.2 nuc 161629 A +sh2017/F.2 nuc 22167 T + +sh2017/F.2.1 clade sh2017/F.2 +sh2017/F.2.1 nuc 44032 T +sh2017/F.2.1 nuc 80820 A +sh2017/F.2.1 nuc 165892 A + +sh2017/F.3 clade sh2017/B.1.20 +sh2017/F.3 nuc 174050 T +sh2017/F.3 nuc 180618 T + +sh2017/F.4 clade sh2017/B.1.20 +sh2017/F.4 nuc 34277 T +sh2017/F.4 nuc 92382 T +sh2017/F.4 nuc 122551 T +sh2017/F.4 nuc 126919 A +sh2017/F.4 nuc 176643 A + +sh2017/F.4.1 clade sh2017/F.4 +sh2017/F.4.1 nuc 21394 A +sh2017/F.4.1 nuc 111492 T + +sh2017/F.5 clade sh2017/B.1.20 +sh2017/F.5 nuc 150831 T +sh2017/F.5 nuc 126169 A + +sh2017/F.6 clade sh2017/B.1.20 +sh2017/F.6 nuc 146690 A +sh2017/F.6 nuc 159608 T +sh2017/F.6 nuc 168964 A + +sh2017/B.1.21 clade sh2017/B.1 +sh2017/B.1.21 nuc 22415 A +sh2017/B.1.21 nuc 132698 T + +sh2017/B.1.22 clade sh2017/B.1 +sh2017/B.1.22 nuc 34784 T +sh2017/B.1.22 nuc 101418 T + +sh2017/J.1 clade sh2017/B.1.22 +sh2017/J.1 nuc 45528 T +sh2017/J.1 nuc 121663 A + +sh2017/B.1.23 clade sh2017/B.1 +sh2017/B.1.23 nuc 27935 A +sh2017/B.1.23 nuc 64171 G +sh2017/B.1.23 nuc 73235 T + +sh2017/A.2 clade sh2017/A +sh2017/A.2 nuc 34472 T + +sh2017/A.2.1 clade sh2017/A.2 +sh2017/A.2.1 nuc 25072 T +sh2017/A.2.1 nuc 140492 C +sh2017/A.2.1 nuc 179537 T + +sh2017/H.1 clade sh2017/A.2.1 +sh2017/H.1 nuc 52289 A +sh2017/H.1 nuc 67261 A +sh2017/H.1 nuc 181947 A + +sh2017/H.2 clade sh2017/A.2.1 +sh2017/H.2 nuc 43103 A +sh2017/H.2 nuc 184924 T + +sh2017/A.2.2 clade sh2017/A.2 +sh2017/A.2.2 nuc 21991 A +sh2017/A.2.2 nuc 103019 T +sh2017/A.2.2 nuc 158424 A + +sh2017/G.1 clade sh2017/A.2.2 +sh2017/G.1 nuc 85413 T +sh2017/G.1 nuc 164382 C + +sh2017/A.2.3 clade sh2017/A.2 +sh2017/A.2.3 nuc 57284 T +sh2017/A.2.3 nuc 74226 T + +sh2017/A.2.4 clade sh2017/A.2 +sh2017/A.2.4 nuc 15105 T +sh2017/A.2.4 nuc 179628 G + +sh2017/A.2.5 clade sh2017/A.2 +sh2017/A.2.5 nuc 12426 T +sh2017/A.2.5 nuc 134107 A + +sh2017/A.3 clade sh2017/A +sh2017/A.3 nuc 96841 A +sh2017/A.3 nuc 100971 T diff --git a/nextclade/resources/all-clades/include_accessions.txt b/nextclade/resources/all-clades/include_accessions.txt index 3f1d74e6..4a3758e1 100644 --- a/nextclade/resources/all-clades/include_accessions.txt +++ b/nextclade/resources/all-clades/include_accessions.txt @@ -1,5 +1,19 @@ reconstructed_ancestral_mpox #reference +PP_000ZHUV #reference for sh2023/A +PP_000SV68 #reference for sh2023/A +PP_004JQPQ #reference for sh2023/A.1 +PP_0014F50 #reference for sh2023/A.2 +PP_006VEEV #reference for sh2023/A.2 +PP_004BJA4 #reference for sh2023/A.3 +PP_0014F18 #reference for sh2023/A.3 +PP_006KNVA #reference for sh2023/A.4 +PP_004G68A #reference for sh2023/A.4 +PP_006XGN6 #reference for sh2023/A.4.1 +PP_006WSXE #reference for sh2023/A.4.1 +PP_001016L #reference for sh2023/A.5 +PP_006KPSF #reference for sh2023/A.5 + MT903337 #reference for A PP_000T5FC #reference for A MK783031 #reference for A diff --git a/nextclade/resources/all-clades/mask.bed b/nextclade/resources/all-clades/mask.bed index 9781bb22..d094a32d 100644 --- a/nextclade/resources/all-clades/mask.bed +++ b/nextclade/resources/all-clades/mask.bed @@ -1,9 +1,11 @@ Chrom ChromStart ChromEnd locus tag Comment chr 0 1500 mask from beginning chr 6400 7100 very diverse region in clade IIa vs (clade IIb and clade I) +chr 18105 18110 clade I vs II reference bias in Ugandan sequences chr 29750 29770 clade I vs II alignment issues/homopolymers chr 39050 39090 clade I vs II alignment issues/homopolymers chr 107660 107680 clade I vs II alignment issues/homopolymers +chr 121319 121321 clade I vs II reference bias in Ugandan sequences chr 133050 133250 indel variation and long homopolymers chr 136500 136600 indel variation and long homopolymers chr 140050 140250 indel variation and long repetitive elements diff --git a/nextclade/resources/auspice_config.json b/nextclade/resources/auspice_config.json index f3795b79..4f3c8a89 100644 --- a/nextclade/resources/auspice_config.json +++ b/nextclade/resources/auspice_config.json @@ -27,6 +27,11 @@ "name": "lineage", "displayName": "Lineage", "description": "" + }, + { + "name": "outbreakLineage", + "displayName": "Outbreak/Lineage", + "description": "" } ], "placement_mask_ranges": [ @@ -63,6 +68,11 @@ "title": "Lineage", "type": "categorical" }, + { + "key": "outbreakLineage", + "title": "Outbreak lineage", + "type": "categorical" + }, { "key": "date", "title": "Collection Date", @@ -181,6 +191,7 @@ "filters": [ "clade_membership", "lineage", + "outbreakLineage", "country", "host", "author", diff --git a/nextclade/resources/clade-i/auspice_config_patch.json b/nextclade/resources/clade-i/auspice_config_patch.json index 4d465e58..de5a1dbe 100644 --- a/nextclade/resources/clade-i/auspice_config_patch.json +++ b/nextclade/resources/clade-i/auspice_config_patch.json @@ -38,7 +38,6 @@ { "begin": 173260, "end": 173460 }, { "begin": 177247, "end": 177349 }, { "begin": 179096, "end": 179396 }, - { "begin": 185990, "end": 186092 }, { "begin": 190885, "end": 196967 } ] } diff --git a/nextclade/resources/clade-i/clades.tsv b/nextclade/resources/clade-i/clades.tsv index 13cbab4b..747d125c 100644 --- a/nextclade/resources/clade-i/clades.tsv +++ b/nextclade/resources/clade-i/clades.tsv @@ -1,7 +1,5 @@ # Nuc coordinates valid for reference DQ011155.1 clade gene site alt -unassigned nuc 113493 G - clade I nuc 75464 G clade I nuc 165916 T @@ -15,3 +13,27 @@ sh2024 nuc 189974 T clade Ib clade clade I clade Ib nuc 91698 A + +sh2023/A.1 clade clade Ib +sh2023/A.1 nuc 142696 A +sh2023/A.1 nuc 185991 A + +sh2023/A.2 clade clade Ib +sh2023/A.2 nuc 140762 A +sh2023/A.2 nuc 165512 T + +sh2023/A.3 clade clade Ib +sh2023/A.3 nuc 57123 G +sh2023/A.3 nuc 130845 T + +sh2023/A.4 clade clade Ib +sh2023/A.4 nuc 151617 T +sh2023/A.4 nuc 171422 A + +sh2023/A.4.1 clade sh2023/A.4 +sh2023/A.4.1 nuc 3703 A +sh2023/A.4.1 nuc 17884 T + +sh2023/A.5 clade clade Ib +sh2023/A.5 nuc 4348 T +sh2023/A.5 nuc 130270 A diff --git a/nextclade/resources/clade-i/constraint_tree.nwk b/nextclade/resources/clade-i/constraint_tree.nwk new file mode 100644 index 00000000..41da19e5 --- /dev/null +++ b/nextclade/resources/clade-i/constraint_tree.nwk @@ -0,0 +1,32 @@ +( + ( + PP_000ZHUV, + PP_000SV68 + )internal_A, + ( + ( + PP_004JQPQ, + ( + PP_0014F50, + PP_006VEEV + )internal_A_2, + ( + PP_004BJA4, + PP_0014F18 + )internal_A_3 + )internal_A_1_to_A_3, + ( + ( + PP_006KNVA, + PP_004G68A, + PP_006XGN6, + PP_006WSXE + )internal_A_4_to_A_4.1, + ( + PP_001016L, + PP_006KPSF + )internal_A_5 + )internal_A_4_to_A_5 + )internal_A_1_to_A_5 +)internal_11da60f9 +; diff --git a/nextclade/resources/clade-i/include_accessions.txt b/nextclade/resources/clade-i/include_accessions.txt index 1d624d10..78cdc5d7 100644 --- a/nextclade/resources/clade-i/include_accessions.txt +++ b/nextclade/resources/clade-i/include_accessions.txt @@ -4,6 +4,20 @@ KJ642617 # outgroup IIb PP_000T2N0 # outgroup IIb reconstructed_ancestral_mpox #reference +PP_000ZHUV #reference for sh2023/A +PP_000SV68 #reference for sh2023/A +PP_004JQPQ #reference for sh2023/A.1 +PP_0014F50 #reference for sh2023/A.2 +PP_006VEEV #reference for sh2023/A.2 +PP_004BJA4 #reference for sh2023/A.3 +PP_0014F18 #reference for sh2023/A.3 +PP_006KNVA #reference for sh2023/A.4 +PP_004G68A #reference for sh2023/A.4 +PP_006XGN6 #reference for sh2023/A.4.1 +PP_006WSXE #reference for sh2023/A.4.1 +PP_001016L #reference for sh2023/A.5 +PP_006KPSF #reference for sh2023/A.5 + PP_000STVX PP_000ZHHH PP_0010A3H diff --git a/nextclade/resources/clade-i/include_recombinants.txt b/nextclade/resources/clade-i/include_recombinants.txt new file mode 100644 index 00000000..3e8a398b --- /dev/null +++ b/nextclade/resources/clade-i/include_recombinants.txt @@ -0,0 +1 @@ +PP_004DYJ3 diff --git a/nextclade/resources/clade-i/mask.bed b/nextclade/resources/clade-i/mask.bed index 34d6b73f..62353a55 100644 --- a/nextclade/resources/clade-i/mask.bed +++ b/nextclade/resources/clade-i/mask.bed @@ -4,7 +4,9 @@ chr 6610 6612 artefact in some DRC sequences chr 10399 10521 very diverse in clade I chr 13867 13869 reverted in some Ib chr 18280 18282 homoplasic in Ib -chr 20570 20580 homoplasic in Ib +chr 19251 19253 deleted/homoplasic in Ib +chr 20392 20394 deleted/homoplasic in Ib +chr 20570 20581 homoplasic in Ib chr 31903 31905 homoplasic in Ib chr 58388 58490 homoplasic in Ib chr 64227 64329 homoplasic in Ib @@ -20,7 +22,6 @@ chr 159132 159234 homoplasic in Ib chr 165586 165688 homoplasic in Ib chr 169399 169601 homoplasic in Ib chr 177247 177349 homoplasic in Ib -chr 185990 186092 homoplasic in Ib chr 133165 133365 indel variation and long homopolymers chr 136612 136712 indel variation and long homopolymers chr 140150 140350 indel variation and long repetitive elements diff --git a/nextclade/resources/clade-iib/clades.tsv b/nextclade/resources/clade-iib/clades.tsv index 8b8adea7..d92c7f0a 100644 --- a/nextclade/resources/clade-iib/clades.tsv +++ b/nextclade/resources/clade-iib/clades.tsv @@ -4,243 +4,243 @@ outgroup nuc 54013 G clade IIb nuc 48148 C -A clade clade IIb -A nuc 19367 T -A nuc 48527 A +sh2017/A clade clade IIb +sh2017/A nuc 19367 T +sh2017/A nuc 48527 A -A.1 clade A -A.1 nuc 83326 T +sh2017/A.1 clade sh2017/A +sh2017/A.1 nuc 83326 T -A.1.1 clade A.1 -A.1.1 nuc 34459 A +sh2017/A.1.1 clade sh2017/A.1 +sh2017/A.1.1 nuc 34459 A -B.1 clade A.1.1 -B.1 nuc 77383 A +sh2017/B.1 clade sh2017/A.1.1 +sh2017/B.1 nuc 77383 A -B.1.1 clade B.1 -B.1.1 nuc 74360 A +sh2017/B.1.1 clade sh2017/B.1 +sh2017/B.1.1 nuc 74360 A -B.1.2 clade B.1 -B.1.2 nuc 186165 A +sh2017/B.1.2 clade sh2017/B.1 +sh2017/B.1.2 nuc 186165 A -B.1.3 clade B.1 -B.1.3 nuc 190660 A +sh2017/B.1.3 clade sh2017/B.1 +sh2017/B.1.3 nuc 190660 A -C.1 clade B.1.3 -C.1 nuc 105923 A -C.1 nuc 64426 T -C.1 nuc 55133 A +sh2017/C.1 clade sh2017/B.1.3 +sh2017/C.1 nuc 105923 A +sh2017/C.1 nuc 64426 T +sh2017/C.1 nuc 55133 A -C.1.1 clade C.1 -C.1.1 nuc 21062 T -C.1.1 nuc 149963 T +sh2017/C.1.1 clade sh2017/C.1 +sh2017/C.1.1 nuc 21062 T +sh2017/C.1.1 nuc 149963 T -E.1 clade C.1.1 -E.1 nuc 13563 A -E.1 nuc 121394 T -E.1 nuc 162280 A +sh2017/E.1 clade sh2017/C.1.1 +sh2017/E.1 nuc 13563 A +sh2017/E.1 nuc 121394 T +sh2017/E.1 nuc 162280 A -E.1.1 clade E.1 -E.1.1 nuc 41405 T -E.1.1 nuc 157928 T +sh2017/E.1.1 clade sh2017/E.1 +sh2017/E.1.1 nuc 41405 T +sh2017/E.1.1 nuc 157928 T -E.2 clade C.1.1 -E.2 nuc 13563 A -E.2 nuc 151847 A -E.2 nuc 37738 T +sh2017/E.2 clade sh2017/C.1.1 +sh2017/E.2 nuc 13563 A +sh2017/E.2 nuc 151847 A +sh2017/E.2 nuc 37738 T -E.2.1 clade E.2 -E.2.1 nuc 55466 A -E.2.1 nuc 135121 T +sh2017/E.2.1 clade sh2017/E.2 +sh2017/E.2.1 nuc 55466 A +sh2017/E.2.1 nuc 135121 T -E.3 clade C.1.1 -E.3 nuc 142797 T +sh2017/E.3 clade sh2017/C.1.1 +sh2017/E.3 nuc 142797 T -E.3.1 clade E.3 -E.3.1 nuc 113957 T -E.3.1 nuc 74018 T +sh2017/E.3.1 clade sh2017/E.3 +sh2017/E.3.1 nuc 113957 T +sh2017/E.3.1 nuc 74018 T -E.4 clade C.1.1 -E.4 nuc 41806 A -E.4 nuc 136791 G +sh2017/E.4 clade sh2017/C.1.1 +sh2017/E.4 nuc 41806 A +sh2017/E.4 nuc 136791 G -C.1.2 clade C.1 -C.1.2 nuc 28142 A -C.1.2 nuc 126761 A +sh2017/C.1.2 clade sh2017/C.1 +sh2017/C.1.2 nuc 28142 A +sh2017/C.1.2 nuc 126761 A -C.1.3 clade C.1 -C.1.3 nuc 33332 T -C.1.3 nuc 37974 A - -B.1.4 clade B.1 -B.1.4 nuc 34308 A +sh2017/C.1.3 clade sh2017/C.1 +sh2017/C.1.3 nuc 33332 T +sh2017/C.1.3 nuc 37974 A + +sh2017/B.1.4 clade sh2017/B.1 +sh2017/B.1.4 nuc 34308 A -B.1.5 clade B.1 -B.1.5 nuc 70780 T +sh2017/B.1.5 clade sh2017/B.1 +sh2017/B.1.5 nuc 70780 T -B.1.6 clade B.1 -B.1.6 nuc 111029 A +sh2017/B.1.6 clade sh2017/B.1 +sh2017/B.1.6 nuc 111029 A -D.1 clade B.1.6 -D.1 nuc 10945 A -D.1 nuc 39515 A -D.1 nuc 44627 T -D.1 nuc 56276 A +sh2017/D.1 clade sh2017/B.1.6 +sh2017/D.1 nuc 10945 A +sh2017/D.1 nuc 39515 A +sh2017/D.1 nuc 44627 T +sh2017/D.1 nuc 56276 A -B.1.7 clade B.1 -B.1.7 nuc 25644 T +sh2017/B.1.7 clade sh2017/B.1 +sh2017/B.1.7 nuc 25644 T -B.1.8 clade B.1 -B.1.8 nuc 5595 A -B.1.8 nuc 191615 T +sh2017/B.1.8 clade sh2017/B.1 +sh2017/B.1.8 nuc 5595 A +sh2017/B.1.8 nuc 191615 T -B.1.9 clade B.1 -B.1.9 nuc 181367 A - -B.1.10 clade B.1 -B.1.10 nuc 89906 T -B.1.10 nuc 94798 A - -B.1.11 clade B.1 -B.1.11 nuc 18133 T -B.1.11 nuc 159277 A - -B.1.12 clade B.1 -B.1.12 nuc 182950 T +sh2017/B.1.9 clade sh2017/B.1 +sh2017/B.1.9 nuc 181367 A + +sh2017/B.1.10 clade sh2017/B.1 +sh2017/B.1.10 nuc 89906 T +sh2017/B.1.10 nuc 94798 A + +sh2017/B.1.11 clade sh2017/B.1 +sh2017/B.1.11 nuc 18133 T +sh2017/B.1.11 nuc 159277 A + +sh2017/B.1.12 clade sh2017/B.1 +sh2017/B.1.12 nuc 182950 T -B.1.13 clade B.1 -B.1.13 nuc 175093 A +sh2017/B.1.13 clade sh2017/B.1 +sh2017/B.1.13 nuc 175093 A -B.1.14 clade B.1 -B.1.14 nuc 36617 A -B.1.14 nuc 159779 T - -B.1.15 clade B.1 -B.1.15 nuc 149818 A -B.1.15 nuc 151362 A - -B.1.16 clade B.1 -B.1.16 nuc 9389 T -B.1.16 nuc 161797 A -B.1.16 nuc 185557 C - -B.1.17 clade B.1 -B.1.17 nuc 12169 A -B.1.17 nuc 44960 A - -B.1.18 clade B.1 -B.1.18 nuc 141757 T -B.1.18 nuc 43706 T -B.1.18 nuc 124690 C - -B.1.19 clade B.1 -B.1.19 nuc 9963 A -B.1.19 nuc 148268 T - -B.1.20 clade B.1 -B.1.20 nuc 53326 A -B.1.20 nuc 164385 T -B.1.20 nuc 187620 T - -F.1 clade B.1.20 -F.1 nuc 11668 A -F.1 nuc 35132 A -F.1 nuc 70414 T -F.1 nuc 70666 T -F.1 nuc 96938 T - -F.1.1 clade F.1 -F.1.1 nuc 133402 T -F.1.1 nuc 143277 T - -F.2 clade B.1.20 -F.2 nuc 161629 A -F.2 nuc 22167 T - -F.2.1 clade F.2 -F.2.1 nuc 44032 T -F.2.1 nuc 80820 A -F.2.1 nuc 165892 A - -F.3 clade B.1.20 -F.3 nuc 174050 T -F.3 nuc 180618 T - -F.4 clade B.1.20 -F.4 nuc 34277 T -F.4 nuc 92382 T -F.4 nuc 122551 T -F.4 nuc 126919 A -F.4 nuc 176643 A - -F.4.1 clade F.4 -F.4.1 nuc 21394 A -F.4.1 nuc 111492 T - -F.5 clade B.1.20 -F.5 nuc 150831 T -F.5 nuc 126169 A - -F.6 clade B.1.20 -F.6 nuc 146690 A -F.6 nuc 159608 T -F.6 nuc 168964 A - -B.1.21 clade B.1 -B.1.21 nuc 22415 A -B.1.21 nuc 132698 T - -B.1.22 clade B.1 -B.1.22 nuc 34784 T -B.1.22 nuc 101418 T - -J.1 clade B.1.22 -J.1 nuc 45528 T -J.1 nuc 121663 A - -B.1.23 clade B.1 -B.1.23 nuc 27935 A -B.1.23 nuc 64171 G -B.1.23 nuc 73235 T - -A.2 clade A -A.2 nuc 34472 T - -A.2.1 clade A.2 -A.2.1 nuc 25072 T -A.2.1 nuc 140492 C -A.2.1 nuc 179537 T - -H.1 clade A.2.1 -H.1 nuc 52289 A -H.1 nuc 67261 A -H.1 nuc 181947 A - -H.2 clade A.2.1 -H.2 nuc 43103 A -H.2 nuc 184924 T - -A.2.2 clade A.2 -A.2.2 nuc 21991 A -A.2.2 nuc 103019 T -A.2.2 nuc 158424 A - -G.1 clade A.2.2 -G.1 nuc 85413 T -G.1 nuc 164382 C - -A.2.3 clade A.2 -A.2.3 nuc 57284 T -A.2.3 nuc 74226 T - -A.2.4 clade A.2 -A.2.4 nuc 15105 T -A.2.4 nuc 179628 G - -A.2.5 clade A.2 -A.2.5 nuc 12426 T -A.2.5 nuc 134107 A - -A.3 clade A -A.3 nuc 96841 A -A.3 nuc 100971 T \ No newline at end of file +sh2017/B.1.14 clade sh2017/B.1 +sh2017/B.1.14 nuc 36617 A +sh2017/B.1.14 nuc 159779 T + +sh2017/B.1.15 clade sh2017/B.1 +sh2017/B.1.15 nuc 149818 A +sh2017/B.1.15 nuc 151362 A + +sh2017/B.1.16 clade sh2017/B.1 +sh2017/B.1.16 nuc 9389 T +sh2017/B.1.16 nuc 161797 A +sh2017/B.1.16 nuc 185557 C + +sh2017/B.1.17 clade sh2017/B.1 +sh2017/B.1.17 nuc 12169 A +sh2017/B.1.17 nuc 44960 A + +sh2017/B.1.18 clade sh2017/B.1 +sh2017/B.1.18 nuc 141757 T +sh2017/B.1.18 nuc 43706 T +sh2017/B.1.18 nuc 124690 C + +sh2017/B.1.19 clade sh2017/B.1 +sh2017/B.1.19 nuc 9963 A +sh2017/B.1.19 nuc 148268 T + +sh2017/B.1.20 clade sh2017/B.1 +sh2017/B.1.20 nuc 53326 A +sh2017/B.1.20 nuc 164385 T +sh2017/B.1.20 nuc 187620 T + +sh2017/F.1 clade sh2017/B.1.20 +sh2017/F.1 nuc 11668 A +sh2017/F.1 nuc 35132 A +sh2017/F.1 nuc 70414 T +sh2017/F.1 nuc 70666 T +sh2017/F.1 nuc 96938 T + +sh2017/F.1.1 clade sh2017/F.1 +sh2017/F.1.1 nuc 133402 T +sh2017/F.1.1 nuc 143277 T + +sh2017/F.2 clade sh2017/B.1.20 +sh2017/F.2 nuc 161629 A +sh2017/F.2 nuc 22167 T + +sh2017/F.2.1 clade sh2017/F.2 +sh2017/F.2.1 nuc 44032 T +sh2017/F.2.1 nuc 80820 A +sh2017/F.2.1 nuc 165892 A + +sh2017/F.3 clade sh2017/B.1.20 +sh2017/F.3 nuc 174050 T +sh2017/F.3 nuc 180618 T + +sh2017/F.4 clade sh2017/B.1.20 +sh2017/F.4 nuc 34277 T +sh2017/F.4 nuc 92382 T +sh2017/F.4 nuc 122551 T +sh2017/F.4 nuc 126919 A +sh2017/F.4 nuc 176643 A + +sh2017/F.4.1 clade sh2017/F.4 +sh2017/F.4.1 nuc 21394 A +sh2017/F.4.1 nuc 111492 T + +sh2017/F.5 clade sh2017/B.1.20 +sh2017/F.5 nuc 150831 T +sh2017/F.5 nuc 126169 A + +sh2017/F.6 clade sh2017/B.1.20 +sh2017/F.6 nuc 146690 A +sh2017/F.6 nuc 159608 T +sh2017/F.6 nuc 168964 A + +sh2017/B.1.21 clade sh2017/B.1 +sh2017/B.1.21 nuc 22415 A +sh2017/B.1.21 nuc 132698 T + +sh2017/B.1.22 clade sh2017/B.1 +sh2017/B.1.22 nuc 34784 T +sh2017/B.1.22 nuc 101418 T + +sh2017/J.1 clade sh2017/B.1.22 +sh2017/J.1 nuc 45528 T +sh2017/J.1 nuc 121663 A + +sh2017/B.1.23 clade sh2017/B.1 +sh2017/B.1.23 nuc 27935 A +sh2017/B.1.23 nuc 64171 G +sh2017/B.1.23 nuc 73235 T + +sh2017/A.2 clade sh2017/A +sh2017/A.2 nuc 34472 T + +sh2017/A.2.1 clade sh2017/A.2 +sh2017/A.2.1 nuc 25072 T +sh2017/A.2.1 nuc 140492 C +sh2017/A.2.1 nuc 179537 T + +sh2017/H.1 clade sh2017/A.2.1 +sh2017/H.1 nuc 52289 A +sh2017/H.1 nuc 67261 A +sh2017/H.1 nuc 181947 A + +sh2017/H.2 clade sh2017/A.2.1 +sh2017/H.2 nuc 43103 A +sh2017/H.2 nuc 184924 T + +sh2017/A.2.2 clade sh2017/A.2 +sh2017/A.2.2 nuc 21991 A +sh2017/A.2.2 nuc 103019 T +sh2017/A.2.2 nuc 158424 A + +sh2017/G.1 clade sh2017/A.2.2 +sh2017/G.1 nuc 85413 T +sh2017/G.1 nuc 164382 C + +sh2017/A.2.3 clade sh2017/A.2 +sh2017/A.2.3 nuc 57284 T +sh2017/A.2.3 nuc 74226 T + +sh2017/A.2.4 clade sh2017/A.2 +sh2017/A.2.4 nuc 15105 T +sh2017/A.2.4 nuc 179628 G + +sh2017/A.2.5 clade sh2017/A.2 +sh2017/A.2.5 nuc 12426 T +sh2017/A.2.5 nuc 134107 A + +sh2017/A.3 clade sh2017/A +sh2017/A.3 nuc 96841 A +sh2017/A.3 nuc 100971 T diff --git a/nextclade/resources/clade-iib/include_recombinants.txt b/nextclade/resources/clade-iib/include_recombinants.txt new file mode 100644 index 00000000..3e8a398b --- /dev/null +++ b/nextclade/resources/clade-iib/include_recombinants.txt @@ -0,0 +1 @@ +PP_004DYJ3 diff --git a/nextclade/resources/color_ordering.tsv b/nextclade/resources/color_ordering.tsv index e3979c87..0652c41d 100644 --- a/nextclade/resources/color_ordering.tsv +++ b/nextclade/resources/color_ordering.tsv @@ -217,12 +217,14 @@ region North America ################ +clade_membership unassigned clade_membership I clade_membership Ia clade_membership Ib clade_membership II clade_membership IIa clade_membership IIb +clade_membership Ib/IIb ################ @@ -289,6 +291,77 @@ lineage A.2.3 lineage A.2.4 lineage A.2.5 lineage A.3 +lineage A.4 +lineage A.4.1 +lineage A.5 ################ +outbreakLineage sh2017/A +outbreakLineage sh2017/A.1 +outbreakLineage sh2017/A.1.1 +outbreakLineage sh2017/B.1 +outbreakLineage sh2017/B.1.1 +outbreakLineage sh2017/B.1.2 +outbreakLineage sh2017/B.1.3 +outbreakLineage sh2017/C.1 +outbreakLineage sh2017/C.1.1 +outbreakLineage sh2017/E.1 +outbreakLineage sh2017/E.1.1 +outbreakLineage sh2017/E.2 +outbreakLineage sh2017/E.2.1 +outbreakLineage sh2017/E.3 +outbreakLineage sh2017/E.3.1 +outbreakLineage sh2017/E.4 +outbreakLineage sh2017/C.1.2 +outbreakLineage sh2017/C.1.3 +outbreakLineage sh2017/B.1.4 +outbreakLineage sh2017/B.1.5 +outbreakLineage sh2017/B.1.6 +outbreakLineage sh2017/D.1 +outbreakLineage sh2017/B.1.7 +outbreakLineage sh2017/B.1.8 +outbreakLineage sh2017/B.1.9 +outbreakLineage sh2017/B.1.10 +outbreakLineage sh2017/B.1.11 +outbreakLineage sh2017/B.1.12 +outbreakLineage sh2017/B.1.13 +outbreakLineage sh2017/B.1.14 +outbreakLineage sh2017/B.1.15 +outbreakLineage sh2017/B.1.16 +outbreakLineage sh2017/B.1.17 +outbreakLineage sh2017/B.1.18 +outbreakLineage sh2017/B.1.19 +outbreakLineage sh2017/B.1.20 +outbreakLineage sh2017/F.1 +outbreakLineage sh2017/F.1.1 +outbreakLineage sh2017/F.2 +outbreakLineage sh2017/F.2.1 +outbreakLineage sh2017/F.3 +outbreakLineage sh2017/F.4 +outbreakLineage sh2017/F.4.1 +outbreakLineage sh2017/F.5 +outbreakLineage sh2017/F.6 +outbreakLineage sh2017/B.1.21 +outbreakLineage sh2017/B.1.22 +outbreakLineage sh2017/J.1 +outbreakLineage sh2017/B.1.23 +outbreakLineage sh2017/A.2 +outbreakLineage sh2017/A.2.1 +outbreakLineage sh2017/H.1 +outbreakLineage sh2017/H.2 +outbreakLineage sh2017/A.2.2 +outbreakLineage sh2017/G.1 +outbreakLineage sh2017/A.2.3 +outbreakLineage sh2017/A.2.4 +outbreakLineage sh2017/A.2.5 +outbreakLineage sh2017/A.3 +outbreakLineage sh2023/A +outbreakLineage sh2023/A.1 +outbreakLineage sh2023/A.2 +outbreakLineage sh2023/A.3 +outbreakLineage sh2023/A.4 +outbreakLineage sh2023/A.4.1 +outbreakLineage sh2023/A.5 + +################ diff --git a/nextclade/resources/exclude_accessions.txt b/nextclade/resources/exclude_accessions.txt index e25ecde6..953b1723 100644 --- a/nextclade/resources/exclude_accessions.txt +++ b/nextclade/resources/exclude_accessions.txt @@ -504,3 +504,29 @@ PP_0033ZEY PP_0034079 PP_00340T2 PP_00341CY + +PP_00713Q7 # Ib/IIb recombinant, already covered by UK sequence +PP_00713P9 # Ib/IIb recombinant, already covered by UK sequence + +PP_00703Q9 # Pakistani clade I with many artefacts/reversions +PP_00704T2 # Pakistani clade I with many artefacts/reversions +PP_00704U0 # Pakistani clade I with many artefacts/reversions +PP_00705NB # Pakistani clade I with many artefacts/reversions +PP_00705P9 # Pakistani clade I with many artefacts/reversions +PP_00705Q7 # Pakistani clade I with many artefacts/reversions +PP_00705R5 # Pakistani clade I with many artefacts/reversions +PP_00705S3 # Pakistani clade I with many artefacts/reversions +PP_00705T1 # Pakistani clade I with many artefacts/reversions +PP_00705UZ # Pakistani clade I with many artefacts/reversions +PP_00706MC # Pakistani clade I with many artefacts/reversions +PP_00706NA # Pakistani clade I with many artefacts/reversions +PP_00706P8 # Pakistani clade I with many artefacts/reversions +PP_00706Q6 # Pakistani clade I with many artefacts/reversions +PP_00706R4 # Pakistani clade I with many artefacts/reversions +PP_00706S2 # Pakistani clade I with many artefacts/reversions +PP_00706T0 # Pakistani clade I with many artefacts/reversions +PP_00706UY # Pakistani clade I with many artefacts/reversions +PP_00706VW # Pakistani clade I with many artefacts/reversions +PP_00706WU # Pakistani clade I with many artefacts/reversions +PP_00706XS # Pakistani clade I with many artefacts/reversions +PP_00706YQ # Pakistani clade I with many artefacts/reversions diff --git a/nextclade/resources/known_duplicates.txt b/nextclade/resources/known_duplicates.txt index 26b97019..4e4a8722 100644 --- a/nextclade/resources/known_duplicates.txt +++ b/nextclade/resources/known_duplicates.txt @@ -747,6 +747,7 @@ PP_000TYWN PP_000TYYJ PP_000TZ0E PP_000TZ46 +PP_000TZ54 PP_000TZ62 PP_000TZAU PP_000TZBS @@ -985,11 +986,13 @@ PP_000UBV9 PP_000UBW7 PP_000UBZ1 PP_000UC0Z +PP_000UC1X PP_000UC4R PP_000UC8H PP_000UCBB PP_000UCF3 PP_000UCMQ +PP_000UCPL PP_000UCQJ PP_000UCRG PP_000UCSE @@ -1144,6 +1147,7 @@ PP_000UMEW PP_000UMHP PP_000UMJM PP_000UMKK +PP_000UMMF PP_000UMQ9 PP_000UMS5 PP_000UMT3 @@ -1432,6 +1436,7 @@ PP_000V5SK PP_000V5TH PP_000V5WB PP_000V5X9 +PP_000V62Z PP_000V66R PP_000V6AH PP_000V6BF @@ -1506,6 +1511,7 @@ PP_000VABB PP_000VAE5 PP_000VAG1 PP_000VAJW +PP_000VAKU PP_000VASE PP_000VAUA PP_000VAZ0 @@ -1877,6 +1883,7 @@ PP_000VYZC PP_000VZ0A PP_000VZ18 PP_000VZ34 +PP_000VZ42 PP_000VZ8U PP_000VZFE PP_000VZGC @@ -2187,6 +2194,7 @@ PP_000WP90 PP_000WPAY PP_000WPBW PP_000WPGL +PP_000WPKD PP_000WPLB PP_000WPVT PP_000WPWR @@ -2273,6 +2281,7 @@ PP_000WUEK PP_000WUGF PP_000WUHC PP_000WUJA +PP_000WUK8 PP_000WUM4 PP_000WUQY PP_000WURW @@ -2284,6 +2293,7 @@ PP_000WUZE PP_000WV36 PP_000WV44 PP_000WV52 +PP_000WVCN PP_000WVDL PP_000WVFG PP_000WVGE @@ -2769,6 +2779,7 @@ PP_000XLDT PP_000XLER PP_000XLFP PP_000XLGM +PP_000XLJG PP_000XLN8 PP_000XLS0 PP_000XLUW @@ -4642,6 +4653,7 @@ PP_0013C9X PP_0013CBT PP_0013CEM PP_0013CFK +PP_0013CGH PP_0013CHE PP_0013CKA PP_0013CM6 @@ -4753,6 +4765,7 @@ PP_0013HDJ PP_0013HGC PP_0013HH9 PP_0013HK5 +PP_0013HM1 PP_0013HNZ PP_0013HQV PP_0013HRT @@ -4835,6 +4848,7 @@ PP_00140QA PP_00140R8 PP_00140U2 PP_00140V0 +PP_00140WY PP_00140XW PP_001411N PP_00143S3 @@ -5134,6 +5148,7 @@ PP_0015HJ3 PP_0015HK1 PP_0015HPT PP_0015HQR +PP_0015HRP PP_0015HTK PP_0015HVF PP_0015HXB @@ -5160,8 +5175,10 @@ PP_0015LBF PP_0015LCD PP_0015LE9 PP_0015LF7 +PP_0015LG5 PP_0015LJ0 PP_0015LKY +PP_0015LNS PP_002XKR1 PP_002XKSZ PP_002XKTX @@ -5177,17 +5194,21 @@ PP_002XLFM PP_002XLLA PP_002XLM8 PP_002XLN6 +PP_002XQ8X PP_002XQ9V PP_002XQDM PP_002XQEK PP_002XQGF PP_002XQK8 +PP_002XQRW PP_002XQTS PP_002XQUQ +PP_002XQVN PP_002XQWL PP_002XQYG PP_002XQZE PP_002XR28 +PP_002XR52 PP_002XR60 PP_002Y09H PP_002Y0AF @@ -5223,6 +5244,7 @@ PP_002Y25P PP_002Y28H PP_002Y2C9 PP_002Y2NN +PP_002Y2TC PP_002Y2V8 PP_002Y30Y PP_002Y7FY @@ -5269,6 +5291,7 @@ PP_0031VPM PP_0031VY3 PP_0031W1X PP_0031WUA +PP_003204K PP_00321KM PP_0033A47 PP_0033A55 @@ -5465,7 +5488,125 @@ PP_003RMC3 PP_003RMD1 PP_003RMHS PP_003RMKN +PP_003RMLL PP_003RMNG +PP_003RMPE +PP_003RMV2 +PP_003RMW0 +PP_003RMXY +PP_003RMYW +PP_003RMZU +PP_003RN0S +PP_003RN1Q +PP_003RN2N +PP_003RN3L +PP_003RN4J +PP_003RN5G +PP_003RN6E +PP_003RN7C +PP_003RN8A +PP_003RN98 +PP_003RNA6 +PP_003RNB4 +PP_003RNC2 +PP_003RND0 +PP_003RNEY +PP_003RNFW +PP_003RNGU +PP_003RNR9 +PP_003RP4H +PP_003RP5F +PP_003RP6D +PP_003RP7B +PP_003RP89 +PP_003RP97 +PP_003RPA5 +PP_003RPB3 +PP_003RPDZ +PP_003RPEX +PP_003RPFV +PP_003RPGT +PP_003RPHQ +PP_003RPJN +PP_003RPKL +PP_003RPLJ +PP_003RPMG +PP_003RPNE +PP_003RPPC +PP_003RPQA +PP_003RPR8 +PP_003RPS6 +PP_003RPT4 +PP_003RPU2 +PP_003RPV0 +PP_003RPWY +PP_003RPXW +PP_003RPYU +PP_003RPZS +PP_003RQ0Q +PP_003RQ1N +PP_003RQ2L +PP_003RQ3J +PP_003RQ4G +PP_003RQ5E +PP_003RQ6C +PP_003RQ7A +PP_003RQ88 +PP_003RQA4 +PP_003RQB2 +PP_003RQDY +PP_003RQEW +PP_003RQFU +PP_003RQGS +PP_003RQHP +PP_003RQJM +PP_003RQKK +PP_003RQLH +PP_003RQMF +PP_003RQND +PP_003RQPB +PP_003RQQ9 +PP_003RQR7 +PP_003RQS5 +PP_003RQT3 +PP_003RQU1 +PP_003RQVZ +PP_003RQWX +PP_003RQXV +PP_003RQYT +PP_003RQZR +PP_003RR0P +PP_003RR1M +PP_003RR2K +PP_003RR3H +PP_003RR4F +PP_003RR5D +PP_003RR6B +PP_003RR79 +PP_003RR87 +PP_003RRCZ +PP_003RRDX +PP_003RREV +PP_003RRFT +PP_003RRGR +PP_003RRHN +PP_003RRJL +PP_003RRKJ +PP_003RRLG +PP_003RRME +PP_003RRNC +PP_003RRPA +PP_003RRQ8 +PP_003RRR6 +PP_003RRS4 +PP_003RRT2 +PP_003RRU0 +PP_003RRVY +PP_003RRWW +PP_003RSEU +PP_003RSFS +PP_003RSGQ +PP_003RSHM PP_003RTDV PP_003V39K PP_003V3BF @@ -5480,6 +5621,7 @@ PP_0049BKW PP_0049BPN PP_0049BQL PP_0049BSG +PP_0049BVA PP_0049MGT PP_0049MHQ PP_0049MKL @@ -5506,6 +5648,7 @@ PP_0049YBS PP_0049YCQ PP_004A00A PP_004A1TN +PP_004A1UL PP_004A1VJ PP_004AFFZ PP_004AFGX @@ -5774,6 +5917,7 @@ PP_004AXRW PP_004AXVN PP_004AXWL PP_004AY1A +PP_004AYAS PP_004AYCN PP_004AYDL PP_004AYM3 @@ -6006,6 +6150,7 @@ PP_004BDSA PP_004BDT8 PP_004BDU6 PP_004BDV4 +PP_004BDX0 PP_004BE0U PP_004BE2Q PP_004BE3N @@ -6133,6 +6278,7 @@ PP_004C6V9 PP_004C6W7 PP_004C6Z1 PP_004C70Z +PP_004C71X PP_004C74R PP_004C76M PP_004C77K @@ -6156,6 +6302,7 @@ PP_004D1WA PP_004D1Y6 PP_004D1Z4 PP_004D24U +PP_004D26Q PP_004D28L PP_004D29J PP_004D2AG @@ -6167,3 +6314,641 @@ PP_004D7PJ PP_004D7SC PP_004D7V6 PP_004D7Y0 +PP_004EB5F +PP_004EB6D +PP_004EB7B +PP_004EBA5 +PP_004EBGT +PP_004EBKL +PP_004EBPC +PP_004EC4G +PP_004EC96 +PP_004ECEW +PP_004ECGS +PP_004ECR7 +PP_004ECS5 +PP_004ECT3 +PP_004ECVZ +PP_004ECWX +PP_004ECZR +PP_004ED79 +PP_004EDB1 +PP_004F3D5 +PP_004F3F1 +PP_004F3GZ +PP_004F3HW +PP_004F3LQ +PP_004F3PJ +PP_004F3RE +PP_004F3SC +PP_004FJP3 +PP_004FJQ1 +PP_004FJRZ +PP_004FJSX +PP_004FJWP +PP_004FJZH +PP_004H8BZ +PP_004H8ET +PP_004H8FR +PP_004H8GP +PP_004HDZH +PP_004HE0F +PP_004HE1D +PP_004HE47 +PP_004HE55 +PP_004HE71 +PP_004HE8Z +PP_004HE9X +PP_004HEAV +PP_004HECR +PP_004HEZG +PP_004HG0D +PP_004HG29 +PP_004HGCP +PP_004HGDM +PP_004HGFH +PP_004HGUQ +PP_004HGVN +PP_004HGXJ +PP_004HJWJ +PP_004HK0A +PP_004HK18 +PP_004HK26 +PP_004HK34 +PP_004HK50 +PP_004HK7W +PP_004HK8U +PP_004HKDJ +PP_004HKFE +PP_004J3DY +PP_004J3HP +PP_004J4EV +PP_004JCZG +PP_004JD1C +PP_004JD2A +PP_004JDCQ +PP_004JQQN +PP_004K477 +PP_004K485 +PP_004KJVG +PP_004KWGX +PP_004KYGV +PP_004KYJQ +PP_004KYMJ +PP_004KYNG +PP_004KYQC +PP_004KYRA +PP_004KYS8 +PP_004KYU4 +PP_004M366 +PP_004M374 +PP_004M3FN +PP_004M3GL +PP_004M3LB +PP_004M3M9 +PP_004M3R1 +PP_004M3WR +PP_004M3XP +PP_004M89V +PP_0052PPP +PP_0052PRK +PP_006KH9N +PP_006KHAL +PP_006KHCG +PP_006KHDE +PP_006KHG8 +PP_006KHK1 +PP_006KHPT +PP_006KHQR +PP_006KHRP +PP_006KHSM +PP_006KHUH +PP_006KHVF +PP_006KHWD +PP_006KHXB +PP_006KHY9 +PP_006KHZ7 +PP_006KJ05 +PP_006KJ21 +PP_006KJ3Z +PP_006KJ4X +PP_006KJ5V +PP_006KJ6T +PP_006KJ7R +PP_006KJ8P +PP_006KJ9M +PP_006KJBH +PP_006KJDD +PP_006KJEB +PP_006KJH4 +PP_006KJNU +PP_006KJPS +PP_006KJQQ +PP_006KJRN +PP_006KJSL +PP_006KJTJ +PP_006KJUG +PP_006KJWC +PP_006KJZ6 +PP_006KK04 +PP_006KK20 +PP_006KK3Y +PP_006KK4W +PP_006KK5U +PP_006KK6S +PP_006KK8N +PP_006KK9L +PP_006KKCE +PP_006KKDC +PP_006KKEA +PP_006KKF8 +PP_006KKG6 +PP_006KKH3 +PP_006KKKZ +PP_006KKMV +PP_006KKQP +PP_006KKRM +PP_006KKSK +PP_006KKTH +PP_006KKVD +PP_006KKWB +PP_006KKX9 +PP_006KKY7 +PP_006KKZ5 +PP_006KL03 +PP_006KL11 +PP_006KL2Z +PP_006KL3X +PP_006KL4V +PP_006KL6R +PP_006KL8M +PP_006KLAH +PP_006KLCD +PP_006KLE9 +PP_006KLG5 +PP_006KLH2 +PP_006KLKY +PP_006KLTG +PP_006KLUE +PP_006KLX8 +PP_006KM02 +PP_006KM10 +PP_006KM4U +PP_006KM8L +PP_006KM9J +PP_006KMAG +PP_006KMBE +PP_006KMCC +PP_006KMDA +PP_006KME8 +PP_006KMF6 +PP_006KMG4 +PP_006KMH1 +PP_006KMJZ +PP_006KMKX +PP_006KMLV +PP_006KMQM +PP_006KMSH +PP_006KMTF +PP_006KMW9 +PP_006KMX7 +PP_006KMY5 +PP_006KN01 +PP_006KN3V +PP_006KN5R +PP_006KN6P +PP_006KN9H +PP_006KNAF +PP_006KNBD +PP_006KNCB +PP_006KND9 +PP_006KNE7 +PP_006KNF5 +PP_006KNG3 +PP_006KNH0 +PP_006KNJY +PP_006KNKW +PP_006KNNQ +PP_006KNQL +PP_006KNRJ +PP_006KNSG +PP_006KNTE +PP_006KNUC +PP_006KNY4 +PP_006KP00 +PP_006KP1Y +PP_006KP4S +PP_006KP6N +PP_006KP8J +PP_006KP9G +PP_006KPE6 +PP_006KPG2 +PP_006KPHZ +PP_006KPJX +PP_006KPLT +PP_006KPMR +PP_006KPNP +PP_006KPPM +PP_006KPTD +PP_006KPUB +PP_006KPV9 +PP_006KPW7 +PP_006KPX5 +PP_006KPY3 +PP_006KQ0Z +PP_006KQ1X +PP_006KQ2V +PP_006KQ3T +PP_006KQ4R +PP_006KQ5P +PP_006KQ6M +PP_006KQ7K +PP_006KQAD +PP_006KQBB +PP_006KQC9 +PP_006KQD7 +PP_006KQE5 +PP_006KQHY +PP_006KQKU +PP_006KQLS +PP_006KQMQ +PP_006KQSE +PP_006KQTC +PP_006KQUA +PP_006KQW6 +PP_006KQX4 +PP_006KR0Y +PP_006KR2U +PP_006KR4Q +PP_006KR6L +PP_006KR7J +PP_006KR8G +PP_006KR9E +PP_006KRAC +PP_006KRBA +PP_006KRPK +PP_006KRQH +PP_006KRSD +PP_006KRTB +PP_006KRV7 +PP_006KRY1 +PP_006KRZZ +PP_006KS1V +PP_006KS2T +PP_006KS5M +PP_006KS6K +PP_006KS8F +PP_006KS9D +PP_006KSC7 +PP_006KSF1 +PP_006KSGZ +PP_006KSJU +PP_006KSKS +PP_006KSLQ +PP_006KSMN +PP_006KSNL +PP_006KSQG +PP_006KSRE +PP_006KSTA +PP_006KSU8 +PP_006KSW4 +PP_006KSY0 +PP_006KSZY +PP_006KT0W +PP_006KT4N +PP_006KT5L +PP_006KTAA +PP_006KTB8 +PP_006KTC6 +PP_006KTE2 +PP_006KTF0 +PP_006KTGY +PP_006KTHV +PP_006KTJT +PP_006KTNK +PP_006KTV5 +PP_006KTW3 +PP_006KTX1 +PP_006KTYZ +PP_006KU2R +PP_006KU3P +PP_006KU6H +PP_006KU7F +PP_006KUB7 +PP_006KUC5 +PP_006KUFZ +PP_006KUGX +PP_006KUHU +PP_006KUJS +PP_006KULN +PP_006KUML +PP_006KUNJ +PP_006KUPG +PP_006KUQE +PP_006KURC +PP_006KUU6 +PP_006KUYY +PP_006KUZW +PP_006KV0U +PP_006KV4L +PP_006KV5J +PP_006KV7E +PP_006KV8C +PP_006KV9A +PP_006KVD2 +PP_006KVFY +PP_006KVGW +PP_006KVJR +PP_006KVKP +PP_006KVLM +PP_006KVNH +PP_006KVT7 +PP_006KW2P +PP_006KW5H +PP_006KW6F +PP_006KW7D +PP_006KW8B +PP_006KWA7 +PP_006KWB5 +PP_006KWFX +PP_006KWGV +PP_006KWJQ +PP_006KWLL +PP_006KWPE +PP_006KWW0 +PP_006KWYW +PP_006KX1Q +PP_006KX98 +PP_006KXA6 +PP_006KXEY +PP_006KXJP +PP_006KXU3 +PP_006KXXX +PP_006PWHJ +PP_006PWJG +PP_006PWLC +PP_006PWN8 +PP_006PWP6 +PP_006PWR2 +PP_006QKKP +PP_006R811 +PP_006R83X +PP_006R84V +PP_006TY41 +PP_006TY6X +PP_006TYBM +PP_006UFDY +PP_006UFEW +PP_006UZ06 +PP_006UZ14 +PP_006UZ30 +PP_006V003 +PP_006V102 +PP_006V110 +PP_006V21Z +PP_006V23V +PP_006V25R +PP_006V27M +PP_006WHGL +PP_006WHHH +PP_006WHP5 +PP_006WHQ3 +PP_006WHR1 +PP_006WHTX +PP_006WHXP +PP_006WHYM +PP_006WJ1F +PP_006WJ2D +PP_006WJ49 +PP_006WJ81 +PP_006WJAX +PP_006WJDR +PP_006WJFM +PP_006WJGK +PP_006WJHG +PP_006WJKC +PP_006WJM8 +PP_006WJN6 +PP_006WJSY +PP_006WJUU +PP_006WJXN +PP_006WJZJ +PP_006WK1E +PP_006WK3A +PP_006WK48 +PP_006WKBU +PP_006WKFL +PP_006WKGJ +PP_006WKHF +PP_006WKP3 +PP_006WKQ1 +PP_006WKUT +PP_006WKVR +PP_006WKXM +PP_006WL1D +PP_006WL2B +PP_006WL39 +PP_006WL47 +PP_006WL55 +PP_006WL63 +PP_006WL8Z +PP_006WLAV +PP_006WLBT +PP_006WLDP +PP_006WLEM +PP_006WLGH +PP_006WLHE +PP_006WLL8 +PP_006WLM6 +PP_006WLN4 +PP_006WLP2 +PP_006WLSW +PP_006WLTU +PP_006WLXL +PP_006WM0E +PP_006WM2A +PP_006WM8Y +PP_006WMBS +PP_006WMDN +PP_006WMGG +PP_006WMK9 +PP_006WMM5 +PP_006WMP1 +PP_006WMQZ +PP_006WMRX +PP_006WMUR +PP_006WMZF +PP_006WN1B +PP_006WN29 +PP_006WN37 +PP_006WN45 +PP_006WNAT +PP_006WNCP +PP_006WNDM +PP_006WNEK +PP_006WNGF +PP_006WNJA +PP_006WNL6 +PP_006WNM4 +PP_006WNN2 +PP_006WNP0 +PP_006WNQY +PP_006WNRW +PP_006WNVN +PP_006WNWL +PP_006WNXJ +PP_006WP1A +PP_006WP44 +PP_006WP52 +PP_006WP60 +PP_006WP7Y +PP_006WP9U +PP_006WPEJ +PP_006WPGE +PP_006WPJ9 +PP_006WPRV +PP_006WPYF +PP_006WQ43 +PP_006WQ6Z +PP_006WQ7X +PP_006WQ8V +PP_006WQ9T +PP_006WQAR +PP_006WQBP +PP_006WQCM +PP_006WQDK +PP_006WQEH +PP_006WQFF +PP_006WQGD +PP_006WQHA +PP_006WQJ8 +PP_006WQK6 +PP_006WQL4 +PP_006WQM2 +PP_006WQN0 +PP_006WQPY +PP_006WQQW +PP_006WQSS +PP_006WQTQ +PP_006WQXG +PP_006WR0A +PP_006WR26 +PP_006WR34 +PP_006WR50 +PP_006WRAQ +PP_006WREG +PP_006WRGC +PP_006WRH9 +PP_006WRJ7 +PP_006WRNZ +PP_006WRPX +PP_006WRQV +PP_006WRTP +PP_006WRVK +PP_006WRXF +PP_006WS17 +PP_006WS25 +PP_006WS33 +PP_006WS41 +PP_006WS8T +PP_006WS9R +PP_006WSDH +PP_006WSEF +PP_006WSGB +PP_006WSH8 +PP_006WSK4 +PP_006WSM0 +PP_006WSPW +PP_006WSQU +PP_006WSRS +PP_006WSSQ +PP_006WSTN +PP_006WT08 +PP_006WT24 +PP_006WT9Q +PP_006WTBL +PP_006WTK3 +PP_006WTNX +PP_006WTPV +PP_006WTQT +PP_006WTUK +PP_006WU07 +PP_006WU23 +PP_006WU31 +PP_006WU4Z +PP_006WU7T +PP_006WU8R +PP_006WU9P +PP_006WUBK +PP_006WUCH +PP_006WUDF +PP_006WUG9 +PP_006WUK2 +PP_006WUPU +PP_006WUQS +PP_006WURQ +PP_006WUSN +PP_006WUVG +PP_006WUXC +PP_006WUYA +PP_006WUZ8 +PP_006WV06 +PP_006WV6U +PP_006WV7S +PP_006WVEC +PP_006WVZ7 +PP_006WW05 +PP_006WW13 +PP_006WW6T +PP_006WWAK +PP_006WWCF +PP_006WWLY +PP_006WWMW +PP_006WWNU +PP_006WWPS +PP_006WWRN +PP_006WX04 +PP_006WX5U +PP_006WX8N +PP_006WX9L +PP_006WXAJ +PP_006WXCE +PP_006WXDC +PP_006WXEA +PP_006WXH3 +PP_006WXMV +PP_006WXPR +PP_006WXQP +PP_006WXRM +PP_006WXSK +PP_006WXUF +PP_006WXVD +PP_006WXWB +PP_006WXX9 +PP_006WXZ5 +PP_006WY11 +PP_006WY2Z +PP_006WY3X +PP_006WY4V +PP_006WY5T +PP_006WY6R +PP_006WYCD +PP_006WYDB +PP_006WYH2 +PP_006WYJ0 +PP_006X1V7 +PP_006XGGK +PP_006XGJE +PP_006XGLA +PP_006XGQ2 +PP_00713P9 +PP_00719HF +PP_0071ZQB +PP_0071ZS7 +PP_0071ZT5 +PP_0071ZU3 +PP_0071ZV1 +PP_0071ZWZ +PP_0072483 +PP_0072491 +PP_00724BX diff --git a/nextclade/resources/lineage-b.1/clades.tsv b/nextclade/resources/lineage-b.1/clades.tsv index 7d94583f..99b3b59e 100644 --- a/nextclade/resources/lineage-b.1/clades.tsv +++ b/nextclade/resources/lineage-b.1/clades.tsv @@ -1,197 +1,197 @@ # Nuc coordinates valid for reference NC_063383 (MPXV-M5312_HM12_Rivers) clade gene site alt -A.1.1 nuc 34459 A -A.1.1 nuc 77383 G +sh2017/A.1.1 nuc 34459 A +sh2017/A.1.1 nuc 77383 G # Just for B.1 build -unassigned clade A.1.1 +unassigned clade sh2017/A.1.1 -B.1 clade A.1.1 -B.1 nuc 77383 A +sh2017/B.1 clade sh2017/A.1.1 +sh2017/B.1 nuc 77383 A -B.1.1 clade B.1 -B.1.1 nuc 74360 A +sh2017/B.1.1 clade sh2017/B.1 +sh2017/B.1.1 nuc 74360 A -B.1.2 clade B.1 -B.1.2 nuc 186165 A +sh2017/B.1.2 clade sh2017/B.1 +sh2017/B.1.2 nuc 186165 A -B.1.3 clade B.1 -B.1.3 nuc 190660 A +sh2017/B.1.3 clade sh2017/B.1 +sh2017/B.1.3 nuc 190660 A -C.1 clade B.1.3 -C.1 nuc 105923 A -C.1 nuc 64426 T -C.1 nuc 55133 A +sh2017/C.1 clade sh2017/B.1.3 +sh2017/C.1 nuc 105923 A +sh2017/C.1 nuc 64426 T +sh2017/C.1 nuc 55133 A -C.1.1 clade C.1 -C.1.1 nuc 21062 T -C.1.1 nuc 149963 T +sh2017/C.1.1 clade sh2017/C.1 +sh2017/C.1.1 nuc 21062 T +sh2017/C.1.1 nuc 149963 T -E.1 clade C.1.1 -E.1 nuc 13563 A -E.1 nuc 121394 T -E.1 nuc 162280 A +sh2017/E.1 clade sh2017/C.1.1 +sh2017/E.1 nuc 13563 A +sh2017/E.1 nuc 121394 T +sh2017/E.1 nuc 162280 A -E.1.1 clade E.1 -E.1.1 nuc 41405 T -E.1.1 nuc 157928 T +sh2017/E.1.1 clade sh2017/E.1 +sh2017/E.1.1 nuc 41405 T +sh2017/E.1.1 nuc 157928 T -E.2 clade C.1.1 -E.2 nuc 13563 A -E.2 nuc 151847 A -E.2 nuc 37738 T +sh2017/E.2 clade sh2017/C.1.1 +sh2017/E.2 nuc 13563 A +sh2017/E.2 nuc 151847 A +sh2017/E.2 nuc 37738 T -E.2.1 clade E.2 -E.2.1 nuc 55466 A -E.2.1 nuc 135121 T +sh2017/E.2.1 clade sh2017/E.2 +sh2017/E.2.1 nuc 55466 A +sh2017/E.2.1 nuc 135121 T -E.3 clade C.1.1 -E.3 nuc 142797 T +sh2017/E.3 clade sh2017/C.1.1 +sh2017/E.3 nuc 142797 T -E.3.1 clade E.3 -E.3.1 nuc 113957 T -E.3.1 nuc 74018 T +sh2017/E.3.1 clade sh2017/E.3 +sh2017/E.3.1 nuc 113957 T +sh2017/E.3.1 nuc 74018 T -E.4 clade C.1.1 -E.4 nuc 41806 A -E.4 nuc 136791 G +sh2017/E.4 clade sh2017/C.1.1 +sh2017/E.4 nuc 41806 A +sh2017/E.4 nuc 136791 G -C.1.2 clade C.1 -C.1.2 nuc 28142 A -C.1.2 nuc 126761 A +sh2017/C.1.2 clade sh2017/C.1 +sh2017/C.1.2 nuc 28142 A +sh2017/C.1.2 nuc 126761 A -C.1.3 clade C.1 -C.1.3 nuc 33332 T -C.1.3 nuc 37974 A - -B.1.4 clade B.1 -B.1.4 nuc 34308 A +sh2017/C.1.3 clade sh2017/C.1 +sh2017/C.1.3 nuc 33332 T +sh2017/C.1.3 nuc 37974 A + +sh2017/B.1.4 clade sh2017/B.1 +sh2017/B.1.4 nuc 34308 A -B.1.5 clade B.1 -B.1.5 nuc 70780 T +sh2017/B.1.5 clade sh2017/B.1 +sh2017/B.1.5 nuc 70780 T -B.1.6 clade B.1 -B.1.6 nuc 111029 A +sh2017/B.1.6 clade sh2017/B.1 +sh2017/B.1.6 nuc 111029 A -D.1 clade B.1.6 -D.1 nuc 10945 A -D.1 nuc 39515 A -D.1 nuc 44627 T -D.1 nuc 56276 A +sh2017/D.1 clade sh2017/B.1.6 +sh2017/D.1 nuc 10945 A +sh2017/D.1 nuc 39515 A +sh2017/D.1 nuc 44627 T +sh2017/D.1 nuc 56276 A -B.1.7 clade B.1 -B.1.7 nuc 25644 T +sh2017/B.1.7 clade sh2017/B.1 +sh2017/B.1.7 nuc 25644 T -B.1.8 clade B.1 -B.1.8 nuc 5595 A -B.1.8 nuc 191615 T +sh2017/B.1.8 clade sh2017/B.1 +sh2017/B.1.8 nuc 5595 A +sh2017/B.1.8 nuc 191615 T -B.1.9 clade B.1 -B.1.9 nuc 181367 A - -B.1.10 clade B.1 -B.1.10 nuc 89906 T -B.1.10 nuc 94798 A - -B.1.11 clade B.1 -B.1.11 nuc 18133 T -B.1.11 nuc 159277 A - -B.1.12 clade B.1 -B.1.12 nuc 182950 T - -B.1.13 clade B.1 -B.1.13 nuc 175093 A - -B.1.14 clade B.1 -B.1.14 nuc 36617 A -B.1.14 nuc 159779 T - -B.1.15 clade B.1 -B.1.15 nuc 149818 A -B.1.15 nuc 151362 A - -B.1.16 clade B.1 -B.1.16 nuc 9389 T -B.1.16 nuc 161797 A -B.1.16 nuc 185557 C - -B.1.17 clade B.1 -B.1.17 nuc 12169 A -B.1.17 nuc 44960 A - -B.1.18 clade B.1 -B.1.18 nuc 141757 T -B.1.18 nuc 43706 T -B.1.18 nuc 124690 C - -B.1.19 clade B.1 -B.1.19 nuc 9963 A -B.1.19 nuc 148268 T - -B.1.20 clade B.1 -B.1.20 nuc 53326 A -B.1.20 nuc 164385 T -B.1.20 nuc 187620 T - -F.1 clade B.1.20 -F.1 nuc 11668 A -F.1 nuc 35132 A -F.1 nuc 70414 T -F.1 nuc 70666 T -F.1 nuc 96938 T - -F.1.1 clade F.1 -F.1.1 nuc 133402 T -F.1.1 nuc 143277 T - -F.2 clade B.1.20 -F.2 nuc 161629 A -F.2 nuc 22167 T - -F.2.1 clade F.2 -F.2.1 nuc 44032 T -F.2.1 nuc 80820 A -F.2.1 nuc 165892 A - -F.3 clade B.1.20 -F.3 nuc 174050 T -F.3 nuc 180618 T - -F.4 clade B.1.20 -F.4 nuc 34277 T -F.4 nuc 92382 T -F.4 nuc 122551 T -F.4 nuc 126919 A -F.4 nuc 176643 A - -F.4.1 clade F.4 -F.4.1 nuc 21394 A -F.4.1 nuc 111492 T - -F.5 clade B.1.20 -F.5 nuc 150831 T -F.5 nuc 126169 A - -F.6 clade B.1.20 -F.6 nuc 146690 A -F.6 nuc 159608 T -F.6 nuc 168964 A - -B.1.21 clade B.1 -B.1.21 nuc 22415 A -B.1.21 nuc 132698 T - -B.1.22 clade B.1 -B.1.22 nuc 34784 T -B.1.22 nuc 101418 T - -J.1 clade B.1.22 -J.1 nuc 45528 T -J.1 nuc 121663 A - -B.1.23 clade B.1 -B.1.23 nuc 27935 A -B.1.23 nuc 64171 G -B.1.23 nuc 73235 T +sh2017/B.1.9 clade sh2017/B.1 +sh2017/B.1.9 nuc 181367 A + +sh2017/B.1.10 clade sh2017/B.1 +sh2017/B.1.10 nuc 89906 T +sh2017/B.1.10 nuc 94798 A + +sh2017/B.1.11 clade sh2017/B.1 +sh2017/B.1.11 nuc 18133 T +sh2017/B.1.11 nuc 159277 A + +sh2017/B.1.12 clade sh2017/B.1 +sh2017/B.1.12 nuc 182950 T + +sh2017/B.1.13 clade sh2017/B.1 +sh2017/B.1.13 nuc 175093 A + +sh2017/B.1.14 clade sh2017/B.1 +sh2017/B.1.14 nuc 36617 A +sh2017/B.1.14 nuc 159779 T + +sh2017/B.1.15 clade sh2017/B.1 +sh2017/B.1.15 nuc 149818 A +sh2017/B.1.15 nuc 151362 A + +sh2017/B.1.16 clade sh2017/B.1 +sh2017/B.1.16 nuc 9389 T +sh2017/B.1.16 nuc 161797 A +sh2017/B.1.16 nuc 185557 C + +sh2017/B.1.17 clade sh2017/B.1 +sh2017/B.1.17 nuc 12169 A +sh2017/B.1.17 nuc 44960 A + +sh2017/B.1.18 clade sh2017/B.1 +sh2017/B.1.18 nuc 141757 T +sh2017/B.1.18 nuc 43706 T +sh2017/B.1.18 nuc 124690 C + +sh2017/B.1.19 clade sh2017/B.1 +sh2017/B.1.19 nuc 9963 A +sh2017/B.1.19 nuc 148268 T + +sh2017/B.1.20 clade sh2017/B.1 +sh2017/B.1.20 nuc 53326 A +sh2017/B.1.20 nuc 164385 T +sh2017/B.1.20 nuc 187620 T + +sh2017/F.1 clade sh2017/B.1.20 +sh2017/F.1 nuc 11668 A +sh2017/F.1 nuc 35132 A +sh2017/F.1 nuc 70414 T +sh2017/F.1 nuc 70666 T +sh2017/F.1 nuc 96938 T + +sh2017/F.1.1 clade sh2017/F.1 +sh2017/F.1.1 nuc 133402 T +sh2017/F.1.1 nuc 143277 T + +sh2017/F.2 clade sh2017/B.1.20 +sh2017/F.2 nuc 161629 A +sh2017/F.2 nuc 22167 T + +sh2017/F.2.1 clade sh2017/F.2 +sh2017/F.2.1 nuc 44032 T +sh2017/F.2.1 nuc 80820 A +sh2017/F.2.1 nuc 165892 A + +sh2017/F.3 clade sh2017/B.1.20 +sh2017/F.3 nuc 174050 T +sh2017/F.3 nuc 180618 T + +sh2017/F.4 clade sh2017/B.1.20 +sh2017/F.4 nuc 34277 T +sh2017/F.4 nuc 92382 T +sh2017/F.4 nuc 122551 T +sh2017/F.4 nuc 126919 A +sh2017/F.4 nuc 176643 A + +sh2017/F.4.1 clade sh2017/F.4 +sh2017/F.4.1 nuc 21394 A +sh2017/F.4.1 nuc 111492 T + +sh2017/F.5 clade sh2017/B.1.20 +sh2017/F.5 nuc 150831 T +sh2017/F.5 nuc 126169 A + +sh2017/F.6 clade sh2017/B.1.20 +sh2017/F.6 nuc 146690 A +sh2017/F.6 nuc 159608 T +sh2017/F.6 nuc 168964 A + +sh2017/B.1.21 clade sh2017/B.1 +sh2017/B.1.21 nuc 22415 A +sh2017/B.1.21 nuc 132698 T + +sh2017/B.1.22 clade sh2017/B.1 +sh2017/B.1.22 nuc 34784 T +sh2017/B.1.22 nuc 101418 T + +sh2017/J.1 clade sh2017/B.1.22 +sh2017/J.1 nuc 45528 T +sh2017/J.1 nuc 121663 A + +sh2017/B.1.23 clade sh2017/B.1 +sh2017/B.1.23 nuc 27935 A +sh2017/B.1.23 nuc 64171 G +sh2017/B.1.23 nuc 73235 T diff --git a/nextclade/resources/lineage-b.1/include_recombinants.txt b/nextclade/resources/lineage-b.1/include_recombinants.txt new file mode 100644 index 00000000..3e8a398b --- /dev/null +++ b/nextclade/resources/lineage-b.1/include_recombinants.txt @@ -0,0 +1 @@ +PP_004DYJ3 diff --git a/nextclade/scripts/assign-colors.py b/nextclade/scripts/assign-colors.py index 72f9dc68..c60d6637 100644 --- a/nextclade/scripts/assign-colors.py +++ b/nextclade/scripts/assign-colors.py @@ -44,6 +44,7 @@ "clade_membership", "outbreak", "lineage", + "outbreakLineage", ]: subset_present = [x for x in assignment[name] if x in metadata[name].unique()] assignment[name] = subset_present diff --git a/nextclade/scripts/clades_renaming.py b/nextclade/scripts/clades_renaming.py index f351c66f..5ff527f2 100644 --- a/nextclade/scripts/clades_renaming.py +++ b/nextclade/scripts/clades_renaming.py @@ -1,6 +1,21 @@ import argparse import json +from Bio import Phylo + +OUTBREAK_CLADES = { + "sh2017": "IIb", + "sh2023": "Ib", +} + + +def split_outbreak_lineage(clade_name: str) -> tuple[str, str]: + outbreak_name, lineage_name = clade_name.split("/", maxsplit=1) + if outbreak_name not in OUTBREAK_CLADES or not lineage_name: + raise ValueError(f"Invalid outbreak/lineage clade name: {clade_name}") + return outbreak_name, lineage_name + + if __name__ == "__main__": parser = argparse.ArgumentParser( description="Split clade membership into clade, outbreak and lineage", @@ -15,7 +30,12 @@ help="output Auspice JSON", ) parser.add_argument("--outgroup-clade-name", type=str, default="outgroup", help="name for outgroup clade") + parser.add_argument("--tree-file", type=str, help="input tree file (not used)") args = parser.parse_args() + # get all node names + with open (args.tree_file) as fh: + tree = Phylo.read(fh, "newick") + all_node_names = {clade.name for clade in tree.find_clades() if clade.name is not None} with open(args.input_node_data) as fh: data = json.load(fh) new_node_data = {} @@ -24,38 +44,35 @@ outbreak_name = "" lineage_name = "" - # if it starts with clade -> it's a clade - # if it starts with outbreak -> it's outbreak, need to look up clade - # if it starts with lineage -> it's clade IIb, outbreak hMPXV-1 + # Namespaced lineages identify both their outbreak and parent clade. if old_clade_name.startswith("clade"): clade_name = old_clade_name.split()[1] match clade_name: case "Ib": outbreak_name = "sh2023" + lineage_name = "A" case "Ib/IIb": outbreak_name = "recombinant" elif old_clade_name == "sh2024": clade_name = "Ia" outbreak_name = old_clade_name - elif old_clade_name == "sh2017": - clade_name = "IIb" - outbreak_name = old_clade_name - lineage_name = "A" - elif old_clade_name.startswith(args.outgroup_clade_name): + elif "/" in old_clade_name: + outbreak_name, lineage_name = split_outbreak_lineage(old_clade_name) + clade_name = OUTBREAK_CLADES[outbreak_name] + elif old_clade_name.startswith(args.outgroup_clade_name) or old_clade_name == "unassigned" or old_clade_name == "": clade_name = args.outgroup_clade_name - elif old_clade_name.startswith("outgroup"): - clade_name = "outgroup" - elif old_clade_name.startswith("unassigned"): - clade_name = "unassigned" else: - clade_name = "IIb" - outbreak_name = "sh2017" - lineage_name = old_clade_name + raise ValueError(f"Unrecognized clade name: {old_clade_name}") node_data = { "clade_membership": clade_name, "outbreak": outbreak_name, "lineage": lineage_name, + "outbreakLineage": ( + f"{outbreak_name}/{lineage_name}" + if outbreak_name and lineage_name + else "" + ), } # Add placement prior for Ib/IIb recombinants @@ -65,25 +82,30 @@ new_node_data[name] = node_data + for name in all_node_names - new_node_data.keys(): + new_node_data[name] = { + "clade_membership": args.outgroup_clade_name, + "outbreak": "", + "lineage": "", + "outbreakLineage": "", + } + new_branch_labels = {} for name, node in data["branches"].items(): - # Rename sh2017 -> sh2017/A - # Rename clade Ib -> clade IIb/outbreak sh2023 if "labels" in node and "clade" in node["labels"]: - - def make_label(label: str) -> dict: - return {"labels": {"clade": label}} - - match node["labels"]["clade"]: - case "sh2017": - new_branch_labels[name] = make_label("sh2017/A") + label = node["labels"]["clade"] + match label: case "clade Ib": - new_branch_labels[name] = make_label("clade Ib/sh2023") - case "A": - new_branch_labels[name] = make_label("sh2017/A") + label = "clade Ib/sh2023/A" case _: - new_branch_labels[name] = node + if label.startswith(tuple(f"{outbreak}/" for outbreak in OUTBREAK_CLADES)): + _, lineage_name = split_outbreak_lineage(label) + label = label if lineage_name == "A" else lineage_name + + new_branch_labels[name] = node | { + "labels": node["labels"] | {"clade": label} + } data["branches"] = new_branch_labels data["nodes"] = new_node_data with open(args.output_node_data, "w") as fh: diff --git a/nextclade/scripts/deduplicate.py b/nextclade/scripts/deduplicate.py index 1b67199b..d644abb5 100644 --- a/nextclade/scripts/deduplicate.py +++ b/nextclade/scripts/deduplicate.py @@ -13,6 +13,17 @@ from Bio import SeqIO +def read_accessions(paths: list[str]) -> set[str]: + accessions = set() + for path in paths: + with open(path) as file: + for line in file: + accession = line.split("#", maxsplit=1)[0].strip() + if accession: + accessions.add(accession) + return accessions + + def informative_sites(sequence: str) -> int: """ Count number of ACGT characters in a sequence @@ -71,7 +82,7 @@ def informative_indexes_sorted_by_entropy(composition: list) -> list: site_information = sorted(site_information.items(), key=lambda x: x[1], reverse=True) return [x[0] for x in site_information] -def process_batch(batch_indices, all_sequences, info_sites): +def process_batch(batch_indices, all_sequences, info_sites, includes): """ Process a batch of ying sequences against all potential duplicates Returns a list of IDs to remove @@ -85,20 +96,28 @@ def process_batch(batch_indices, all_sequences, info_sites): for yang_idx in range(ying_idx + 1, len(all_sequences)): yang_seq = all_sequences[yang_idx] - if identical(ying_seq["seq"], yang_seq["seq"], info_sites): + if yang_seq["id"] not in includes and identical(ying_seq["seq"], yang_seq["seq"], info_sites): print(f"Removing {yang_seq['id']} as identical to {ying_seq['id']}") duplicates.append(yang_seq["id"]) return duplicates -def deduplicate(input: str, output: str, num_processes: int = 10): +def deduplicate( + input: str, + output: str, + include: list[str] = [], + num_processes: int = 10, +): """ Deduplicate sequences in a file Args: sequences: path to sequences file output: path to output file + include: paths containing sequence IDs that must not be removed num_processes: number of cores to use """ + includes = read_accessions(include) + dup_list = set() with open(input, "r") as f: sequences = [ { @@ -108,35 +127,39 @@ def deduplicate(input: str, output: str, num_processes: int = 10): } for record in itertools.islice(SeqIO.parse(f, "fasta"), 0, None) ] - sequences = sorted(sequences, key=lambda x: x["number_informative_sites"], reverse=True) - composition = composition_per_site(sequences) - info_sites = informative_indexes_sorted_by_entropy(composition) - - # Divide work among processes - each process takes a batch of ying sequences - num_sequences = len(sequences) - batch_size = max(1, num_sequences // (num_processes * 5)) # Smaller batches for better load balancing - - # Create batches of indices - batches = [] - for i in range(0, num_sequences-1, batch_size): # -1 because the last sequence has nothing to compare against - end = min(i + batch_size, num_sequences-1) - batches.append(list(range(i, end))) - - # Process batches in parallel - pool = multiprocessing.Pool(processes=num_processes) - process_func = partial(process_batch, all_sequences=sequences, info_sites=info_sites) - results = pool.map(process_func, batches) - - # Clean up - pool.close() - pool.join() - - # Combine results - dup_list = {dup for batch_result in results for dup in batch_result} + sequences = sorted( + sequences, + key=lambda x: (x["id"] in includes, x["number_informative_sites"]), + reverse=True, + ) + if sequences: + composition = composition_per_site(sequences) + info_sites = informative_indexes_sorted_by_entropy(composition) + + # Divide work among processes - each process takes a batch of ying sequences + num_sequences = len(sequences) + batch_size = max(1, num_sequences // (num_processes * 5)) # Smaller batches for better load balancing + + # Create batches of indices + batches = [] + for i in range(0, num_sequences-1, batch_size): # -1 because the last sequence has nothing to compare against + end = min(i + batch_size, num_sequences-1) + batches.append(list(range(i, end))) + + # Process batches in parallel + pool = multiprocessing.Pool(processes=num_processes) + process_func = partial(process_batch, all_sequences=sequences, info_sites=info_sites, includes=includes) + results = pool.map(process_func, batches) + + # Clean up + pool.close() + pool.join() + + # Combine results + dup_list.update(dup for batch_result in results for dup in batch_result) - # Write output with open(output, "w") as f: - for dup in dup_list: + for dup in sorted(dup_list): f.write(f"{dup}\n") if __name__ == "__main__": diff --git a/phylogenetic/defaults/exclude.txt b/phylogenetic/defaults/exclude.txt index a107579a..f9efbe80 100644 --- a/phylogenetic/defaults/exclude.txt +++ b/phylogenetic/defaults/exclude.txt @@ -135,3 +135,26 @@ PP_0011BTZ # B.1 with reversions PP_003416A # G.1 with many reversions interspersed PP_004DYJ3 # clade Ib/IIb recombinant that messes up phylogeny + +PP_00703Q9 # Pakistani clade I with many artefacts/reversions +PP_00704T2 # Pakistani clade I with many artefacts/reversions +PP_00704U0 # Pakistani clade I with many artefacts/reversions +PP_00705NB # Pakistani clade I with many artefacts/reversions +PP_00705P9 # Pakistani clade I with many artefacts/reversions +PP_00705Q7 # Pakistani clade I with many artefacts/reversions +PP_00705R5 # Pakistani clade I with many artefacts/reversions +PP_00705S3 # Pakistani clade I with many artefacts/reversions +PP_00705T1 # Pakistani clade I with many artefacts/reversions +PP_00705UZ # Pakistani clade I with many artefacts/reversions +PP_00706MC # Pakistani clade I with many artefacts/reversions +PP_00706NA # Pakistani clade I with many artefacts/reversions +PP_00706P8 # Pakistani clade I with many artefacts/reversions +PP_00706Q6 # Pakistani clade I with many artefacts/reversions +PP_00706R4 # Pakistani clade I with many artefacts/reversions +PP_00706S2 # Pakistani clade I with many artefacts/reversions +PP_00706T0 # Pakistani clade I with many artefacts/reversions +PP_00706UY # Pakistani clade I with many artefacts/reversions +PP_00706VW # Pakistani clade I with many artefacts/reversions +PP_00706WU # Pakistani clade I with many artefacts/reversions +PP_00706XS # Pakistani clade I with many artefacts/reversions +PP_00706YQ # Pakistani clade I with many artefacts/reversions diff --git a/phylogenetic/rules/construct_phylogeny.smk b/phylogenetic/rules/construct_phylogeny.smk index 789042a5..f7605af5 100644 --- a/phylogenetic/rules/construct_phylogeny.smk +++ b/phylogenetic/rules/construct_phylogeny.smk @@ -16,20 +16,17 @@ OUTPUTS: rule tree: - """ - Building tree - """ input: alignment=build_dir + "/{build_name}/masked.fasta", tree_mask=config["tree_mask"], output: tree=build_dir + "/{build_name}/tree_raw.nwk", - # It's faster to use 4 threads rather than doing a full search - hence hardcoding 4 - threads: min(workflow.cores, 4) log: "logs/{build_name}/tree.txt", benchmark: "benchmarks/{build_name}/tree.txt" + # It's faster to use 4 threads rather than doing a full search - hence hardcoding 4 + threads: min(workflow.cores, 4) shell: r""" exec &> >(tee {log:q}) @@ -37,7 +34,7 @@ rule tree: augur tree \ --alignment {input.alignment:q} \ --exclude-sites {input.tree_mask:q} \ - --tree-builder-args "-T {threads}" \ + --tree-builder-args "-T {threads} --seqtype DNA" \ --output {output.tree:q} \ --nthreads {threads} """ @@ -45,23 +42,23 @@ rule tree: rule fix_tree: """ - Fixing tree - """ +Fixing tree +""" input: tree=build_dir + "/{build_name}/tree_raw.nwk", alignment=build_dir + "/{build_name}/masked.fasta", output: tree=build_dir + "/{build_name}/tree_fixed.nwk", + log: + "logs/{build_name}/fix_tree.txt", + benchmark: + "benchmarks/{build_name}/fix_tree.txt" params: root=lambda w: ( ("--root " + config["treefix_root"]) if config.get("treefix_root", False) else "" ), - log: - "logs/{build_name}/fix_tree.txt", - benchmark: - "benchmarks/{build_name}/fix_tree.txt" shell: r""" exec &> >(tee {log:q}) @@ -75,13 +72,6 @@ rule fix_tree: rule refine: - """ - Refining tree - - estimate timetree - - use {params.coalescent} coalescent timescale - - estimate {params.date_inference} node dates - - filter tips more than {params.clock_filter_iqd} IQDs from clock expectation - """ input: tree=( build_dir + "/{build_name}/tree_fixed.nwk" @@ -93,6 +83,10 @@ rule refine: output: tree=build_dir + "/{build_name}/tree.nwk", node_data=build_dir + "/{build_name}/branch_lengths.json", + log: + "logs/{build_name}/refine.txt", + benchmark: + "benchmarks/{build_name}/refine.txt" params: coalescent="opt", date_inference="marginal", @@ -110,10 +104,6 @@ rule refine: ), strain_id=config["strain_id_field"], divergence_units=config["divergence_units"], - log: - "logs/{build_name}/refine.txt", - benchmark: - "benchmarks/{build_name}/refine.txt" shell: r""" exec &> >(tee {log:q})