diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41c0ef3..9f49a14 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,6 +40,35 @@ jobs: run: | curl https://tolit.cog.sanger.ac.uk/test-data/resources/ascc/asccTinyTest.tar.gz | tar xzf - + - name: Download the NCBI taxdump database + run: | + mkdir ncbi_taxdump + curl -L https://ftp.ncbi.nih.gov/pub/taxonomy/new_taxdump/new_taxdump.tar.gz | tar -C ncbi_taxdump -xzf - + + - name: Download the FCS-gx database + run: | + mkdir FCS_gx + wget -c https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/test-only/test-only.taxa.tsv -O FCS_gx/all.taxa.tsv + wget -c https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/test-only/test-only.gxi -O FCS_gx/all.gxi + wget -c https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/test-only/test-only.gxs -O FCS_gx/all.gxs + wget -c https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/test-only/test-only.meta.jsonl -O FCS_gx/all.meta.jsonl + wget -c https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/test-only/test-only.blast_div.tsv.gz -O FCS_gx/all.blast_div.tsv.gz + + - name: Download the BUSCO lineage database + run: | + mkdir busco_database + curl -L https://tolit.cog.sanger.ac.uk/test-data/resources/busco/blobtoolkit.GCA_922984935.2.2023-08-03.lineages.tar.gz | tar -C busco_database -xzf - + + - name: Download the kraken2 database + run: | + mkdir kraken2 + curl -L https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/db/kraken2.tar.gz | tar -C kraken2 -xzf - + + - name: Download the subset of NT database + run: | + mkdir NT_database + curl -L https://ftp.ncbi.nlm.nih.gov/blast/db/18S_fungal_sequences.tar.gz | tar -C NT_database -xzf - + - name: Run pipeline with test data # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters diff --git a/assets/github_testing/test.yaml b/assets/github_testing/test.yaml index c92eedc..6d61de3 100755 --- a/assets/github_testing/test.yaml +++ b/assets/github_testing/test.yaml @@ -8,11 +8,12 @@ mito_fasta_path: /home/runner/work/ascc/ascc/asccTinyTest/organellar/Pyoeliiyoel plastid_fasta_path: /home/runner/work/ascc/ascc/asccTinyTest/organellar/Pyoeliiyoelii17XNL_apicoplast_ncbi.fa kmer_len: 7 ## Below this point will need updating as more subworkflows are built -nt_database: /data/blastdb/Supported/NT/current/ -nt_kraken_db_path: /lustre/scratch123/tol/teams/tola/users/ea10/ascc_databases/nt/nt -ncbi_taxonomy_path: /lustre/scratch123/tol/teams/tola/users/ea10/databases/taxdump/ -ncbi_rankedlineage_path: /lustre/scratch123/tol/teams/tola/users/ea10/databases/taxdump/rankedlineage.dmp -busco_lineages_folder: /lustre/scratch123/tol/resources/busco/data/v5/2021-03-14/lineages +nt_database: /home/runner/work/ascc/ascc/NT_database/ +nt_kraken_db_path: /home/runner/work/ascc/ascc/kraken2/kraken2 +ncbi_taxonomy_path: /home/runner/work/ascc/ascc/ncbi_taxdump/ +ncbi_rankedlineage_path: /home/runner/work/ascc/ascc/ncbi_taxdump/rankedlineage.dmp +busco_lineages_folder: /home/runner/work/ascc/ascc/busco_database/lineages +fcs_gx_database_path: /home/runner/work/ascc/ascc/FCS_gx/ seqkit: sliding: 6000 window: 100000 diff --git a/assets/test.yaml b/assets/test.yaml index 9419b09..46ba412 100755 --- a/assets/test.yaml +++ b/assets/test.yaml @@ -12,6 +12,7 @@ nt_kraken_db_path: /lustre/scratch123/tol/teams/tola/users/ea10/ascc_databases/n ncbi_taxonomy_path: /lustre/scratch123/tol/teams/tola/users/ea10/databases/taxdump/ ncbi_rankedlineage_path: /lustre/scratch123/tol/teams/tola/users/ea10/databases/taxdump/rankedlineage.dmp busco_lineages_folder: /lustre/scratch123/tol/resources/busco/data/v5/2021-03-14/lineages +fcs_gx_database_path: /lustre/scratch124/tol/projects/asg/sub_projects/ncbi_decon/0.4.0/gxdb seqkit: sliding: 6000 window: 100000 diff --git a/bin/parse_fcsgx_result.py b/bin/parse_fcsgx_result.py new file mode 100755 index 0000000..5f3f8bc --- /dev/null +++ b/bin/parse_fcsgx_result.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +""" +Script for parsing the result files of FCS-GX, originally written by Eerik Aunin (ea10) +further minor modifications by Yumi Sims (yy5) +""" + +import general_purpose_functions as gpf +from collections import OrderedDict +import os +import sys +import argparse + + +def get_fcs_gx_outfile_paths(fcs_gx_reports_folder): + """ + Locates the FCS-GX output files in the FCS-GX output directory + """ + if os.path.isdir(fcs_gx_reports_folder) is False: + sys.stderr.write("Could not find the directory with FCS-GX output files ({})\n".format(fcs_gx_reports_folder)) + sys.exit(1) + + fcs_gx_outfiles = os.listdir(fcs_gx_reports_folder) + taxonomy_files = [n for n in fcs_gx_outfiles if n.endswith(".taxonomy.rpt")] + if len(taxonomy_files) != 1: + sys.stderr.write( + "Error occurred when trying to find FCS-GX *.taxonomy.rpt file in {}\n".format(fcs_gx_reports_folder) + ) + sys.exit(1) + taxonomy_file = fcs_gx_reports_folder + "/" + taxonomy_files[0] + + report_files = [n for n in fcs_gx_outfiles if n.endswith(".fcs_gx_report.txt")] + if len(report_files) != 1: + sys.stderr.write( + "Error occurred when trying to find FCS-GX *.fcs_gx_report.txt file in {}\n".format(fcs_gx_reports_folder) + ) + sys.exit(1) + report_file = fcs_gx_reports_folder + "/" + report_files[0] + return taxonomy_file, report_file + + +def load_taxids_data(taxonomy_file): + """ + Parses the *.taxonomy.rpt to find taxids that correspond to species names. Returns this as a dictionary + """ + taxonomy_data = gpf.l(taxonomy_file) + assert len(taxonomy_data) > 2 + taxonomy_data = taxonomy_data[2 : len(taxonomy_data)] + collection_dict = OrderedDict() + + for line in taxonomy_data: + add_new_entry = False + multiple_divs_per_scaff = False + split_line = line.split("\t") + assert len(split_line) == 34 + scaff = split_line[0] + if "~" in scaff: + scaff = scaff.split("~")[0] + tax_name_1 = split_line[5] + tax_id_1 = split_line[6] + div_1 = split_line[7] + cvg_by_div_1 = split_line[8] + if cvg_by_div_1 != "": + cvg_by_div_1 = int(cvg_by_div_1) + cvg_by_tax_1 = split_line[9] + if cvg_by_tax_1 != "": + cvg_by_tax_1 = int(cvg_by_tax_1) + score_1 = split_line[10] + if score_1 != "": + score_1 = int(score_1) + else: + score_1 = 0 + if scaff in collection_dict: + old_score = collection_dict[scaff]["fcs_gx_score"] + if old_score < score_1: + add_new_entry = True + multiple_divs_per_scaff = True + else: + add_new_entry = True + if add_new_entry is True: + row_dict = dict() + row_dict["fcs_gx_top_tax_name"] = tax_name_1 + row_dict["fcs_gx_top_taxid"] = tax_id_1 + row_dict["fcs_gx_div"] = div_1 + row_dict["fcs_gx_coverage_by_div"] = cvg_by_div_1 + row_dict["fcs_gx_coverage_by_tax"] = cvg_by_tax_1 + row_dict["fcs_gx_score"] = score_1 + row_dict["fcs_gx_multiple_divs_per_scaff"] = multiple_divs_per_scaff + row_dict["fcs_gx_action"] = "NA" + collection_dict[scaff] = row_dict + return collection_dict + + +def load_report_data(report_file, collection_dict): + """ + Parses the *.fcs_gx_report.txt to add entries from the 'action' column to the collection of entries per scaffold that is stored in collection_dict + """ + report_data = gpf.l(report_file) + if len(report_data) > 2: + report_data = report_data[2 : len(report_data)] + for line in report_data: + split_line = line.split("\t") + assert len(split_line) == 8 + scaff = split_line[0] + fcs_gx_action = split_line[4] + collection_dict[scaff]["fcs_gx_action"] = fcs_gx_action + return collection_dict + + +def get_taxids_list(fcs_gx_taxonomy_file_path): + """ + Goes through FCS-GX taxonomy output file and returns a list of unique taxIDs found in the file + """ + if os.path.isfile(fcs_gx_taxonomy_file_path) is False: + sys.stderr.write( + f"The FCS-GX taxonomy file was not found at the expected location ({fcs_gx_taxonomy_file_path})\n" + ) + sys.exit(1) + taxids_list = list() + fcs_gx_taxonomy_data = gpf.ll(fcs_gx_taxonomy_file_path) + for line in fcs_gx_taxonomy_data: + if line.startswith("#") is False: + split_line = line.split("\t") + assert len(split_line) == 34 + taxid = split_line[6] + if taxid not in taxids_list: + taxids_list.append(taxid) + return taxids_list + + +def get_lineages_by_taxid(taxids_list, rankedlineage_path): + """ + Takes a list of taxIDs and the path to the NCBI rankedlineage.dmp file as the input. Returns the lineage corresponding to each taxID + """ + lineages_dict = dict() + rankedlineage_col_names = ( + "taxid", + "fcs_gx_name", + "fcs_gx_species", + "fcs_gx_genus", + "fcs_gx_family", + "fcs_gx_order", + "fcs_gx_class", + "fcs_gx_phylum", + "fcs_gx_kingdom", + "fcs_gx_domain", + ) + if os.path.isfile(rankedlineage_path) is False: + sys.stderr.write( + f"The NCBI rankedlineage.dmp file was not found at the expected location ({rankedlineage_path})\n" + ) + sys.exit(1) + rankedlineage_data = gpf.ll(rankedlineage_path) + for line in rankedlineage_data: + split_line = line.split("|") + split_line = [n.strip() for n in split_line] + assert len(split_line) == 11 + taxid = split_line[0] + if taxid in taxids_list: + current_lineage_dict = dict() + for i in range(1, 10): + current_lineage_dict[rankedlineage_col_names[i]] = split_line[i] + lineages_dict[taxid] = current_lineage_dict + return lineages_dict + + +def main(fcs_gx_reports_folder, ncbi_rankedlineage_path): + taxonomy_file, report_file = get_fcs_gx_outfile_paths(fcs_gx_reports_folder) + collection_dict = load_taxids_data(taxonomy_file) + collection_dict = load_report_data(report_file, collection_dict) + taxids_list = get_taxids_list(taxonomy_file) + lineages_dict = get_lineages_by_taxid(taxids_list, ncbi_rankedlineage_path) + rankedlineage_col_names = ( + "taxid", + "fcs_gx_name", + "fcs_gx_species", + "fcs_gx_genus", + "fcs_gx_family", + "fcs_gx_order", + "fcs_gx_class", + "fcs_gx_phylum", + "fcs_gx_kingdom", + "fcs_gx_domain", + ) + + out_header = "scaff,fcs_gx_top_tax_name,fcs_gx_top_taxid,fcs_gx_div,fcs_gx_coverage_by_div,fcs_gx_coverage_by_tax,fcs_gx_score,fcs_gx_multiple_divs_per_scaff,fcs_gx_action" + out_header += "," + ",".join(rankedlineage_col_names) + print(out_header) + for scaff, row_dict in collection_dict.items(): + out_line = "{},{},{},{},{},{},{},{},{}".format( + scaff, + row_dict["fcs_gx_top_tax_name"], + row_dict["fcs_gx_top_taxid"], + row_dict["fcs_gx_div"], + row_dict["fcs_gx_coverage_by_div"], + row_dict["fcs_gx_coverage_by_tax"], + row_dict["fcs_gx_score"], + row_dict["fcs_gx_multiple_divs_per_scaff"], + row_dict["fcs_gx_action"], + ) + row_top_taxid = row_dict["fcs_gx_top_taxid"] + if row_top_taxid in lineages_dict: + current_lineage_dict = lineages_dict[row_dict["fcs_gx_top_taxid"]] + for i in range(1, 10): + out_line += f",{current_lineage_dict[rankedlineage_col_names[i]]}" + # current_lineage_dict[rankedlineage_col_names[i]] = split_line[i] + else: + for i in range(1, 10): + out_line += "," + print(out_line) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "fcs_gx_reports_folder", + type=str, + help="Path to directory with FCS-GX output files (*.taxonomy.rpt and *.fcs_gx_report.txt)", + ) + parser.add_argument("ncbi_rankedlineage_path", type=str, help="Path to the rankedlineage.dmp of NCBI taxonomy") + parser.add_argument("-v", action="version", version="1.0") + args = parser.parse_args() + main(args.fcs_gx_reports_folder, args.ncbi_rankedlineage_path) diff --git a/modules.json b/modules.json index 180afda..0014130 100644 --- a/modules.json +++ b/modules.json @@ -35,6 +35,11 @@ "git_sha": "5a35af8b60d45425c4b9193e567d16b614d93dbe", "installed_by": ["modules"] }, + "fcs/fcsgx": { + "branch": "master", + "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", + "installed_by": ["modules"] + }, "kraken2/kraken2": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", diff --git a/modules/local/parse_fcsgx_result.nf b/modules/local/parse_fcsgx_result.nf new file mode 100644 index 0000000..9edbab6 --- /dev/null +++ b/modules/local/parse_fcsgx_result.nf @@ -0,0 +1,40 @@ +process PARSE_FCSGX_RESULT { + tag "${meta.id}" + label 'process_low' + + conda "conda-forge::python=3.9" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.9' : + 'biocontainers/python:3.9' }" + + input: + tuple val(meta), path(fcs_gx_reports_folder) + path ncbi_rankedlineage_path + + output: + tuple val(meta), path( "*.csv" ), emit: fcsgxresult + path "versions.yml", emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + parse_fcsgx_result.py ${fcs_gx_reports_folder} ${ncbi_rankedlineage_path} > parsed_fcsgx.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + parse_fcsgx_result: \$(parse_fcsgx_result.py -v) + END_VERSIONS + """ + + stub: + """ + touch parsed_fcsgx.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | sed 's/Python //g') + parse_fcsgx_result: \$(parse_fcsgx_result.py -v) + END_VERSIONS + """ +} diff --git a/modules/nf-core/fcs/fcsgx/main.nf b/modules/nf-core/fcs/fcsgx/main.nf new file mode 100644 index 0000000..1244b9b --- /dev/null +++ b/modules/nf-core/fcs/fcsgx/main.nf @@ -0,0 +1,64 @@ +process FCS_FCSGX { + tag "$meta.id" + label 'process_low' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/releases/0.4.0/fcs-gx.sif': + 'docker.io/ncbi/fcs-gx:0.4.0' }" + + input: + tuple val(meta), path(assembly) + path gxdb + + output: + tuple val(meta), path("out/*.fcs_gx_report.txt"), emit: fcs_gx_report + tuple val(meta), path("out/*.taxonomy.rpt") , emit: taxonomy_report + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "FCS_FCSGX module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def FCSGX_VERSION = '0.4.0' + + """ + python3 /app/bin/run_gx \\ + --fasta $assembly \\ + --out-dir ./out \\ + --gx-db ./${gxdb[0].baseName} \\ + --tax-id ${meta.taxid} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python3 --version 2>&1 | sed -e "s/Python //g") + FCS-GX: $FCSGX_VERSION + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "FCS_FCSGX module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def prefix = task.ext.prefix ?: "${meta.id}" + def FCSGX_VERSION = '0.4.0' + + """ + mkdir -p out + touch out/${prefix}.fcs_gx_report.txt + touch out/${prefix}.taxonomy.rpt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python3 --version 2>&1 | sed -e "s/Python //g") + FCS-GX: $FCSGX_VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/fcs/fcsgx/meta.yml b/modules/nf-core/fcs/fcsgx/meta.yml new file mode 100644 index 0000000..0afaa9f --- /dev/null +++ b/modules/nf-core/fcs/fcsgx/meta.yml @@ -0,0 +1,60 @@ +name: "fcs_fcsgx" +description: Run FCS-GX on assembled genomes. The contigs of the assembly are searched against a reference database excluding the given taxid. +keywords: + - assembly + - genomics + - quality control + - contamination + - NCBI +tools: + - "fcs": + description: | + "The Foreign Contamination Screening (FCS) tool rapidly detects contaminants from foreign + organisms in genome assemblies to prepare your data for submission. Therefore, the + submission process to NCBI is faster and fewer contaminated genomes are submitted. + This reduces errors in analyses and conclusions, not just for the original data submitter + but for all subsequent users of the assembly." + homepage: "https://www.ncbi.nlm.nih.gov/data-hub/cgr/data-quality-tools/" + documentation: "https://github.com/ncbi/fcs/wiki/FCS-GX" + tool_dev_url: "https://github.com/ncbi/fcs" + + licence: "United States Government Work" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', taxid:'6973' ] + - assembly: + type: file + description: assembly fasta file + - database: + type: file + description: Files of the database downloaded from the ncbi server, + https://ftp.ncbi.nlm.nih.gov/genomes/TOOLS/FCS/database/. All files + of one db should be downloaded and given to the process as + channel.collect(). The link contains 2 databases, test-only and all. + Use all for pipeline usage and test-only for tests. + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', taxid:'9606' ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - fcs_gx_report: + type: file + description: Report containing the contig identifier and recommended action (EXCLUDE, TRIM, FIX, REVIEW) + pattern: "*.fcs_gx_report.txt" + - taxonomy_report: + type: file + description: Report containing the contig identifier and mapped contaminant species + pattern: "*.taxonomy.rpt" + +authors: + - "@tillenglert" diff --git a/subworkflows/local/run_fcsgx.nf b/subworkflows/local/run_fcsgx.nf new file mode 100644 index 0000000..c592578 --- /dev/null +++ b/subworkflows/local/run_fcsgx.nf @@ -0,0 +1,67 @@ +include { FCS_FCSGX } from '../../modules/nf-core/fcs/fcsgx/main' +include { PARSE_FCSGX_RESULT } from '../../modules/local/parse_fcsgx_result' + +workflow RUN_FCSGX { + + take: + reference // Channel [ val(meta), path(file) ] + fcsgxpath // Channel path(file) + taxid // Channel val(taxid) + ncbi_rankedlineage_path // Channel path(file) + + main: + ch_versions = Channel.empty() + + Channel + .of('all.gxi', 'all.gxs', 'all.taxa.tsv', 'all.meta.jsonl', 'all.blast_div.tsv.gz') + .combine(fcsgxpath) + .map {suxfix, dbpath -> [file(dbpath + '/' + suxfix)]} + .collect() + .set {fcsgxdb} + + // + // Create input channel for FCS_FCSGX, taxid is required to be the meta id. + // + reference + .combine( taxid ) + .map { it -> + tuple ([taxid: it[1]], + it[0]) + } + .set { reference_with_taxid } + + + // + // MODULE: FCS_FCSGX run on assembly fasta tuple with taxid againist fcsgxdb. + // + FCS_FCSGX ( + reference_with_taxid, + fcsgxdb + ) + ch_versions = ch_versions.mix( FCS_FCSGX.out.versions ) + + // + // Create input channel for parsing result module. + // + FCS_FCSGX.out.fcs_gx_report + .map{ it -> + tuple(it[0], + it[1].getParent() + ) + } + .set { report_path } + + // + // MODULE: PARSE_FCSGX_RESULT to parse the FCS_FCSGX result output in csv format. + // + PARSE_FCSGX_RESULT ( + report_path, + ncbi_rankedlineage_path + ) + ch_versions = ch_versions.mix( PARSE_FCSGX_RESULT.out.versions ) + + emit: + fcsgxresult = PARSE_FCSGX_RESULT.out.fcsgxresult + versions = ch_versions.ifEmpty(null) + +} \ No newline at end of file diff --git a/subworkflows/local/yaml_input.nf b/subworkflows/local/yaml_input.nf index b4891b0..f0bceac 100644 --- a/subworkflows/local/yaml_input.nf +++ b/subworkflows/local/yaml_input.nf @@ -31,6 +31,7 @@ workflow YAML_INPUT { reference_proteomes: ( data.reference_proteomes ) nt_kraken_db_path: ( data.nt_kraken_db_path ) kmer_len: ( data.kmer_len ) + fcs_gx_database_path: ( data.fcs_gx_database_path ) ncbi_taxonomy_path: ( data.ncbi_taxonomy_path ) ncbi_rankedlineage_path: ( data.ncbi_rankedlineage_path ) busco_lineages_folder: ( data.busco_lineages_folder ) @@ -58,6 +59,7 @@ workflow YAML_INPUT { ncbi_taxonomy_path = group.ncbi_taxonomy_path ncbi_rankedlineage_path = group.ncbi_rankedlineage_path busco_lineages_folder = group.busco_lineages_folder + fcs_gx_database_path = group.fcs_gx_database_path seqkit_sliding = seqkit.sliding_value seqkit_window = seqkit.window_value versions = ch_versions.ifEmpty(null) diff --git a/workflows/ascc.nf b/workflows/ascc.nf index f7b0773..5b1b76f 100644 --- a/workflows/ascc.nf +++ b/workflows/ascc.nf @@ -25,6 +25,7 @@ include { GENERATE_GENOME } from '../subworkflows/local/generate_genome' include { EXTRACT_TIARA_HITS } from '../subworkflows/local/extract_tiara_hits' include { EXTRACT_NT_BLAST } from '../subworkflows/local/extract_nt_blast' include { RUN_FCSADAPTOR } from '../subworkflows/local/run_fcsadaptor' +include { RUN_FCSGX } from '../subworkflows/local/run_fcsgx' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -112,10 +113,13 @@ workflow ASCC { // // SUBWORKFLOW: // - RUN_FCSADAPTOR ( - GENERATE_GENOME.out.reference_tuple + RUN_FCSGX ( + YAML_INPUT.out.reference, + YAML_INPUT.out.fcs_gx_database_path, + YAML_INPUT.out.taxid, + YAML_INPUT.out.ncbi_rankedlineage_path ) - ch_versions = ch_versions.mix(RUN_FCSADAPTOR.out.versions) + ch_versions = ch_versions.mix(RUN_FCSGX.out.versions) // // SUBWORKFLOW: COLLECT SOFTWARE VERSIONS