diff --git a/assets/test/mCerEla1.1.buscogenes.dmnd b/assets/test/mMelMel3.1.buscogenes.dmnd similarity index 99% rename from assets/test/mCerEla1.1.buscogenes.dmnd rename to assets/test/mMelMel3.1.buscogenes.dmnd index bccca41d..391345ba 100644 Binary files a/assets/test/mCerEla1.1.buscogenes.dmnd and b/assets/test/mMelMel3.1.buscogenes.dmnd differ diff --git a/assets/test/mMelMel3.1.buscoregions.dmnd b/assets/test/mMelMel3.1.buscoregions.dmnd new file mode 100644 index 00000000..91fa6042 Binary files /dev/null and b/assets/test/mMelMel3.1.buscoregions.dmnd differ diff --git a/assets/test_full/gfLaeSulp1.1.buscoregions.dmnd b/assets/test_full/gfLaeSulp1.1.buscoregions.dmnd new file mode 100644 index 00000000..3f2a1a54 Binary files /dev/null and b/assets/test_full/gfLaeSulp1.1.buscoregions.dmnd differ diff --git a/conf/modules.config b/conf/modules.config index ebf62694..d734a94e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -37,12 +37,20 @@ process { ext.args = "--evalue 1.0e-25 --max-target-seqs 10 --max-hsps 1" } + withName: "DIAMOND_BLASTX" { + ext.args = "--evalue 1.0e-25 --max-target-seqs 10 --max-hsps 1" + } + withName: "BLOBTOOLKIT_WINDOWSTATS" { ext.args = "--window 0.1 --window 0.01 --window 1 --window 100000 --window 1000000" } - withName: "BLOBTOOLKIT_BLOBDIR" { + withName: "BLOBTOOLKIT_CREATEBLOBDIR" { ext.args = "--evalue 1.0e-25 --hit-count 10" + } + + withName: "BLOBTOOLKIT_CREATEBLOBDIR" { + ext.args = "--evalue 1.0e-25 --hit-count 10 --update-plot" publishDir = [ path: { "${params.outdir}/" }, mode: params.publish_dir_mode, @@ -66,6 +74,14 @@ process { ] } + withName: "BLOBTOOLKIT_CHUNK" { + ext.args = "--chunk 100000 --overlap 0 --max-chunks 10 --min-length 1000" + } + + withName: "BLOBTOOLKIT_UNCHUNK" { + ext.args = "--count 10" + } + withName: "CUSTOM_DUMPSOFTWAREVERSIONS" { publishDir = [ path: { "${params.outdir}/blobtoolkit_info" }, diff --git a/conf/test.config b/conf/test.config index 165bfff6..1ce09e85 100644 --- a/conf/test.config +++ b/conf/test.config @@ -30,7 +30,8 @@ params { taxon = "Meles meles" // Databases - taxdump = "/lustre/scratch123/tol/teams/grit/geval_pipeline/btk_databases/taxdump" - busco = "/lustre/scratch123/tol/resources/nextflow/busco_2021_06_reduced/" - uniprot = "${projectDir}/assets/test/mCerEla1.1.buscogenes.dmnd" + taxdump = "/lustre/scratch123/tol/teams/grit/geval_pipeline/btk_databases/taxdump" + busco = "/lustre/scratch123/tol/resources/nextflow/busco_2021_06_reduced/" + blastp = "${projectDir}/assets/test/mMelMel3.1.buscogenes.dmnd" + blastx = "${projectDir}/assets/test/mMelMel3.1.buscoregions.dmnd" } diff --git a/conf/test_full.config b/conf/test_full.config index ee22dba2..117a876d 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -27,7 +27,9 @@ params { taxon = "Laetiporus sulphureus" // Databases - taxdump = "/lustre/scratch123/tol/teams/grit/geval_pipeline/btk_databases/taxdump" - busco = "/lustre/scratch123/tol/resources/busco/v5/" - uniprot = "${projectDir}/assets/test_full/gfLaeSulp1.1.buscogenes.dmnd" + taxdump = "/lustre/scratch123/tol/teams/grit/geval_pipeline/btk_databases/taxdump" + busco = "/lustre/scratch123/tol/resources/busco/v5/" + blastp = "${projectDir}/assets/test_full/gfLaeSulp1.1.buscogenes.dmnd" + blastx = "${projectDir}/assets/test_full/gfLaeSulp1.1.buscoregions.dmnd" + } diff --git a/modules.json b/modules.json index cd615550..65c34a1a 100644 --- a/modules.json +++ b/modules.json @@ -21,6 +21,11 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, + "diamond/blastx": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": ["modules"] + }, "fastawindows": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/local/blobtoolkit/chunk.nf b/modules/local/blobtoolkit/chunk.nf new file mode 100644 index 00000000..466397a3 --- /dev/null +++ b/modules/local/blobtoolkit/chunk.nf @@ -0,0 +1,36 @@ +process BLOBTOOLKIT_CHUNK { + tag "$meta.id" + label 'process_single' + + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "BLOBTOOLKIT_CHUNK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + container "genomehubs/blobtoolkit:4.1.5" + + input: + tuple val(meta) , path(fasta) + tuple val(meta2), path(busco_table) + + output: + tuple val(meta), path("*.chunks.fasta"), emit: chunks + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + btk pipeline chunk-fasta \\ + --in ${fasta} \\ + --busco ${busco_table} \\ + --out ${prefix}.chunks.fasta \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + blobtoolkit: \$(btk --version | cut -d' ' -f2 | sed 's/v//') + END_VERSIONS + """ +} diff --git a/modules/local/blobtoolkit/blobdir.nf b/modules/local/blobtoolkit/createblobdir.nf similarity index 97% rename from modules/local/blobtoolkit/blobdir.nf rename to modules/local/blobtoolkit/createblobdir.nf index 3f064bce..c8094cf3 100644 --- a/modules/local/blobtoolkit/blobdir.nf +++ b/modules/local/blobtoolkit/createblobdir.nf @@ -1,4 +1,4 @@ -process BLOBTOOLKIT_BLOBDIR { +process BLOBTOOLKIT_CREATEBLOBDIR { tag "$meta.id" label 'process_medium' diff --git a/modules/local/blobtoolkit/unchunk.nf b/modules/local/blobtoolkit/unchunk.nf new file mode 100644 index 00000000..f16ddc77 --- /dev/null +++ b/modules/local/blobtoolkit/unchunk.nf @@ -0,0 +1,34 @@ +process BLOBTOOLKIT_UNCHUNK { + tag "$meta.id" + label 'process_single' + + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "BLOBTOOLKIT_UNCHUNK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + container "genomehubs/blobtoolkit:4.1.5" + + input: + tuple val(meta), path(blast_table) + + output: + tuple val(meta), path("*.blastx.out"), emit: blastx + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + btk pipeline unchunk-blast \\ + --in ${blast_table} \\ + --out ${prefix}.blastx.out \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + blobtoolkit: \$(btk --version | cut -d' ' -f2 | sed 's/v//') + END_VERSIONS + """ +} diff --git a/modules/local/blobtoolkit/updateblobdir.nf b/modules/local/blobtoolkit/updateblobdir.nf new file mode 100644 index 00000000..e7f748a9 --- /dev/null +++ b/modules/local/blobtoolkit/updateblobdir.nf @@ -0,0 +1,42 @@ +process BLOBTOOLKIT_UPDATEBLOBDIR { + tag "$meta.id" + label 'process_medium' + + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "BLOBTOOLKIT_BLOBDIR module does not support Conda. Please use Docker / Singularity / Podman instead." + } + container "genomehubs/blobtoolkit:4.1.5" + + input: + tuple val(meta), path(input) + tuple val(meta1), path(blastx) + path(taxdump) + + output: + tuple val(meta), path(prefix), emit: blobdir + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def hits_blastx = blastx ? "--hits ${blastx}" : "" + """ + blobtools replace \\ + --taxdump ${taxdump} \\ + --taxrule bestdistorder=buscoregions \\ + ${hits_blastx} \\ + --bedtsvdir windowstats \\ + --meta ${yaml} \\ + --threads ${task.cpus} \\ + $args \\ + ${input} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + blobtoolkit: \$(btk --version | cut -d' ' -f2 | sed 's/v//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/diamond/blastx/main.nf b/modules/nf-core/diamond/blastx/main.nf new file mode 100644 index 00000000..e08fb0d9 --- /dev/null +++ b/modules/nf-core/diamond/blastx/main.nf @@ -0,0 +1,68 @@ +process DIAMOND_BLASTX { + tag "$meta.id" + label 'process_medium' + + conda "bioconda::diamond=2.0.15" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/diamond:2.0.15--hb97b32f_0' : + 'biocontainers/diamond:2.0.15--hb97b32f_0' }" + + input: + tuple val(meta), path(fasta) + path db + val out_ext + val blast_columns + + output: + tuple val(meta), path('*.blast'), optional: true, emit: blast + tuple val(meta), path('*.xml') , optional: true, emit: xml + tuple val(meta), path('*.txt') , optional: true, emit: txt + tuple val(meta), path('*.daa') , optional: true, emit: daa + tuple val(meta), path('*.sam') , optional: true, emit: sam + tuple val(meta), path('*.tsv') , optional: true, emit: tsv + tuple val(meta), path('*.paf') , optional: true, emit: paf + tuple val(meta), path("*.log") , emit: log + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def columns = blast_columns ? "${blast_columns}" : '' + switch ( out_ext ) { + case "blast": outfmt = 0; break + case "xml": outfmt = 5; break + case "txt": outfmt = 6; break + case "daa": outfmt = 100; break + case "sam": outfmt = 101; break + case "tsv": outfmt = 102; break + case "paf": outfmt = 103; break + default: + outfmt = '6'; + out_ext = 'txt'; + log.warn("Unknown output file format provided (${out_ext}): selecting DIAMOND default of tabular BLAST output (txt)"); + break + } + """ + DB=`find -L ./ -name "*.dmnd" | sed 's/\\.dmnd\$//'` + + diamond \\ + blastx \\ + --threads $task.cpus \\ + --db \$DB \\ + --query $fasta \\ + --outfmt ${outfmt} ${columns} \\ + $args \\ + --out ${prefix}.${out_ext} \\ + --log + + mv diamond.log ${prefix}.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + diamond: \$(diamond --version 2>&1 | tail -n 1 | sed 's/^diamond version //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/diamond/blastx/meta.yml b/modules/nf-core/diamond/blastx/meta.yml new file mode 100644 index 00000000..a2a6013d --- /dev/null +++ b/modules/nf-core/diamond/blastx/meta.yml @@ -0,0 +1,81 @@ +name: diamond_blastx +description: Queries a DIAMOND database using blastx mode +keywords: + - fasta + - diamond + - blastx + - DNA sequence +tools: + - diamond: + description: Accelerated BLAST compatible local sequence aligner + homepage: https://github.com/bbuchfink/diamond + documentation: https://github.com/bbuchfink/diamond/wiki + tool_dev_url: https://github.com/bbuchfink/diamond + doi: "10.1038/s41592-021-01101-x" + licence: ["GPL v3.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input fasta file containing query sequences + pattern: "*.{fa,fasta}" + - db: + type: directory + description: Directory containing the nucelotide blast database + pattern: "*" + - out_ext: + type: string + description: | + Specify the type of output file to be generated. `blast` corresponds to + BLAST pairwise format. `xml` corresponds to BLAST xml format. + `txt` corresponds to to BLAST tabular format. `tsv` corresponds to + taxonomic classification format. + pattern: "blast|xml|txt|daa|sam|tsv|paf" + +output: + - blast: + type: file + description: File containing blastp hits + pattern: "*.{blast}" + - xml: + type: file + description: File containing blastp hits + pattern: "*.{xml}" + - txt: + type: file + description: File containing hits in tabular BLAST format. + pattern: "*.{txt}" + - daa: + type: file + description: File containing hits DAA format + pattern: "*.{daa}" + - sam: + type: file + description: File containing aligned reads in SAM format + pattern: "*.{sam}" + - tsv: + type: file + description: Tab separated file containing taxonomic classification of hits + pattern: "*.{tsv}" + - paf: + type: file + description: File containing aligned reads in pairwise mapping format format + pattern: "*.{paf}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - log: + type: file + description: Log file containing stdout information + pattern: "*.{log}" + +authors: + - "@spficklin" + - "@jfy133" + - "@mjamy" diff --git a/nextflow.config b/nextflow.config index 988b2a1c..c20a6645 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,9 +23,13 @@ params { // Databases and related options taxdump = null busco = null - uniprot = null + blastp = null + blastx = null blastp_outext = 'txt' blastp_cols = 'qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore' + blastx_outext = 'txt' + blastx_cols = 'qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore' + // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index a960bee2..440e181a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -79,7 +79,7 @@ "type": "object", "fa_icon": "fas fa-database", "description": "Define the location and parameters to work with databases.", - "required": ["uniprot", "taxdump"], + "required": ["blastp", "blastx", "taxdump"], "properties": { "taxa_file": { "type": "string", @@ -106,13 +106,32 @@ "fa_icon": "fas fa-file-circle-question", "default": "txt" }, - "uniprot": { + "blastx_cols": { + "type": "string", + "description": "When blastx_outext is 'txt', this is the list of columns that Diamond BLAST should print.", + "default": "qseqid staxids bitscore qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore" + }, + "blastx_outext": { + "type": "string", + "enum": ["blast", "xml", "txt", "daa", "sam", "tsv", "paf"], + "description": "Extension (file format) of the output file from Diamond BLAST.", + "fa_icon": "fas fa-file-circle-question", + "default": "txt" + }, + "blastp": { "type": "string", "format": "file-path", "pattern": "^\\S+\\.dmnd$", "description": "Path to the Diamond species-specific buscogenes database", "fa_icon": "fas fa-file-archive" }, + "blastx": { + "type": "string", + "format": "file-path", + "pattern": "^\\S+\\.dmnd$", + "description": "Path to the Diamond species-specific buscoregions database", + "fa_icon": "fas fa-file-archive" + }, "taxdump": { "type": "string", "format": "directory-path", diff --git a/subworkflows/local/blobtools.nf b/subworkflows/local/blobtools.nf index 730e1334..74eed07a 100644 --- a/subworkflows/local/blobtools.nf +++ b/subworkflows/local/blobtools.nf @@ -11,6 +11,7 @@ workflow BLOBTOOLS { windowstats // channel: [ val(meta), path(window_stats_tsvs) ] busco // channel: [ val(meta), path(full_table) ] blastp // channel: [ val(meta), path(txt) ] + blastx // channel: [ val(meta), path(txt) ] taxdump // channel: path(taxdump_db) @@ -28,12 +29,19 @@ workflow BLOBTOOLS { // // Create Blobtools dataset files // - BLOBTOOLKIT_BLOBDIR ( windowstats, busco, blastp, BLOBTOOLKIT_METADATA.out.yaml, taxdump ) - ch_versions = ch_versions.mix ( BLOBTOOLKIT_BLOBDIR.out.versions.first() ) + BLOBTOOLKIT_CREATEBLOBDIR ( windowstats, busco, blastp, BLOBTOOLKIT_METADATA.out.yaml, taxdump ) + ch_versions = ch_versions.mix ( BLOBTOOLKIT_CREATEBLOBDIR.out.versions.first() ) + + + // + // Update Blobtools dataset files + // + BLOBTOOLKIT_UPDATEBLOBDIR ( BLOBTOOLKIT_CREATEBLOBDIR.out.blobdir, blastx, taxdump ) + ch_versions = ch_versions.mix ( BLOBTOOLKIT_UPDATEBLOBDIR.out.versions.first() ) emit: - metadata = BLOBTOOLKIT_METADATA.out.yaml // channel: [ val(meta), path(yaml) ] - blobdir = BLOBTOOLKIT_BLOBDIR.out.blobdir // channel: [ val(meta), path(dir) ] - versions = ch_versions // channel: [ versions.yml ] + metadata = BLOBTOOLKIT_METADATA.out.yaml // channel: [ val(meta), path(yaml) ] + blobdir = BLOBTOOLKIT_UPDATEBLOBDIR.out.blobdir // channel: [ val(meta), path(dir) ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/run_blastx.nf b/subworkflows/local/run_blastx.nf new file mode 100644 index 00000000..81558b5e --- /dev/null +++ b/subworkflows/local/run_blastx.nf @@ -0,0 +1,46 @@ +// +// Diamond blastx search of assembly contigs against the UniProt reference proteomes +// + +include { BLOBTOOLKIT_CHUNK } from '../../modules/local/blobtoolkit/chunk' +include { BLOBTOOLKIT_UNCHUNK } from '../../modules/local/blobtoolkit/unchunk' +include { DIAMOND_BLASTX } from '../../modules/nf-core/diamond/blastx/main' + +workflow RUN_BLASTX { + take: + fasta // channel: [ val(meta), path(fasta) ] + table // channel: [ val(meta), path(busco_table) ] + blastx // channel: path(blastx_db) + outext // channel: val(out_format) + cols // channel: val(column_names) + + + main: + ch_versions = Channel.empty() + + + // + // Create metadata summary file + // + BLOBTOOLKIT_CHUNK ( fasta, table ) + ch_versions = ch_versions.mix ( BLOBTOOLKIT_CHUNK.out.versions.first() ) + + + // + // Run diamond_blastx + // + DIAMOND_BLASTX ( BLOBTOOLKIT_CHUNK.out.chunks, blastx, outext, cols) + ch_versions = ch_versions.mix ( DIAMOND_BLASTX.out.versions.first() ) + + + // + // Unchunk chunked blastx results + // + BLOBTOOLKIT_UNCHUNK ( DIAMOND_BLASTX.out.txt ) + ch_versions = ch_versions.mix ( BLOBTOOLKIT_UNCHUNK.out.versions.first() ) + + + emit: + blastx_out = BLOBTOOLKIT_UNCHUNK.out.blastx // channel: [ val(meta), path(blastx_out) ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/workflows/blobtoolkit.nf b/workflows/blobtoolkit.nf index c8dad117..1e9b1933 100644 --- a/workflows/blobtoolkit.nf +++ b/workflows/blobtoolkit.nf @@ -11,14 +11,15 @@ WorkflowBlobtoolkit.initialise(params, log) // Add all file path parameters for the pipeline to the list below // Check input path parameters to see if they exist -def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, params.taxa_file, params.taxdump, params.busco, params.uniprot ] +def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, params.taxa_file, params.taxdump, params.busco, params.blastp, params.blastx ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } if (params.fasta && params.accession) { ch_fasta = Channel.of([ [ 'id': params.accession ], params.fasta ]).collect() } else { exit 1, 'Genome fasta file and accession must be specified!' } if (params.taxon) { ch_taxon = Channel.of(params.taxon) } else { exit 1, 'NCBI Taxon ID not specified!' } -if (params.uniprot) { ch_uniprot = file(params.uniprot) } else { exit 1, 'Diamond BLASTp database not specified!' } +if (params.blastp) { ch_blastp = file(params.blastp) } else { exit 1, 'Diamond BLASTp database not specified!' } +if (params.blastx) { ch_blastx = file(params.blastx) } else { exit 1, 'Diamond BLASTx database not specified!' } if (params.taxdump) { ch_taxdump = file(params.taxdump) } else { exit 1, 'NCBI Taxonomy database not specified!' } // Create channel for optional parameters @@ -50,12 +51,13 @@ include { BLOBTOOLKIT_CONFIG } from '../modules/local/blobtoolkit/config' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { COVERAGE_STATS } from '../subworkflows/local/coverage_stats' -include { BUSCO_DIAMOND } from '../subworkflows/local/busco_diamond_blastp' -include { COLLATE_STATS } from '../subworkflows/local/collate_stats' -include { BLOBTOOLS } from '../subworkflows/local/blobtools' -include { VIEW } from '../subworkflows/local/view' +include { INPUT_CHECK } from '../subworkflows/local/input_check' +include { COVERAGE_STATS } from '../subworkflows/local/coverage_stats' +include { BUSCO_DIAMOND } from '../subworkflows/local/busco_diamond_blastp' +include { RUN_BLASTX } from '../subworkflows/local/run_blastx' +include { COLLATE_STATS } from '../subworkflows/local/collate_stats' +include { BLOBTOOLS } from '../subworkflows/local/blobtools' +include { VIEW } from '../subworkflows/local/view' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -115,8 +117,19 @@ workflow BLOBTOOLKIT { ch_taxon_taxa = ch_fasta.combine(ch_taxon).map { meta, fasta, taxon -> [ meta, taxon, [] ] } } - BUSCO_DIAMOND ( ch_genome, ch_taxon_taxa, ch_busco_db, ch_uniprot, params.blastp_outext, params.blastp_cols ) + BUSCO_DIAMOND ( ch_genome, ch_taxon_taxa, ch_busco_db, ch_blastp, params.blastp_outext, params.blastp_cols ) ch_versions = ch_versions.mix ( BUSCO_DIAMOND.out.versions ) + + // + // SUBWORKFLOW: Diamond blastx search of assembly contigs against the UniProt reference proteomes + RUN_BLASTX ( + ch_genome, + BUSCO_DIAMOND.out.first_table, + ch_blastx, + params.blastx_outext, + params.blastx_cols + ) + ch_versions = ch_versions.mix ( RUN_BLASTX.out.versions ) // // SUBWORKFLOW: Collate genome statistics by various window sizes @@ -135,7 +148,13 @@ workflow BLOBTOOLKIT { ch_config = ch_yaml } - BLOBTOOLS ( ch_config, COLLATE_STATS.out.window_tsv, BUSCO_DIAMOND.out.first_table, BUSCO_DIAMOND.out.blastp_txt.ifEmpty([[],[]]), ch_taxdump ) + BLOBTOOLS ( + ch_config, + COLLATE_STATS.out.window_tsv, + BUSCO_DIAMOND.out.first_table, + BUSCO_DIAMOND.out.blastp_txt.ifEmpty([[],[]]), + RUN_BLASTX.out.blastx_out.ifEmpty([[],[]]), + ch_taxdump ) ch_versions = ch_versions.mix ( BLOBTOOLS.out.versions ) //