From 8939ce3e2088a7ba89c0fdbf29901e98df4e231f Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Sun, 11 Dec 2022 16:52:34 +0100 Subject: [PATCH 01/14] Start adding bracken/combinebrackenreports (need smodule update) --- conf/modules.config | 9 +++++ modules.json | 5 +++ .../bracken/combinebrackenoutputs/main.nf | 36 +++++++++++++++++++ .../bracken/combinebrackenoutputs/meta.yml | 31 ++++++++++++++++ .../local/standardisation_profiles.nf | 19 ++++++++-- 5 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/bracken/combinebrackenoutputs/main.nf create mode 100644 modules/nf-core/bracken/combinebrackenoutputs/meta.yml diff --git a/conf/modules.config b/conf/modules.config index dd85c0c..a8bf3e8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -321,6 +321,15 @@ process { ] } + withName: BRACKEN_COMBINEBRACKENOUTPUTS { + ext.prefix = { "bracken_${meta.id}_combined_reports" } + publishDir = [ + path: { "${params.outdir}/bracken/" }, + mode: params.publish_dir_mode, + pattern: '*.{txt}' + ] + } + withName: KRAKENTOOLS_COMBINEKREPORTS { ext.prefix = { "kraken2_${meta.id}_combined_reports" } publishDir = [ diff --git a/modules.json b/modules.json index 377e902..7815f5d 100644 --- a/modules.json +++ b/modules.json @@ -30,6 +30,11 @@ "git_sha": "8cab56516076b23c6f8eb1ac20ba4ce9692c85e1", "installed_by": ["modules"] }, + "bracken/combinebrackenoutputs": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] + }, "cat/fastq": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", diff --git a/modules/nf-core/bracken/combinebrackenoutputs/main.nf b/modules/nf-core/bracken/combinebrackenoutputs/main.nf new file mode 100644 index 0000000..73b7148 --- /dev/null +++ b/modules/nf-core/bracken/combinebrackenoutputs/main.nf @@ -0,0 +1,36 @@ +process BRACKEN_COMBINEBRACKENOUTPUTS { + label 'process_low' + + conda (params.enable_conda ? "bioconda::bracken=2.7" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bracken:2.7--py39hc16433a_0': + 'quay.io/biocontainers/bracken:2.7--py39hc16433a_0' }" + + input: + path input + + output: + path "*.txt" , emit: txt + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "bracken_combined.txt" + // WARN: Version information not provided by tool on CLI. + // Please update version string below when bumping container versions. + def VERSION = '2.7' + """ + combine_bracken_outputs.py \\ + $args \\ + --files ${input} \\ + -o ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + combine_bracken_output: ${VERSION} + END_VERSIONS + """ +} diff --git a/modules/nf-core/bracken/combinebrackenoutputs/meta.yml b/modules/nf-core/bracken/combinebrackenoutputs/meta.yml new file mode 100644 index 0000000..c4a9712 --- /dev/null +++ b/modules/nf-core/bracken/combinebrackenoutputs/meta.yml @@ -0,0 +1,31 @@ +name: "bracken_combinebrackenoutputs" +description: Combine output of metagenomic samples analyzed by bracken. +keywords: + - sort +tools: + - "bracken": + description: Bracken (Bayesian Reestimation of Abundance with KrakEN) is a highly accurate statistical method that computes the abundance of species in DNA sequences from a metagenomics sample. + homepage: https://ccb.jhu.edu/software/bracken/ + documentation: https://ccb.jhu.edu/software/bracken/index.shtml?t=manual + tool_dev_url: https://github.com/jenniferlu717/Bracken + doi: "10.7717/peerj-cs.104" + licence: ["GPL v3"] + +input: + - input: + type: file + description: List of output files from bracken + pattern: "*" + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - txt: + type: file + description: Combined output in table format + pattern: "*.txt" + +authors: + - "@jfy133" diff --git a/subworkflows/local/standardisation_profiles.nf b/subworkflows/local/standardisation_profiles.nf index 8c73472..582aaed 100644 --- a/subworkflows/local/standardisation_profiles.nf +++ b/subworkflows/local/standardisation_profiles.nf @@ -2,6 +2,7 @@ // Standardise output files e.g. aggregation // +include { BRACKEN_COMBINEBRACKENOUTPUTS } from '../../modules/nf-core/bracken/combinebrackenoutputs/main' include { KAIJU_KAIJU2TABLE } from '../../modules/nf-core/kaiju/kaiju2table/main' include { KRAKENTOOLS_COMBINEKREPORTS as KRAKENTOOLS_COMBINEKREPORTS_KRAKEN } from '../../modules/nf-core/krakentools/combinekreports/main' include { KRAKENTOOLS_COMBINEKREPORTS as KRAKENTOOLS_COMBINEKREPORTS_CENTRIFUGE } from '../../modules/nf-core/krakentools/combinekreports/main' @@ -25,10 +26,11 @@ workflow STANDARDISATION_PROFILES { */ ch_input_profiles = profiles .branch { - motus: it[0]['tool'] == 'motus' - kraken2: it[0]['tool'] == 'kraken2' + bracken: it[0]['tool'] == 'bracken' centrifuge: it[0]['tool'] == 'centrifuge' + kraken2: it[0]['tool'] == 'kraken2' metaphlan3: it[0]['tool'] == 'metaphlan3' + motus: it[0]['tool'] == 'motus' unknown: true } @@ -49,7 +51,18 @@ workflow STANDARDISATION_PROFILES { Standardise and aggregate */ - // CENTRIFUGE + // Bracken + + ch_profiles_for_bracken = ch_input_profiles.bracken + .map { [it[0]['db_name'], it[1]] } + .groupTuple() + .map { + [[id:it[0]], it[1]] + } + + BRACKEN_COMBINEBRACKENOUTPUTS ( ch_profiles_for_bracken ) + + // CENTRIFUGE // Collect and replace id for db_name for prefix // Have to sort by size to ensure first file actually has hits otherwise From 07bd989bc6f8e663c9e10b998101d8ed86dc5d5f Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Mon, 12 Dec 2022 10:02:22 +0100 Subject: [PATCH 02/14] Start work on groovy native datbase checks --- conf/modules.config | 8 -------- modules/local/database_check.nf | 29 --------------------------- subworkflows/local/db_check.nf | 35 +++++++++++++++++++++++++++------ workflows/taxprofiler.nf | 2 +- 4 files changed, 30 insertions(+), 44 deletions(-) delete mode 100644 modules/local/database_check.nf diff --git a/conf/modules.config b/conf/modules.config index dd85c0c..017e0c9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -12,14 +12,6 @@ process { - withName: DATABASE_CHECK { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: FASTQC { ext.args = '--quiet' ext.prefix = { "${meta.id}_${meta.run_accession}_raw" } diff --git a/modules/local/database_check.nf b/modules/local/database_check.nf deleted file mode 100644 index ccf611c..0000000 --- a/modules/local/database_check.nf +++ /dev/null @@ -1,29 +0,0 @@ -process DATABASE_CHECK { - tag "$databasesheet" - label 'process_single' - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'quay.io/biocontainers/python:3.8.3' }" - - input: - path databasesheet - - output: - path '*.csv' , emit: csv - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: // This script is bundled with the pipeline, in nf-core/taxprofiler/bin/ - """ - cat $databasesheet >> database_sheet.valid.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS - """ -} diff --git a/subworkflows/local/db_check.nf b/subworkflows/local/db_check.nf index 5d0c4eb..ce26905 100644 --- a/subworkflows/local/db_check.nf +++ b/subworkflows/local/db_check.nf @@ -2,7 +2,6 @@ // Check input samplesheet and get read channels // -include { DATABASE_CHECK } from '../../modules/local/database_check' include { UNTAR } from '../../modules/nf-core/untar/main' workflow DB_CHECK { @@ -10,15 +9,18 @@ workflow DB_CHECK { dbsheet // file: /path/to/dbsheet.csv main: + ch_versions = Channel.empty() // TODO: make database sheet check // Checks: // 1) no duplicates, - // 2) args do not have quotes, e.g. just `,,` and NOT `,"",` - parsed_samplesheet = DATABASE_CHECK ( dbsheet ) - .csv + + parsed_samplesheet = Channel.fromPath(dbsheet) .splitCsv ( header:true, sep:',' ) - .map { create_db_channels(it) } + .map { + validate_db_sheet(it) + create_db_channels(it) + } ch_dbs_for_untar = parsed_samplesheet .branch { @@ -29,12 +31,31 @@ workflow DB_CHECK { // TODO Filter to only run UNTAR on DBs of tools actually using? // TODO make optional whether to save UNTAR ( ch_dbs_for_untar.untar ) + ch_versions = ch_versions.mix(UNTAR.out.versions.first()) ch_final_dbs = ch_dbs_for_untar.skip.mix( UNTAR.out.untar ) emit: dbs = ch_final_dbs // channel: [ val(meta), [ db ] ] - versions = DATABASE_CHECK.out.versions.mix(UNTAR.out.versions.first()) // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] +} + +def validate_db_sheet(LinkedHashMap row){ + + // check minimum number of columns + if (row.size() < 4) exit 1, "[nf-core/taxprofiler] error: Invalid database input sheet - malformed row (e.g. missing column). See documentation for more information. Error in: ${row}, " + + // all columns there + def expected_headers = ['tool', 'db_name', 'db_params', 'db_path'] + if ( !row.keySet().containsAll(expected_headers) ) exit 1, "[nf-core/taxprofiler] error: Invalid database input sheet - malformed column names. Please check input TSV. Column names should be: ${expected_keys.join(", ")}" + + // valid tools specified// TIFNISIH LIST + def expected_tools = [ "bracken", "centrifuge", "diamond", "kaiju", "kraken2", "malt", "metaphlan3" ] + + // detect quotes in params + if ( row.db_params.contains('"') ) exit 1, "[nf-core/taxprofiler] error: Invalid database db_params entry. No quotes allowed. Error in: ${row}" + if ( row.db_params.contains("'") ) exit 1, "[nf-core/taxprofiler] error: Invalid database db_params entry. No quotes allowed. Error in: ${row}" + } def create_db_channels(LinkedHashMap row) { @@ -51,3 +72,5 @@ def create_db_channels(LinkedHashMap row) { return array } + + diff --git a/workflows/taxprofiler.nf b/workflows/taxprofiler.nf index c9f002c..7bcfc3a 100644 --- a/workflows/taxprofiler.nf +++ b/workflows/taxprofiler.nf @@ -25,7 +25,7 @@ if ( params.input ) { exit 1, "Input samplesheet, or PEP config and base directory not specified" } -if (params.databases) { ch_databases = file(params.databases) } else { exit 1, 'Input database sheet not specified!' } +if (params.databases) { ch_databases = file(params.databases, checkIfExists: true) } else { exit 1, 'Input database sheet not specified!' } if (params.shortread_qc_mergepairs && params.run_malt ) log.warn "[nf-core/taxprofiler] MALT does not accept uncollapsed paired-reads. Pairs will be profiled as separate files." if (params.shortread_qc_includeunmerged && !params.shortread_qc_mergepairs) exit 1, "ERROR: [nf-core/taxprofiler] cannot include unmerged reads when merging is not turned on. Please specify --shortread_qc_mergepairs" From 3df0a383da88107a0cd34d6b8b3573a0a9a0fed4 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Mon, 12 Dec 2022 10:10:24 +0100 Subject: [PATCH 03/14] Update combine bracken outputs to include meta for publishing purposes --- conf/modules.config | 4 ++-- modules.json | 2 +- modules/nf-core/bracken/combinebrackenoutputs/main.nf | 11 ++++++----- .../nf-core/bracken/combinebrackenoutputs/meta.yml | 10 ++++++++++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a8bf3e8..742992d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -330,12 +330,12 @@ process { ] } - withName: KRAKENTOOLS_COMBINEKREPORTS { + withName: KRAKENTOOLS_COMBINEKREPORTS_KRAKEN { ext.prefix = { "kraken2_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/kraken2/" }, mode: params.publish_dir_mode, - pattern: '*.{txt}' + pattern: '*.txt' ] } diff --git a/modules.json b/modules.json index 7815f5d..b46e88d 100644 --- a/modules.json +++ b/modules.json @@ -32,7 +32,7 @@ }, "bracken/combinebrackenoutputs": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "9c87d5fdad182590a370ea43a4ecebd200a6f6fb", "installed_by": ["modules"] }, "cat/fastq": { diff --git a/modules/nf-core/bracken/combinebrackenoutputs/main.nf b/modules/nf-core/bracken/combinebrackenoutputs/main.nf index 73b7148..977030c 100644 --- a/modules/nf-core/bracken/combinebrackenoutputs/main.nf +++ b/modules/nf-core/bracken/combinebrackenoutputs/main.nf @@ -1,4 +1,5 @@ process BRACKEN_COMBINEBRACKENOUTPUTS { + tag "$meta.id" label 'process_low' conda (params.enable_conda ? "bioconda::bracken=2.7" : null) @@ -7,18 +8,18 @@ process BRACKEN_COMBINEBRACKENOUTPUTS { 'quay.io/biocontainers/bracken:2.7--py39hc16433a_0' }" input: - path input + tuple val(meta), path(input) output: - path "*.txt" , emit: txt - path "versions.yml", emit: versions + tuple val(meta), path("*.txt"), emit: txt + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "bracken_combined.txt" + def prefix = task.ext.prefix ?: "${meta.id}" // WARN: Version information not provided by tool on CLI. // Please update version string below when bumping container versions. def VERSION = '2.7' @@ -26,7 +27,7 @@ process BRACKEN_COMBINEBRACKENOUTPUTS { combine_bracken_outputs.py \\ $args \\ --files ${input} \\ - -o ${prefix} + -o ${prefix}.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bracken/combinebrackenoutputs/meta.yml b/modules/nf-core/bracken/combinebrackenoutputs/meta.yml index c4a9712..9ad5385 100644 --- a/modules/nf-core/bracken/combinebrackenoutputs/meta.yml +++ b/modules/nf-core/bracken/combinebrackenoutputs/meta.yml @@ -12,12 +12,22 @@ tools: licence: ["GPL v3"] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - input: type: file description: List of output files from bracken pattern: "*" 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 From 460f3ca157bd618dde7dbc20f5c99bdd2bda731b Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Mon, 12 Dec 2022 11:03:40 +0100 Subject: [PATCH 04/14] Add database sheet validation --- subworkflows/local/db_check.nf | 31 ++++++++++++++++++++----------- subworkflows/local/profiling.nf | 10 +++++----- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/subworkflows/local/db_check.nf b/subworkflows/local/db_check.nf index ce26905..4ed786d 100644 --- a/subworkflows/local/db_check.nf +++ b/subworkflows/local/db_check.nf @@ -11,14 +11,22 @@ workflow DB_CHECK { main: ch_versions = Channel.empty() - // TODO: make database sheet check - // Checks: - // 1) no duplicates, + // special check to check _between_ rows, for which we must group rows together + Channel.fromPath(dbsheet) + .splitCsv ( header:true, sep:',' ) + .map {[it.tool, it.db_name] } + .groupTuple() + .map { + tool, db_name -> + def unique_names = db_name.unique(false) + if ( unique_names.size() < db_name.size() ) exit 1, "[nf-core/taxprofiler] ERROR: Each database for a tool must have a unique name, duplicated detected. Tool: ${tool}, Database name: ${unique_names}" + } + // normal checks for within-row validity, so can be moved to separate functions parsed_samplesheet = Channel.fromPath(dbsheet) .splitCsv ( header:true, sep:',' ) .map { - validate_db_sheet(it) + validate_db_rows(it) create_db_channels(it) } @@ -40,21 +48,22 @@ workflow DB_CHECK { versions = ch_versions // channel: [ versions.yml ] } -def validate_db_sheet(LinkedHashMap row){ +def validate_db_rows(LinkedHashMap row){ // check minimum number of columns - if (row.size() < 4) exit 1, "[nf-core/taxprofiler] error: Invalid database input sheet - malformed row (e.g. missing column). See documentation for more information. Error in: ${row}, " + if (row.size() < 4) exit 1, "[nf-core/taxprofiler] ERROR: Invalid database input sheet - malformed row (e.g. missing column). See documentation for more information. Error in: ${row}" // all columns there def expected_headers = ['tool', 'db_name', 'db_params', 'db_path'] - if ( !row.keySet().containsAll(expected_headers) ) exit 1, "[nf-core/taxprofiler] error: Invalid database input sheet - malformed column names. Please check input TSV. Column names should be: ${expected_keys.join(", ")}" + if ( !row.keySet().containsAll(expected_headers) ) exit 1, "[nf-core/taxprofiler] ERROR: Invalid database input sheet - malformed column names. Please check input TSV. Column names should be: ${expected_keys.join(", ")}" // valid tools specified// TIFNISIH LIST - def expected_tools = [ "bracken", "centrifuge", "diamond", "kaiju", "kraken2", "malt", "metaphlan3" ] + def expected_tools = [ "bracken", "centrifuge", "diamond", "kaiju", "kraken2", "krakenuniq", "malt", "metaphlan3", "motus" ] + if ( !expected_tools.contains(row.tool) ) exit 1, "[nf-core/taxprofiler] ERROR: Invalid tool name. Please see documentation for all supported profilers. Error in: ${row}" // detect quotes in params - if ( row.db_params.contains('"') ) exit 1, "[nf-core/taxprofiler] error: Invalid database db_params entry. No quotes allowed. Error in: ${row}" - if ( row.db_params.contains("'") ) exit 1, "[nf-core/taxprofiler] error: Invalid database db_params entry. No quotes allowed. Error in: ${row}" + if ( row.db_params.contains('"') ) exit 1, "[nf-core/taxprofiler] ERROR: Invalid database db_params entry. No quotes allowed. Error in: ${row}" + if ( row.db_params.contains("'") ) exit 1, "[nf-core/taxprofiler] ERROR: Invalid database db_params entry. No quotes allowed. Error in: ${row}" } @@ -66,7 +75,7 @@ def create_db_channels(LinkedHashMap row) { def array = [] if (!file(row.db_path, type: 'dir').exists()) { - exit 1, "ERROR: Please check input samplesheet -> database could not be found!\n${row.db_path}" + exit 1, "ERROR: Please check input samplesheet -> database path could not be found!\n${row.db_path}" } array = [ meta, file(row.db_path) ] diff --git a/subworkflows/local/profiling.nf b/subworkflows/local/profiling.nf index f5c970c..6613648 100644 --- a/subworkflows/local/profiling.nf +++ b/subworkflows/local/profiling.nf @@ -41,14 +41,14 @@ workflow PROFILING { } .combine(databases) .branch { - malt: it[2]['tool'] == 'malt' - kraken2: it[2]['tool'] == 'kraken2' || it[2]['tool'] == 'bracken' // to reuse the kraken module to produce the input data for bracken - metaphlan3: it[2]['tool'] == 'metaphlan3' centrifuge: it[2]['tool'] == 'centrifuge' - kaiju: it[2]['tool'] == 'kaiju' diamond: it[2]['tool'] == 'diamond' - motus: it[2]['tool'] == 'motus' + kaiju: it[2]['tool'] == 'kaiju' + kraken2: it[2]['tool'] == 'kraken2' || it[2]['tool'] == 'bracken' // to reuse the kraken module to produce the input data for bracken krakenuniq: it[2]['tool'] == 'krakenuniq' + malt: it[2]['tool'] == 'malt' + metaphlan3: it[2]['tool'] == 'metaphlan3' + motus: it[2]['tool'] == 'motus' unknown: true } From 7c66968fef7ec7bd2ca44e5cb1571814817acf16 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Mon, 12 Dec 2022 11:04:21 +0100 Subject: [PATCH 05/14] More comments --- subworkflows/local/db_check.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/db_check.nf b/subworkflows/local/db_check.nf index 4ed786d..14078d9 100644 --- a/subworkflows/local/db_check.nf +++ b/subworkflows/local/db_check.nf @@ -12,6 +12,7 @@ workflow DB_CHECK { ch_versions = Channel.empty() // special check to check _between_ rows, for which we must group rows together + // note: this will run in parallel to within-row validity, but we can assume this will run faster thus will fail first Channel.fromPath(dbsheet) .splitCsv ( header:true, sep:',' ) .map {[it.tool, it.db_name] } From e31e7d31725cf035a51f3e796c0e52ff62b32704 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Mon, 12 Dec 2022 15:42:01 +0100 Subject: [PATCH 06/14] Update mOTUs to 3.0.3 --- modules.json | 4 ++-- modules/nf-core/motus/merge/main.nf | 8 +++----- modules/nf-core/motus/merge/meta.yml | 2 +- modules/nf-core/motus/profile/main.nf | 6 +++--- modules/nf-core/motus/profile/meta.yml | 2 +- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/modules.json b/modules.json index b46e88d..a3017f7 100644 --- a/modules.json +++ b/modules.json @@ -172,12 +172,12 @@ }, "motus/merge": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "3fce766123e71e82fb384db7d07b59180baa9ee9", "installed_by": ["modules"] }, "motus/profile": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "3fce766123e71e82fb384db7d07b59180baa9ee9", "installed_by": ["modules"] }, "multiqc": { diff --git a/modules/nf-core/motus/merge/main.nf b/modules/nf-core/motus/merge/main.nf index d9f091e..5041cf0 100644 --- a/modules/nf-core/motus/merge/main.nf +++ b/modules/nf-core/motus/merge/main.nf @@ -1,13 +1,11 @@ -VERSION = '3.0.1' - process MOTUS_MERGE { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? "bioconda::motus=3.0.1" : null) + conda (params.enable_conda ? "bioconda::motus=3.0.3" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/motus:3.0.1--pyhdfd78af_0': - 'quay.io/biocontainers/motus:3.0.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/motus:3.0.3--pyhdfd78af_0': + 'quay.io/biocontainers/motus:3.0.3--pyhdfd78af_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/motus/merge/meta.yml b/modules/nf-core/motus/merge/meta.yml index 02d11d0..24ae939 100644 --- a/modules/nf-core/motus/merge/meta.yml +++ b/modules/nf-core/motus/merge/meta.yml @@ -14,7 +14,7 @@ tools: homepage: "https://motu-tool.org/" documentation: "https://github.com/motu-tool/mOTUs/wiki" tool_dev_url: "https://github.com/motu-tool/mOTUs" - doi: "10.1038/s41467-019-08844-4" + doi: "10.1186/s40168-022-01410-z" licence: "['GPL v3']" input: diff --git a/modules/nf-core/motus/profile/main.nf b/modules/nf-core/motus/profile/main.nf index bd7a127..8a76250 100644 --- a/modules/nf-core/motus/profile/main.nf +++ b/modules/nf-core/motus/profile/main.nf @@ -2,10 +2,10 @@ process MOTUS_PROFILE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::motus=3.0.1" : null) + conda (params.enable_conda ? "bioconda::motus=3.0.3" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/motus:3.0.1--pyhdfd78af_0': - 'quay.io/biocontainers/motus:3.0.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/motus:3.0.3--pyhdfd78af_0': + 'quay.io/biocontainers/motus:3.0.3--pyhdfd78af_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/motus/profile/meta.yml b/modules/nf-core/motus/profile/meta.yml index 3c3b660..1202042 100644 --- a/modules/nf-core/motus/profile/meta.yml +++ b/modules/nf-core/motus/profile/meta.yml @@ -11,7 +11,7 @@ tools: homepage: "https://motu-tool.org/" documentation: "https://github.com/motu-tool/mOTUs/wiki" tool_dev_url: "https://github.com/motu-tool/mOTUs" - doi: "10.1038/s41467-019-08844-4" + doi: "10.1186/s40168-022-01410-z" licence: "['GPL v3']" input: From 88589fbc53fa861a76509351bb032474e6ef3161 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Thu, 15 Dec 2022 10:35:06 +0100 Subject: [PATCH 07/14] Fix publishing of log files of rpreprocessing steps --- conf/modules.config | 144 ++++++++++++++++++++++++++++++-------------- 1 file changed, 100 insertions(+), 44 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 747a03a..5127ff5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -61,10 +61,17 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/fastp" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + pattern: '*.{log,html,json}' + ] ] } @@ -82,10 +89,17 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/fastp" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/fastp" }, + mode: params.publish_dir_mode, + pattern: '*.{log,html,json}' + ] ] } @@ -98,10 +112,17 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/adapterremoval" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/adapterremoval" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/adapterremoval" }, + mode: params.publish_dir_mode, + pattern: '*.settings' + ] ] } @@ -117,20 +138,34 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/adapterremoval" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/adapterremoval" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/adapterremoval" }, + mode: params.publish_dir_mode, + pattern: '*.settings' + ] ] } withName: PORECHOP_PORECHOP { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/porechop" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/porechop" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/porechop" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ] ] } @@ -143,10 +178,17 @@ process { .join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}_filtered" } publishDir = [ - path: { "${params.outdir}/filtlong" }, - mode: params.publish_dir_mode, - pattern: '*.{fastq.gz,log}', - enabled: params.save_preprocessed_reads + [ + path: { "${params.outdir}/filtlong" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.save_preprocessed_reads + ], + [ + path: { "${params.outdir}/filtlong" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ] ] } @@ -163,21 +205,21 @@ process { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ - path: { "${params.outdir}/bowtie2/align" }, - mode: params.publish_dir_mode, - pattern: '*.log' + path: { "${params.outdir}/bowtie2/align" }, + mode: params.publish_dir_mode, + pattern: '*.log' ], [ - path: { "${params.outdir}/bowtie2/align" }, - mode: params.publish_dir_mode, - enabled: params.save_hostremoval_mapped, - pattern: '*.bam' + path: { "${params.outdir}/bowtie2/align" }, + mode: params.publish_dir_mode, + enabled: params.save_hostremoval_mapped, + pattern: '*.bam' ], [ - path: { "${params.outdir}/bowtie2/align" }, - mode: params.publish_dir_mode, - enabled: params.save_hostremoval_unmapped, - pattern: '*.fastq.gz' + path: { "${params.outdir}/bowtie2/align" }, + mode: params.publish_dir_mode, + enabled: params.save_hostremoval_unmapped, + pattern: '*.fastq.gz' ] ] } @@ -240,10 +282,17 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}-${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/bbduk/" }, - mode: params.publish_dir_mode, - pattern: '*.{fastq.gz,log}', - enabled: params.save_complexityfiltered_reads + [ + path: { "${params.outdir}/bbduk/" }, + mode: params.publish_dir_mode, + pattern: '*.{fastq.gz,log}', + enabled: params.save_complexityfiltered_reads + ], + [ + path: { "${params.outdir}/bbduk/" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ] ] } @@ -255,10 +304,17 @@ process { ].join(' ').trim() ext.prefix = { "${meta.id}-${meta.run_accession}" } publishDir = [ - path: { "${params.outdir}/prinseqplusplus/" }, - mode: params.publish_dir_mode, - pattern: '*{_good_out.fastq.gz,_good_out_R1.fastq.gz,_good_out_R2.fastq.gz,log}', - enabled: params.save_complexityfiltered_reads + [ + path: { "${params.outdir}/prinseqplusplus/" }, + mode: params.publish_dir_mode, + pattern: '*{_good_out.fastq.gz,_good_out_R1.fastq.gz,_good_out_R2.fastq.gz}', + enabled: params.save_complexityfiltered_reads + ], + [ + path: { "${params.outdir}/prinseqplusplus/" }, + mode: params.publish_dir_mode, + pattern: '*.log' + ] ] } @@ -318,7 +374,7 @@ process { publishDir = [ path: { "${params.outdir}/bracken/" }, mode: params.publish_dir_mode, - pattern: '*.{txt}' + pattern: '*.txt' ] } From 3b86a22556825e3aa7e15cd5fa4d415343d3ac13 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Thu, 15 Dec 2022 12:57:49 +0100 Subject: [PATCH 08/14] Fix falco publication names --- conf/modules.config | 4 ++-- modules/nf-core/falco/main.nf | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 5127ff5..f50b20c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,7 +33,7 @@ process { } withName: FALCO { - ext.prefix = { "${meta.id}_${meta.run_accession}_raw" } + ext.prefix = { "${meta.id}_${meta.run_accession}_raw_falco" } publishDir = [ path: { "${params.outdir}/falco/raw" }, mode: params.publish_dir_mode, @@ -42,7 +42,7 @@ process { } withName: FALCO_PROCESSED { - ext.prefix = { "${meta.id}_${meta.run_accession}_processed" } + ext.prefix = { "${meta.id}_${meta.run_accession}_processed_falco" } publishDir = [ path: { "${params.outdir}/falco/processed" }, mode: params.publish_dir_mode, diff --git a/modules/nf-core/falco/main.nf b/modules/nf-core/falco/main.nf index 1688162..b279c57 100644 --- a/modules/nf-core/falco/main.nf +++ b/modules/nf-core/falco/main.nf @@ -33,7 +33,9 @@ process FALCO { """ } else { """ - falco $args --threads $task.cpus ${reads} + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + falco $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz cat <<-END_VERSIONS > versions.yml "${task.process}": From 9e6a91aff929ddd12170278565771571c18f0dda Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Thu, 15 Dec 2022 13:25:01 +0100 Subject: [PATCH 09/14] Distinguish Kraken2 from Bracken --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f50b20c..60ebaa4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -351,7 +351,7 @@ process { withName: KRAKEN2_KRAKEN2 { ext.args = params.kraken2_save_minimizers ? { "${meta.db_params} --report-minimizer-data" } : { "${meta.db_params}" } - ext.prefix = params.perform_runmerging ? { "${meta.id}-${meta.db_name}" } : { "${meta.id}-${meta.run_accession}-${meta.db_name}" } + ext.prefix = params.perform_runmerging ? { meta.tool == "bracken" ? "${meta.id}-${meta.db_name}.bracken" : "${meta.id}-${meta.db_name}" } : { meta.tool == "bracken" ? "${meta.id}-${meta.run_accession}-${meta.db_name}.bracken" : "${meta.id}-${meta.run_accession}-${meta.db_name}" } publishDir = [ path: { "${params.outdir}/kraken2/${meta.db_name}/" }, mode: params.publish_dir_mode, @@ -361,7 +361,7 @@ process { withName: BRACKEN_BRACKEN { errorStrategy = 'ignore' - ext.prefix = params.perform_runmerging ? { "${meta.id}-${meta.db_name}" } : { "${meta.id}-${meta.run_accession}-${meta.db_name}" } + ext.prefix = params.perform_runmerging ? { "${meta.id}-${meta.db_name}.bracken" } : { "${meta.id}-${meta.run_accession}-${meta.db_name}.bracken" } publishDir = [ path: { "${params.outdir}/bracken/${meta.db_name}/" }, mode: params.publish_dir_mode, From 0bdc119f9cee402257816ef4362b42a2b92b4866 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Thu, 15 Dec 2022 13:27:41 +0100 Subject: [PATCH 10/14] Include falco patch --- modules.json | 3 ++- modules/nf-core/falco/falco.diff | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/falco/falco.diff diff --git a/modules.json b/modules.json index a3017f7..7eb15e3 100644 --- a/modules.json +++ b/modules.json @@ -73,7 +73,8 @@ "falco": { "branch": "master", "git_sha": "fc959214036403ad83efe7a41d43d0606c445cda", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/falco/falco.diff" }, "fastp": { "branch": "master", diff --git a/modules/nf-core/falco/falco.diff b/modules/nf-core/falco/falco.diff new file mode 100644 index 0000000..4c726b9 --- /dev/null +++ b/modules/nf-core/falco/falco.diff @@ -0,0 +1,16 @@ +Changes in module 'nf-core/falco' +--- modules/nf-core/falco/main.nf ++++ modules/nf-core/falco/main.nf +@@ -33,7 +33,9 @@ + """ + } else { + """ +- falco $args --threads $task.cpus ${reads} ++ [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz ++ [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz ++ falco $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +************************************************************ From d6db04503e0fe2d643a7f34cb915a708f490de1e Mon Sep 17 00:00:00 2001 From: Sofia Stamouli <91951607+sofstam@users.noreply.github.com> Date: Thu, 15 Dec 2022 17:04:45 +0100 Subject: [PATCH 11/14] Configuration of multiqc report --- assets/multiqc_config.yml | 207 +++++++++++++++++++++++++++++++++++++- 1 file changed, 205 insertions(+), 2 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index e4a04a9..865879b 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -19,11 +19,20 @@ custom_logo_title: "nf-core/taxprofiler" run_modules: - fastqc - adapterRemoval + - bbduk + - prinseqplusplus - fastp + - filtlong - bowtie2 + - minimap2 - samtools - kraken + - kaiju + - metaphlan + - diamond - malt + - motus + - porechop - custom_content #extra_fn_clean_exts: @@ -36,16 +45,41 @@ top_modules: name: "FastQC (pre-Trimming)" path_filters: - "*raw_*fastqc.zip" + - "fastqc": + name: "Falco (pre-Trimming)" + path_filters: + - "*_raw_falco_*_report.html" - "fastp" - "adapterRemoval" + - "porechop" - "fastqc": name: "FastQC (post-Trimming)" path_filters: - - "*raw_*processed.zip" + - "*_processed_*fastqc.zip" + - "fastqc": + name: "Falco (post-Trimming)" + path_filters: + - "*_processed_falco_*_report.html" + - "bbduk" + - "prinseqplusplus" + - "filtlong" + - "bowtie2": + name: "bowtie2" + - "samtools": + name: "Samtools Stats" - "kraken": name: "Kraken" path_filters: - - "*.kraken2.report.txt" + - "*.kraken2.kraken2.report.txt" + - "kraken": + name: "Bracken" + anchor: "bracken" + target: "Bracken" + doi: "10.7717/peerj-cs.104" + info: "Estimates species abundances in metagenomics samples by probabilistically re-distributing reads in the taxonomic tree." + extra: "Note: plot title will say Kraken2 due to the first step of bracken producing the same output format as Kraken. Abundance information is currently not supported in MultiQC." + path_filters: + - "*.bracken.kraken2.report.txt" - "kraken": name: "Centrifuge" anchor: "centrifuge" @@ -55,3 +89,172 @@ top_modules: extra: "Note: plot title will say Kraken2 due to Centrifuge producing the same output format as Kraken. If activated, see the actual Kraken2 results in the section above." path_filters: - "*.centrifuge.txt" + - "malt": + name: "MALT" + - "diamond" + - "kaiju": + name: "Kaiju" + - "motus" + +#It is not possible to set placement for custom kraken and centrifuge columns. + +table_columns_placement: + FastQC (pre-Trimming): + total_sequences: 100 + avg_sequence_length: 110 + percent_duplicates: 120 + percent_gc: 130 + percent_fails: 140 + Falco (pre-Trimming): + total_sequences: 200 + avg_sequence_length: 210 + percent_duplicates: 220 + percent_gc: 230 + percent_fails: 240 + fastp: + pct_adapter: 300 + pct_surviving: 310 + pct_duplication: 320 + after_filtering_gc_content: 330 + after_filtering_q30_rate: 340 + after_filtering_q30_bases: 350 + Adapter Removal: + aligned_total: 360 + percent_aligned: 370 + percent_collapsed: 380 + percent_discarded: 390 + FastQC (post-Trimming): + total_sequences: 400 + avg_sequence_length: 410 + percent_duplicates: 420 + percent_gc: 430 + percent_fails: 440 + Falco (post-Trimming): + total_sequences: 500 + avg_sequence_length: 510 + percent_duplicates: 520 + percent_gc: 530 + percent_fails: 540 + bowtie2: + overall_alignment_rate: 600 + Samtools Stats: + raw_total_sequences: 700 + reads_mapped: 710 + reads_mapped_percent: 720 + reads_properly_paired_percent: 730 + non-primary_alignments: 740 + reads_MQ0_percent: 750 + error_rate: 760 + MALT: + Num. of queries: 1000 + Total reads: 1100 + Mappability: 1200 + Assig. Taxonomy: 1300 + Taxonomic assignment success: 1400 + Kaiju: + assigned: 2000 + "% Assigned": 2100 + "% Unclassified": 2200 + +table_columns_visible: + FastQC (pre-Trimming): + total_sequences: True + avg_sequence_length: True + percent_duplicates: True + percent_gc: True + percent_fails: False + Falco (pre-Trimming): + total_sequences: True + avg_sequence_length: True + percent_duplicates: True + percent_gc: True + percent_fails: False + fastp: + pct_adapter: True + pct_surviving: True + pct_duplication: False + after_filtering_gc_content: False + after_filtering_q30_rate: False + after_filtering_q30_bases: False + Adapter Removal: + aligned_total: True + percent_aligned: True + percent_collapsed: True + percent_discarded: False + FastQC (post-Trimming): + total_sequences: True + avg_sequence_length: True + percent_duplicates: False + percent_gc: False + percent_fails: False + Falco (post-Trimming): + total_sequences: True + avg_sequence_length: True + percent_duplicates: False + percent_gc: False + percent_fails: False + bowtie2: + overall_alignment_rate: True + Samtools Stats: + raw_total_sequences: True + reads_mapped: True + reads_mapped_percent: True + reads_properly_paired_percent: False + non-primary_alignments: False + reads_MQ0_percent: False + error_rate: False + Kraken: + "% Unclassified": True + "% Top 5": False + Bracken: + "% Unclassified": True + "% Top 5": False + Centrifuge: + "% Unclassified": True + "% Top 5": False + MALT: + Num. of queries: True + Total reads: True + Mappability: True + Assig. Taxonomy: False + Taxonomic assignment success: True + Kaiju: + assigned: False + "% Assigned": False + "% Unclassified": True +table_columns_name: + FastQC (pre-Trimming): + total_sequences: "Nr. Input Reads" + avg_sequence_length: "Length Input Reads" + percent_gc: "% GC Input Reads" + percent_duplicates: "% Dups Input Reads" + percent_fails: "% Failed Input Reads" + Falco (pre-Trimming): + total_sequences: "Nr. Input Reads" + avg_sequence_length: "Length Input Reads" + percent_gc: "% GC Input Reads" + percent_duplicates: "% Dups Input Reads" + percent_fails: "% Failed Input Reads" + FastQC (post-Trimming): + total_sequences: "Nr. Processed Reads" + avg_sequence_length: "Length Processed Reads" + percent_gc: "% GC Processed Reads" + percent_duplicates: "% Dups Processed Reads" + percent_fails: "%Failed Processed Reads" + Falco (post-Trimming): + total_sequences: "Nr. Processed Reads" + avg_sequence_length: "Length Processed Reads" + percent_gc: "% GC Processed Reads" + percent_duplicates: "% Dups Processed Reads" + percent_fails: "%Failed Processed Reads" + Samtools Stats: + raw_total_sequences: "Nr. Reads Into Mapping" + reads_mapped: "Nr. Mapped Reads" + reads_mapped_percent: "% Mapped Reads" + + +extra_fn_clean_exts: + - ".kraken2.kraken2.report.txt" + - ".centrifuge.txt" + - ".bracken.kraken2.report.txt" + - ".settings" From a2c81e33fd6496e1cfa81d091d870cdda1030687 Mon Sep 17 00:00:00 2001 From: Sofia Stamouli Date: Fri, 16 Dec 2022 08:38:58 +0100 Subject: [PATCH 12/14] Prettier --- assets/multiqc_config.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 865879b..1deb8f8 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -251,10 +251,9 @@ table_columns_name: raw_total_sequences: "Nr. Reads Into Mapping" reads_mapped: "Nr. Mapped Reads" reads_mapped_percent: "% Mapped Reads" - extra_fn_clean_exts: - - ".kraken2.kraken2.report.txt" - - ".centrifuge.txt" - - ".bracken.kraken2.report.txt" - - ".settings" + - ".kraken2.kraken2.report.txt" + - ".centrifuge.txt" + - ".bracken.kraken2.report.txt" + - ".settings" From 5a592f086e9e7c7cd448f9e1f0c276f218885080 Mon Sep 17 00:00:00 2001 From: Sofia Stamouli <91951607+sofstam@users.noreply.github.com> Date: Fri, 16 Dec 2022 11:46:35 +0100 Subject: [PATCH 13/14] Update assets/multiqc_config.yml Co-authored-by: James A. Fellows Yates --- assets/multiqc_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 1deb8f8..014d9f7 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -246,7 +246,7 @@ table_columns_name: avg_sequence_length: "Length Processed Reads" percent_gc: "% GC Processed Reads" percent_duplicates: "% Dups Processed Reads" - percent_fails: "%Failed Processed Reads" + percent_fails: "% Failed Processed Reads" Samtools Stats: raw_total_sequences: "Nr. Reads Into Mapping" reads_mapped: "Nr. Mapped Reads" From 07a1cfae62ceb98b074615868550d1f933a021b4 Mon Sep 17 00:00:00 2001 From: Sofia Stamouli <91951607+sofstam@users.noreply.github.com> Date: Fri, 16 Dec 2022 11:46:42 +0100 Subject: [PATCH 14/14] Update assets/multiqc_config.yml Co-authored-by: James A. Fellows Yates --- assets/multiqc_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 014d9f7..6bc13c2 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -240,7 +240,7 @@ table_columns_name: avg_sequence_length: "Length Processed Reads" percent_gc: "% GC Processed Reads" percent_duplicates: "% Dups Processed Reads" - percent_fails: "%Failed Processed Reads" + percent_fails: "% Failed Processed Reads" Falco (post-Trimming): total_sequences: "Nr. Processed Reads" avg_sequence_length: "Length Processed Reads"