diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7e07eca..07b39229 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: run: | nextflow run ${GITHUB_WORKSPACE} -entry RAPID -profile test_github,docker --outdir ./results-rapid - - name: Run FULL pipeline with test data - # Remember that you can parallelise this by using strategy.matrix - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test_github,docker --outdir ./results-full + #- name: Run FULL pipeline with test data + # # Remember that you can parallelise this by using strategy.matrix + # run: | + # nextflow run ${GITHUB_WORKSPACE} -profile test_github,docker --outdir ./results-full diff --git a/conf/base.config b/conf/base.config index 55b5c5ec..cfe153d6 100755 --- a/conf/base.config +++ b/conf/base.config @@ -101,14 +101,14 @@ process { withName: '.*:.*:LONGREAD_COVERAGE:(MINIMAP2_ALIGN|MINIMAP2_ALIGN_SPLIT)' { cpus = { check_max( 16 * 1, 'cpus' ) } memory = { check_max( 100.GB * task.attempt, 'memory' ) } - time = { check_max( 18.h * task.attempt, 'time' ) } + time = { check_max( 20.h * task.attempt, 'time' ) } } - // For Large complex genomes > 4Gb - // withName: '.*:.*:LONGREAD_COVERAGE:(MINIMAP2_ALIGN|MINIMAP2_ALIGN_SPLIT)' { - //cpus = { check_max( 20 * 1, 'cpus' ) } - //memory = { check_max( 400.GB * task.attempt, 'memory' ) } - // time = { check_max( 300.h * task.attempt, 'time' ) } +// For Large complex genomes > 4Gb + //withName: '.*:.*:LONGREAD_COVERAGE:(MINIMAP2_ALIGN|MINIMAP2_ALIGN_SPLIT)' { + // cpus = { check_max( 20 * 1, 'cpus' ) } + // memory = { check_max( 400.GB * task.attempt, 'memory' ) } + // time = { check_max( 300.h * task.attempt, 'time' ) } //} withName: '.*:.*:LONGREAD_COVERAGE:SAMTOOLS_SORT' { @@ -121,6 +121,12 @@ process { memory = { check_max( 25.GB * Math.ceil( task.attempt * 2 ), 'memory' ) } } + // For larger + //withName:MUMMER { + // cpus = { check_max( 12 * task.attempt, 'cpus' ) } + // memory = { check_max( 50.GB * Math.ceil( task.attempt * 2 ), 'memory' ) } + //} + withName:UCSC_BEDGRAPHTOBIGWIG { cpus = { check_max( 2 * task.attempt, 'cpus' ) } memory = { check_max( 20.GB * task.attempt, 'memory' ) } @@ -174,8 +180,14 @@ process { // Large Genomes > 4Gb //withName: BUSCO { - //cpus = { check_max( 30 * task.attempt, 'cpus' ) } - //memory = { check_max( 120.GB * task.attempt, 'memory' ) } - //time = { check_max( 300.h * task.attempt, 'time' ) } + // cpus = { check_max( 30 * task.attempt, 'cpus' ) } + // memory = { check_max( 100.GB * task.attempt, 'memory' ) } + // time = { check_max( 300.h * task.attempt, 'time' ) } //} + + // Large Genomes > 4Gb + withName: FASTK_FASTK { + cpus = { check_max( 25 * task.attempt, 'cpus' ) } + memory = { check_max( 100.GB * task.attempt, 'memory' ) } + } } diff --git a/conf/modules.config b/conf/modules.config index 4a34280d..d12a9ebb 100755 --- a/conf/modules.config +++ b/conf/modules.config @@ -41,7 +41,7 @@ process { // Files to be used for pretext, likely to be deleted once the hic workflow is complete. // .bed, .hr.pretext, .lr.pretext, needs centromere} - withName: 'SEQTK_CUTN|GAP_LENGTH|PRETEXTMAP_HIGHRES|PRETEXTMAP_STANDRD|COOLER_ZOOMIFY|COV_FOLDER|UCSC_BEDGRAPHTOBIGWIG|EXTRACT_TELO|JUICER_TOOLS_PRE|SNAPSHOT_SRES|SNAPSHOT_HRES|GET_PAIRED_CONTACT_BED' { + withName: 'SEQTK_CUTN|GAP_LENGTH|PRETEXTMAP_HIGHRES|PRETEXTMAP_STANDRD|COOLER_ZOOMIFY|COV_FOLDER|UCSC_BEDGRAPHTOBIGWIG|EXTRACT_TELO|JUICER_TOOLS_PRE|SNAPSHOT_SRES|SNAPSHOT_HRES' { publishDir = [ path: { "${params.outdir}/hic_files" }, mode: params.publish_dir_mode, @@ -278,4 +278,15 @@ process { ext.args = { '-k2,2 -nr' } } + withName: FASTK_FASTK { + ext.args = "-k31 -t" + } + + withName: MERQURYFK_MERQURYFK { + publishDir = [ + path: { "${params.outdir}/hic_files" }, + mode: params.publish_dir_mode, + pattern: '*.ref.spectra-cn.ln.png' + ] + } } diff --git a/docs/output.md b/docs/output.md index e760d706..cb677d2b 100755 --- a/docs/output.md +++ b/docs/output.md @@ -21,6 +21,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [selfcomp](#selfcomp) - Identifies regions of self-complementary sequence. - [synteny](#synteny) - Generates syntenic alignments between other high quality genomes. - [busco-analysis](#busco-analysis) - Uses BUSCO to identify ancestral elements. Also use to identify ancestral Lepidopteran genes (merian units). +- [kmer](#kmer) - Counts k-mer and generates a copy number spectra plot. - [pipeline-information](#pipeline-information) - Report metrics generated during the workflow execution @@ -218,6 +219,20 @@ This worflows searches along predetermined path for syntenic genome files based ![Workflow Legend](https://raw.githubusercontent.com/sanger-tol/treeval/dev/docs/images/treeval_1_0_legend.jpeg) +## kmer + +This worflows performs a k-mer count using [FASTK_FASTK](https://nf-co.re/modules/fastk_fastk) then passes the results to [MERQURYFK_MERQURYFK](https://nf-co.re/modules/merquryfk_merquryfk) to plot a copy-number k-mer spectra. + +
+Output files + +- `hic_files/` + - `*.ref.spectra-cn.ln.png`: .png file of copy number k-mer spectra. + +
+ +![Workflow Legend](https://raw.githubusercontent.com/sanger-tol/treeval/dev/docs/images/treeval_1_0_legend.jpeg) + ## pipeline-information [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/modules.json b/modules.json index b3f7eb35..2226ccf7 100755 --- a/modules.json +++ b/modules.json @@ -76,11 +76,21 @@ "installed_by": ["modules"], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, + "fastk/fastk": { + "branch": "master", + "git_sha": "29e87a37ae1887fc8289f2f56775604a71715cb9", + "installed_by": ["modules"] + }, "gnu/sort": { "branch": "master", "git_sha": "88f6e982fb8bd40488d837b3b08a65008e602840", "installed_by": ["modules"] }, + "merquryfk/merquryfk": { + "branch": "master", + "git_sha": "6f150e1503c0826c21fedf1fa566cdbecbe98ec7", + "installed_by": ["modules"] + }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", diff --git a/modules/nf-core/fastk/fastk/main.nf b/modules/nf-core/fastk/fastk/main.nf new file mode 100644 index 00000000..fec5a4d2 --- /dev/null +++ b/modules/nf-core/fastk/fastk/main.nf @@ -0,0 +1,41 @@ +process FASTK_FASTK { + tag "$meta.id" + label 'process_medium' + + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.hist") , emit: hist + tuple val(meta), path("*.ktab*", hidden: true) , emit: ktab, optional: true + tuple val(meta), path("*.{prof,pidx}*", hidden: true), emit: prof, optional: true + 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 "FASTK_FASTK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + FastK \\ + $args \\ + -T$task.cpus \\ + -M${task.memory.toGiga()} \\ + -N${prefix}_fk \\ + $reads + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/fastk/fastk/meta.yml b/modules/nf-core/fastk/fastk/meta.yml new file mode 100644 index 00000000..55fd1be7 --- /dev/null +++ b/modules/nf-core/fastk/fastk/meta.yml @@ -0,0 +1,52 @@ +name: "fastk_fastk" +description: A fast K-mer counter for high-fidelity shotgun datasets +keywords: + - k-mer + - count + - histogram +tools: + - "fastk": + description: "A fast K-mer counter for high-fidelity shotgun datasets" + homepage: "https://github.com/thegenemyers/FASTK" + + tool_dev_url: "https://github.com/thegenemyers/FASTK" + + licence: "https://github.com/thegenemyers/FASTK/blob/master/LICENSE" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - hist: + type: file + description: Histogram of k-mers + pattern: "*.hist" + - ktab: + type: file + description: A sorted table of all canonical k‑mers along with their counts. + pattern: "*.ktab" + - prof: + type: file + description: A k‑mer count profile of each sequence in the input data set. + pattern: "*.prof" + +authors: + - "@mahesh-panchal" diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf new file mode 100644 index 00000000..ac163dac --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -0,0 +1,58 @@ +process MERQURYFK_MERQURYFK { + tag "$meta.id" + label 'process_medium' + + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' + + input: + tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly), path(haplotigs) + + output: + tuple val(meta), path("${prefix}.completeness.stats") , emit: stats + tuple val(meta), path("${prefix}.*_only.bed") , emit: bed + tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv + tuple val(meta), path("${prefix}.*.spectra-cn.fl.png"), emit: spectra_cn_fl_png, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.fl.pdf"), emit: spectra_cn_fl_pdf, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.ln.png"), emit: spectra_cn_ln_png, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.ln.pdf"), emit: spectra_cn_ln_pdf, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.st.png"), emit: spectra_cn_st_png, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.st.pdf"), emit: spectra_cn_st_pdf, optional: true + tuple val(meta), path("${prefix}.qv") , emit: qv + tuple val(meta), path("${prefix}.spectra-asm.fl.png") , emit: spectra_asm_fl_png, optional: true + tuple val(meta), path("${prefix}.spectra-asm.fl.pdf") , emit: spectra_asm_fl_pdf, optional: true + tuple val(meta), path("${prefix}.spectra-asm.ln.png") , emit: spectra_asm_ln_png, optional: true + tuple val(meta), path("${prefix}.spectra-asm.ln.pdf") , emit: spectra_asm_ln_pdf, optional: true + tuple val(meta), path("${prefix}.spectra-asm.st.png") , emit: spectra_asm_st_png, optional: true + tuple val(meta), path("${prefix}.spectra-asm.st.pdf") , emit: spectra_asm_st_pdf, optional: true + 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 "MERQURYFK_MERQURYFK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + MerquryFK \\ + $args \\ + -T$task.cpus \\ + ${fastk_ktab.find{ it.toString().endsWith(".ktab") }} \\ + $assembly \\ + $haplotigs \\ + $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + merquryfk: $MERQURY_VERSION + r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/merquryfk/merquryfk/meta.yml b/modules/nf-core/merquryfk/merquryfk/meta.yml new file mode 100644 index 00000000..e1f3af01 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/meta.yml @@ -0,0 +1,115 @@ +name: "merquryfk_merquryfk" +description: FastK based version of Merqury +keywords: + - Merqury + - reference-free + - assembly evaluation +tools: + - "merquryfk": + description: "FastK based version of Merqury" + homepage: "https://github.com/thegenemyers/MERQURY.FK" + + tool_dev_url: "https://github.com/thegenemyers/MERQURY.FK" + + licence: "https://github.com/thegenemyers/MERQURY.FK/blob/main/LICENSE" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastk_hist: + type: file + description: A histogram files from the program FastK + pattern: "*.hist" + - fastk_ktab: + type: file + description: Histogram ktab files from the program FastK (option -t) + pattern: "*.ktab*" + - assembly: + type: file + description: Genome (primary) assembly files (fasta format) + pattern: ".fasta" + - haplotigs: + type: file + description: Assembly haplotigs (fasta format) + pattern: ".fasta" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - stats: + type: file + description: Assembly statistics file + pattern: "*.completeness.stats" + - bed: + type: file + description: Assembly only kmer positions not supported by reads in bed format + pattern: "*_only.bed" + - spectra_cn_fl_png: + type: file + description: "Unstacked copy number spectra filled plot in PNG format" + pattern: "*.spectra-cn.fl.png" + - spectra_cn_ln_png: + type: file + description: "Unstacked copy number spectra line plot in PNG format" + pattern: "*.spectra-cn.ln.png" + - spectra_cn_st_png: + type: file + description: "Stacked copy number spectra line plot in PNG format" + pattern: "*.spectra-cn.st.png" + - spectra_asm_fl_png: + type: file + description: "Unstacked assembly spectra filled plot in PNG format" + pattern: "*.spectra-asm.fl.png" + - spectra_asm_ln_png: + type: file + description: "Unstacked assembly spectra line plot in PNG format" + pattern: "*.spectra-asm.ln.png" + - spectra_asm_st_png: + type: file + description: "Stacked assembly spectra line plot in PNG format" + pattern: "*.spectra-asm.st.png" + - spectra_cn_fl_pdf: + type: file + description: "Unstacked copy number spectra filled plot in PDF format" + pattern: "*.spectra-cn.fl.pdf" + - spectra_cn_ln_pdf: + type: file + description: "Unstacked copy number spectra line plot in PDF format" + pattern: "*.spectra-cn.ln.pdf" + - spectra_cn_st_pdf: + type: file + description: "Stacked copy number spectra line plot in PDF format" + pattern: "*.spectra-cn.st.pdf" + - spectra_asm_fl_pdf: + type: file + description: "Unstacked assembly spectra filled plot in PDF format" + pattern: "*.spectra-asm.fl.pdf" + - spectra_asm_ln_pdf: + type: file + description: "Unstacked assembly spectra line plot in PDF format" + pattern: "*.spectra-asm.ln.pdf" + - spectra_asm_st_pdf: + type: file + description: "Stacked assembly spectra line plot in PDF format" + pattern: "*.spectra-asm.st.pdf" + - assembly_qv: + type: file + description: "error and qv table for each scaffold of the assembly" + pattern: "*.qv" + - qv: + type: file + description: "error and qv of each assembly as a whole" + pattern: "*.qv" + +authors: + - "@mahesh-panchal" diff --git a/subworkflows/local/kmer.nf b/subworkflows/local/kmer.nf new file mode 100755 index 00000000..5471c493 --- /dev/null +++ b/subworkflows/local/kmer.nf @@ -0,0 +1,108 @@ +#!/usr/bin/env nextflow + +// +// Adapted from https://github.com/sanger-tol/genomeassembly +// the Sanger genomeassembly pipeline by @ksenia-krasheninnikova +// +// Use FastK to count K-mers, plot spectra using MerquryFK +// + +// +// MODULE IMPORT BLOCK +// +include { CAT_CAT } from "../../modules/nf-core/cat/cat/main" +include { FASTK_FASTK } from "../../modules/nf-core/fastk/fastk/main" +include { MERQURYFK_MERQURYFK } from '../../modules/nf-core/merquryfk/merquryfk/main' + +workflow KMER { + take: + reference_tuple // Channel [ val(meta), path(file) ] + reads_path // Channel: [ val(meta), val( str ) ] + + main: + ch_versions = Channel.empty() + + // + // LOGIC: PREPARE GET_READS_FROM_DIRECTORY INPUT + // + reference_tuple + .combine( reads_path ) + .map { meta, ref, reads_path -> + tuple( + [ id : meta.id, + single_end : true ], + reads_path + ) + } + .set { get_reads_input } + + // + // MODULE: GETS PACBIO READ PATHS FROM READS_PATH + // + ch_grabbed_read_paths = GrabFiles( get_reads_input ) + + // + // MODULE: JOIN PACBIO READ + // + CAT_CAT( ch_grabbed_read_paths ) + ch_versions = ch_versions.mix(CAT_CAT.out.versions.first()) + + // + // LOGIC: PRODUCE MERGED READS + // + CAT_CAT.out.file_out + .map{ meta, reads -> + reads.getName().endsWith('gz') ? [meta, reads.getParent().toString() + '/' + reads.getBaseName().toString() + '.fa.gz'] : [meta, reads.getParent().toString() + '/' + reads.getBaseName().toString() + '.fa'] + } + .set{ ch_reads_merged } + + // + // LOGIC: PREPARE FASTK INPUT + // + CAT_CAT.out.file_out + .join(ch_reads_merged) + .map{ meta, reads_old, reads_new -> + reads_old.renameTo(reads_new); + } + + // + // MODULE: COUNT KMERS + // + FASTK_FASTK( ch_reads_merged ) + ch_versions = ch_versions.mix(FASTK_FASTK.out.versions.first()) + + // + // LOGIC: PREPARE MERQURYFK INPUT + // + FASTK_FASTK.out.hist + .combine(FASTK_FASTK.out.ktab) + .combine(reference_tuple) + .map{ meta_hist, hist, meta_ktab, ktab, meta_ref, primary -> + tuple( meta_hist, hist, ktab, primary, []) + } + .set{ ch_merq } + + // + // MODULE: USE KMER HISTOGRAM TO PRODUCE SPECTRA + // + MERQURYFK_MERQURYFK ( ch_merq ) + ch_versions = ch_versions.mix(MERQURYFK_MERQURYFK.out.versions.first()) + + emit: + merquryk_completeness = MERQURYFK_MERQURYFK.out.stats // meta, stats + merquryk_qv = MERQURYFK_MERQURYFK.out.qv // meta, qv + versions = ch_versions.ifEmpty(null) +} + +process GrabFiles { + tag "${meta.id}" + executor 'local' + + input: + tuple val(meta), path("in") + + output: + tuple val(meta), path("in/*.fasta.gz") + + "true" +} \ No newline at end of file diff --git a/workflows/treeval.nf b/workflows/treeval.nf index fc3901d3..d5852798 100755 --- a/workflows/treeval.nf +++ b/workflows/treeval.nf @@ -35,6 +35,7 @@ include { GAP_FINDER } from '../subworkflows/local/gap_finder' include { TELO_FINDER } from '../subworkflows/local/telo_finder' include { BUSCO_ANNOTATION } from '../subworkflows/local/busco_annotation' include { HIC_MAPPING } from '../subworkflows/local/hic_mapping' +include { KMER } from '../subworkflows/local/kmer' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -164,10 +165,10 @@ workflow TREEVAL { ) ch_versions = ch_versions.mix(GAP_FINDER.out.versions) - // - // SUBWORKFLOW: Takes reference file, .genome file, mummer variables, motif length variable and as - // file to generate a file containing sites of self-complementary sequnce. - // + // // + // // SUBWORKFLOW: Takes reference file, .genome file, mummer variables, motif length variable and as + // // file to generate a file containing sites of self-complementary sequnce. + // // SELFCOMP ( GENERATE_GENOME.out.reference_tuple, GENERATE_GENOME.out.dot_genome, @@ -234,6 +235,15 @@ workflow TREEVAL { ) ch_versions = ch_versions.mix(BUSCO_ANNOTATION.out.versions) + // + // SUBWORKFLOW: Takes reads and assembly, produces kmer plot + // + KMER ( + GENERATE_GENOME.out.reference_tuple, + YAML_INPUT.out.pacbio_reads + ) + ch_versions = ch_versions.mix(KMER.out.versions) + // // SUBWORKFLOW: Collates version data from prior subworflows // diff --git a/workflows/treeval_rapid.nf b/workflows/treeval_rapid.nf index ed3497c4..f5408f1e 100755 --- a/workflows/treeval_rapid.nf +++ b/workflows/treeval_rapid.nf @@ -29,6 +29,7 @@ include { GAP_FINDER } from '../subworkflows/local/gap_finder' include { LONGREAD_COVERAGE } from '../subworkflows/local/longread_coverage' include { TELO_FINDER } from '../subworkflows/local/telo_finder' include { HIC_MAPPING } from '../subworkflows/local/hic_mapping' +include { KMER } from '../subworkflows/local/kmer' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -118,6 +119,15 @@ workflow TREEVAL_RAPID { YAML_INPUT.out.pacbio_reads ) ch_versions = ch_versions.mix(LONGREAD_COVERAGE.out.versions) + + // + // SUBWORKFLOW: Takes reads and assembly, produces kmer plot + // + KMER ( + GENERATE_GENOME.out.reference_tuple, + YAML_INPUT.out.pacbio_reads + ) + ch_versions = ch_versions.mix(KMER.out.versions) // // SUBWORKFLOW: Collates version data from prior subworflows