diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d4313bc..cf0e5ce0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## nf-core/ampliseq version 2.7.1 - 2023-11-14 + +### `Added` + +### `Changed` + +- [#657](https://github.com/nf-core/ampliseq/pull/657) - Improved parameter descriptions and sequence + +### `Fixed` + +- [#655](https://github.com/nf-core/ampliseq/pull/655) - Added `NUMBA_CACHE_DIR` to fix downstream analysis with QIIME2 that failed on some systems +- [#656](https://github.com/nf-core/ampliseq/pull/656) - Moved conda-check to script-section and replaced `exit 1` with `error()` +- [#657](https://github.com/nf-core/ampliseq/pull/657) - Corrected inaccurate reporting of QIIME2 taxonomic classifications and ASV length filtering + +### `Dependencies` + +### `Removed` + ## nf-core/ampliseq version 2.7.0 - 2023-10-20 ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 8613d28d..4fd6b6ea 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/ampliseq + This report has been generated by the nf-core/ampliseq analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-ampliseq-methods-description": order: -1000 diff --git a/assets/report_template.Rmd b/assets/report_template.Rmd index f0b4073e..8c8fc21e 100644 --- a/assets/report_template.Rmd +++ b/assets/report_template.Rmd @@ -370,7 +370,7 @@ cat(paste0(" Overall read quality profiles are displayed as heat map of the frequency of each quality score at each base position. The mean quality score at each position is shown by the green line, and the quartiles of the quality score distribution by the orange lines. The red line shows the scaled proportion of reads that extend to at least -that position. Original plots can be found [folder dada2/QC/](../dada2/QC/) with names that end in `_qual_stats.pdf`. +that position. Original plots can be found in folder [dada2/QC/](../dada2/QC/) with names that end in `_qual_stats.pdf`. ")) ``` @@ -426,8 +426,8 @@ cat(paste0(" Estimated error rates are displayed for each possible transition. The black line shows the estimated error rates after convergence of the machine-learning algorithm. The red line shows the error rates expected under the nominal definition of the Q-score. The estimated error rates (black line) should be a good fit to the observed rates -(points), and the error rates should drop with increased quality. Original plots can be found in -[folder dada2/QC/](../dada2/QC/) with names that end in `.err.pdf`. +(points), and the error rates should drop with increased quality. Original plots can be found in folder +[dada2/QC/](../dada2/QC/) with names that end in `.err.pdf`. ")) ``` @@ -724,9 +724,10 @@ if ( params$max_len_asv != 0 ) { } # replace 1 with 1.5 to display on log scale -filter_len_profile$Counts[filter_len_profile$Counts == 1] <- 1.5 +filter_len_profile_replaced <- filter_len_profile +filter_len_profile_replaced$Counts[filter_len_profile_replaced$Counts == 1] <- 1.5 -plot_filter_len_profile <- ggplot(filter_len_profile, +plot_filter_len_profile <- ggplot(filter_len_profile_replaced, aes(x = Length, y = Counts)) + geom_bar(stat = "identity", fill = rgb(0.1, 0.4, 0.75), width = 0.5) + ylab("Number of ASVs") + @@ -989,17 +990,18 @@ asv_tax <- read.table(params$qiime2_taxonomy, header = TRUE, sep = "\t") asv_tax <- subset(asv_tax, select = Taxon) # Remove greengenes85 ".__" placeholders -df = as.data.frame(lapply(asv_tax, function(x) gsub(".__", "", x))) -# remove all last, empty ; -df = as.data.frame(lapply(df, function(x) gsub(" ;","",x))) +df = as.data.frame(lapply(asv_tax, function(x) gsub(" .__", "", x))) +# remove all empty ; +df = as.data.frame(lapply(df, function(x) gsub(";;","",x))) # remove last remaining, empty ; -df = as.data.frame(lapply(df, function(x) gsub("; $","",x))) +df = as.data.frame(lapply(df, function(x) gsub(";$","",x))) # get maximum amount of taxa levels per ASV -max_taxa <- lengths(regmatches(df$Taxon, gregexpr("; ", df$Taxon)))+1 +max_taxa <- lengths(regmatches(df$Taxon, gregexpr(";", df$Taxon)))+1 -# Currently, all QIIME2 databases seem to have the same levels! +# Currently, all QIIME2 databases seem to have the same levels! But for compatibility, restrict number of levels to max_taxa level <- c("Kingdom","Phylum","Class","Order","Family","Genus","Species") +level <- head(level, n = max(max_taxa) ) # Calculate the classified numbers/percent of asv n_asv_tax = nrow(asv_tax) @@ -1811,7 +1813,7 @@ if ( !isFALSE(params$dada2_ref_tax_title) ) { "- citation: `", params$dada2_ref_tax_citation, "`\n\n", sep = "") } else if (!isFALSE(params$dada2_taxonomy)) { cat("Taxonomic classification by DADA2:\n\n", - "- database: unknown - user provided\n\n", sep = "") + "- database: user provided file(s)\n\n", sep = "") } if ( !isFALSE(params$sintax_ref_tax_title) ) { @@ -1821,7 +1823,7 @@ if ( !isFALSE(params$sintax_ref_tax_title) ) { "- citation: `", params$sintax_ref_tax_citation, "`\n\n", sep = "") } else if (!isFALSE(params$sintax_taxonomy)) { cat("Taxonomic classification by SINTAX:\n\n", - "- database: unknown - user provided\n\n", sep = "") + "- database: user provided file\n\n", sep = "") } if ( !isFALSE(params$kraken2_ref_tax_title) ) { @@ -1831,7 +1833,7 @@ if ( !isFALSE(params$kraken2_ref_tax_title) ) { "- citation: `", params$kraken2_ref_tax_citation, "`\n\n", sep = "") } else if (!isFALSE(params$kraken2_taxonomy)) { cat("Taxonomic classification by Kraken2:\n\n", - "- database: unknown - user provided\n\n", sep = "") + "- database: user provided files\n\n", sep = "") } if ( !isFALSE(params$qiime2_ref_tax_title) ) { @@ -1841,7 +1843,7 @@ if ( !isFALSE(params$qiime2_ref_tax_title) ) { "- citation: `", params$qiime2_ref_tax_citation, "`\n\n", sep = "") } else if (!isFALSE(params$qiime2_taxonomy)) { cat("Taxonomic classification by QIIME2:\n\n", - "- database: unknown - user provided\n\n", sep = "") + "- database: user provided file\n\n", sep = "") } ``` diff --git a/docs/usage.md b/docs/usage.md index 74e2dcfc..38c2cc23 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -36,7 +36,7 @@ The typical command for running the pipeline is as follows: ```bash nextflow run nf-core/ampliseq \ - -r 2.7.0 \ + -r 2.7.1 \ -profile singularity \ --input "samplesheet.tsv" \ --FW_primer GTGYCAGCMGCCGCGGTAA \ @@ -45,7 +45,7 @@ nextflow run nf-core/ampliseq \ --outdir "./results" ``` -In this example, `--input` is the [Samplesheet input](#samplesheet-input), other options are [Direct FASTQ input](#direct-fastq-input) and [ASV/OTU fasta input](#asvotu-fasta-input). For more details on metadata, see [Metadata](#metadata). For [Reproducibility](#reproducibility), specify the version to run using `-r` (= release, e.g. 2.7.0, please use the most recent release). See the [nf-core/ampliseq website documentation](https://nf-co.re/ampliseq/parameters) for more information about pipeline specific parameters. +In this example, `--input` is the [Samplesheet input](#samplesheet-input), other options are [Direct FASTQ input](#direct-fastq-input) and [ASV/OTU fasta input](#asvotu-fasta-input). For more details on metadata, see [Metadata](#metadata). For [Reproducibility](#reproducibility), specify the version to run using `-r` (= release, e.g. 2.7.1, please use the most recent release). See the [nf-core/ampliseq website documentation](https://nf-co.re/ampliseq/parameters) for more information about pipeline specific parameters. It is possible to not provide primer sequences (`--FW_primer` & `--RV_primer`) and skip primer trimming using `--skip_cutadapt`, but this is only for data that indeed does not contain any PCR primers in their sequences. Also, metadata (`--metadata`) isnt required, but aids downstream analysis. diff --git a/modules/local/qiime2_alphararefaction.nf b/modules/local/qiime2_alphararefaction.nf index 273749ba..23dfe602 100644 --- a/modules/local/qiime2_alphararefaction.nf +++ b/modules/local/qiime2_alphararefaction.nf @@ -3,11 +3,6 @@ process QIIME2_ALPHARAREFACTION { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(metadata) path(table) @@ -22,8 +17,14 @@ process QIIME2_ALPHARAREFACTION { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" maxdepth=\$(count_table_minmax_reads.py $stats maximum 2>&1) diff --git a/modules/local/qiime2_ancom_asv.nf b/modules/local/qiime2_ancom_asv.nf index 52c599c4..c6584f0a 100644 --- a/modules/local/qiime2_ancom_asv.nf +++ b/modules/local/qiime2_ancom_asv.nf @@ -7,11 +7,6 @@ process QIIME2_ANCOM_ASV { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(table) @@ -23,8 +18,14 @@ process QIIME2_ANCOM_ASV { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime composition add-pseudocount \\ --i-table ${table} \\ diff --git a/modules/local/qiime2_ancom_tax.nf b/modules/local/qiime2_ancom_tax.nf index 3c065bb3..1e3d320b 100644 --- a/modules/local/qiime2_ancom_tax.nf +++ b/modules/local/qiime2_ancom_tax.nf @@ -5,11 +5,6 @@ process QIIME2_ANCOM_TAX { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(table), path(taxonomy) ,val(taxlevel) @@ -21,8 +16,14 @@ process QIIME2_ANCOM_TAX { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" mkdir ancom # Sum data at the specified level diff --git a/modules/local/qiime2_barplot.nf b/modules/local/qiime2_barplot.nf index a06100d4..55596db5 100644 --- a/modules/local/qiime2_barplot.nf +++ b/modules/local/qiime2_barplot.nf @@ -3,11 +3,6 @@ process QIIME2_BARPLOT { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(metadata) path(table) @@ -22,10 +17,16 @@ process QIIME2_BARPLOT { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } suffix = setting ? "_${table.baseName}" : "" def metadata_cmd = metadata ? "--m-metadata-file ${metadata}": "" """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime taxa barplot \\ --i-table ${table} \\ diff --git a/modules/local/qiime2_classify.nf b/modules/local/qiime2_classify.nf index 96910c9a..4b89cdb2 100644 --- a/modules/local/qiime2_classify.nf +++ b/modules/local/qiime2_classify.nf @@ -4,11 +4,6 @@ process QIIME2_CLASSIFY { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(trained_classifier) path(repseq) @@ -22,8 +17,14 @@ process QIIME2_CLASSIFY { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime feature-classifier classify-sklearn \\ --i-classifier ${trained_classifier} \\ diff --git a/modules/local/qiime2_diversity_adonis.nf b/modules/local/qiime2_diversity_adonis.nf index 6b81f00e..0672aa4f 100644 --- a/modules/local/qiime2_diversity_adonis.nf +++ b/modules/local/qiime2_diversity_adonis.nf @@ -4,11 +4,6 @@ process QIIME2_DIVERSITY_ADONIS { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(core), val(formula) @@ -20,9 +15,15 @@ process QIIME2_DIVERSITY_ADONIS { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime diversity adonis \\ --p-n-jobs $task.cpus \\ diff --git a/modules/local/qiime2_diversity_alpha.nf b/modules/local/qiime2_diversity_alpha.nf index baebc03e..743ed518 100644 --- a/modules/local/qiime2_diversity_alpha.nf +++ b/modules/local/qiime2_diversity_alpha.nf @@ -4,11 +4,6 @@ process QIIME2_DIVERSITY_ALPHA { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(core) @@ -20,8 +15,14 @@ process QIIME2_DIVERSITY_ALPHA { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime diversity alpha-group-significance \\ --i-alpha-diversity ${core} \\ diff --git a/modules/local/qiime2_diversity_beta.nf b/modules/local/qiime2_diversity_beta.nf index 44df25f9..c48b6b4c 100644 --- a/modules/local/qiime2_diversity_beta.nf +++ b/modules/local/qiime2_diversity_beta.nf @@ -4,11 +4,6 @@ process QIIME2_DIVERSITY_BETA { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(core), val(category) @@ -20,8 +15,14 @@ process QIIME2_DIVERSITY_BETA { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime diversity beta-group-significance \\ --i-distance-matrix ${core} \\ diff --git a/modules/local/qiime2_diversity_betaord.nf b/modules/local/qiime2_diversity_betaord.nf index b29bd99e..658cf765 100644 --- a/modules/local/qiime2_diversity_betaord.nf +++ b/modules/local/qiime2_diversity_betaord.nf @@ -4,11 +4,6 @@ process QIIME2_DIVERSITY_BETAORD { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(core) @@ -20,8 +15,14 @@ process QIIME2_DIVERSITY_BETAORD { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" mkdir beta_diversity qiime emperor plot \\ diff --git a/modules/local/qiime2_diversity_core.nf b/modules/local/qiime2_diversity_core.nf index 22235dfb..b06fd523 100644 --- a/modules/local/qiime2_diversity_core.nf +++ b/modules/local/qiime2_diversity_core.nf @@ -3,11 +3,6 @@ process QIIME2_DIVERSITY_CORE { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(metadata) path(table) @@ -26,12 +21,18 @@ process QIIME2_DIVERSITY_CORE { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ # FIX: detecting a viable GPU on your system, but the GPU is unavailable for compute, causing UniFrac to fail. # COMMENT: might be fixed in version after QIIME2 2023.5 export UNIFRAC_USE_GPU=N - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" mindepth=\$(count_table_minmax_reads.py $stats minimum 2>&1) if [ \"\$mindepth\" -lt \"$mindepth\" ]; then mindepth=$mindepth; fi diff --git a/modules/local/qiime2_export_absolute.nf b/modules/local/qiime2_export_absolute.nf index 57c03a5e..bf9c947e 100644 --- a/modules/local/qiime2_export_absolute.nf +++ b/modules/local/qiime2_export_absolute.nf @@ -3,11 +3,6 @@ process QIIME2_EXPORT_ABSOLUTE { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(table) path(repseq) @@ -28,8 +23,14 @@ process QIIME2_EXPORT_ABSOLUTE { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" #produce raw count table in biom format "table/feature-table.biom" qiime tools export \\ diff --git a/modules/local/qiime2_export_relasv.nf b/modules/local/qiime2_export_relasv.nf index 58e05b58..19977f5e 100644 --- a/modules/local/qiime2_export_relasv.nf +++ b/modules/local/qiime2_export_relasv.nf @@ -3,11 +3,6 @@ process QIIME2_EXPORT_RELASV { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(table) @@ -19,8 +14,14 @@ process QIIME2_EXPORT_RELASV { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" #convert to relative abundances qiime feature-table relative-frequency \\ diff --git a/modules/local/qiime2_export_reltax.nf b/modules/local/qiime2_export_reltax.nf index c5b93d7c..6309e674 100644 --- a/modules/local/qiime2_export_reltax.nf +++ b/modules/local/qiime2_export_reltax.nf @@ -3,11 +3,6 @@ process QIIME2_EXPORT_RELTAX { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(table) path(taxonomy) @@ -22,8 +17,14 @@ process QIIME2_EXPORT_RELTAX { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" ##on several taxa level array=(\$(seq ${tax_agglom_min} 1 ${tax_agglom_max})) diff --git a/modules/local/qiime2_extract.nf b/modules/local/qiime2_extract.nf index 6889befb..f3a61b6e 100644 --- a/modules/local/qiime2_extract.nf +++ b/modules/local/qiime2_extract.nf @@ -5,11 +5,6 @@ process QIIME2_EXTRACT { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple val(meta), path(database) @@ -21,8 +16,14 @@ process QIIME2_EXTRACT { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" ### Import qiime tools import \\ diff --git a/modules/local/qiime2_featuretable_group.nf b/modules/local/qiime2_featuretable_group.nf index d47ee14f..0890a5f2 100644 --- a/modules/local/qiime2_featuretable_group.nf +++ b/modules/local/qiime2_featuretable_group.nf @@ -4,11 +4,6 @@ process QIIME2_FEATURETABLE_GROUP { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(table), path(metadata), val(category) @@ -20,8 +15,14 @@ process QIIME2_FEATURETABLE_GROUP { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime feature-table filter-samples \\ --i-table "${table}" \\ diff --git a/modules/local/qiime2_filtersamples.nf b/modules/local/qiime2_filtersamples.nf index 7f64e7e2..46a58529 100644 --- a/modules/local/qiime2_filtersamples.nf +++ b/modules/local/qiime2_filtersamples.nf @@ -4,11 +4,6 @@ process QIIME2_FILTERSAMPLES { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple path(metadata), path(table), val(filter) @@ -20,10 +15,16 @@ process QIIME2_FILTERSAMPLES { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: "--p-where \'${filter}<>\"\"\'" def prefix = task.ext.prefix ?: "${filter}" """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime feature-table filter-samples \\ --i-table ${table} \\ diff --git a/modules/local/qiime2_filtertaxa.nf b/modules/local/qiime2_filtertaxa.nf index 39cbb82c..404552dd 100644 --- a/modules/local/qiime2_filtertaxa.nf +++ b/modules/local/qiime2_filtertaxa.nf @@ -4,11 +4,6 @@ process QIIME2_FILTERTAXA { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(table) path(repseq) @@ -27,8 +22,14 @@ process QIIME2_FILTERTAXA { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" if ! [ \"${exclude_taxa}\" = \"none\" ]; then #filter sequences diff --git a/modules/local/qiime2_inasv.nf b/modules/local/qiime2_inasv.nf index d4848ba7..4ef660d7 100644 --- a/modules/local/qiime2_inasv.nf +++ b/modules/local/qiime2_inasv.nf @@ -4,11 +4,6 @@ process QIIME2_INASV { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(asv) @@ -20,7 +15,14 @@ process QIIME2_INASV { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" + # remove first line if needed sed '/^# Constructed from biom file/d' "$asv" > biom-table.txt diff --git a/modules/local/qiime2_inseq.nf b/modules/local/qiime2_inseq.nf index 7c7c2007..53b43970 100644 --- a/modules/local/qiime2_inseq.nf +++ b/modules/local/qiime2_inseq.nf @@ -4,11 +4,6 @@ process QIIME2_INSEQ { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(seq) @@ -20,7 +15,14 @@ process QIIME2_INSEQ { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" + qiime tools import \\ --input-path "$seq" \\ --type 'FeatureData[Sequence]' \\ diff --git a/modules/local/qiime2_intax.nf b/modules/local/qiime2_intax.nf index b9c3b039..1b1ce8b4 100644 --- a/modules/local/qiime2_intax.nf +++ b/modules/local/qiime2_intax.nf @@ -4,11 +4,6 @@ process QIIME2_INTAX { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(tax) //ASV_tax_species.tsv val(script) @@ -21,8 +16,15 @@ process QIIME2_INTAX { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } def script_cmd = script ? "$script $tax" : "cp $tax tax.tsv" """ + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" + $script_cmd qiime tools import \\ diff --git a/modules/local/qiime2_intree.nf b/modules/local/qiime2_intree.nf index a7a3ff3b..70d48331 100644 --- a/modules/local/qiime2_intree.nf +++ b/modules/local/qiime2_intree.nf @@ -4,11 +4,6 @@ process QIIME2_INTREE { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple val(meta), path(tree) @@ -20,7 +15,14 @@ process QIIME2_INTREE { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" + qiime tools import \\ --type 'Phylogeny[Rooted]' \\ --input-path $tree \\ diff --git a/modules/local/qiime2_train.nf b/modules/local/qiime2_train.nf index 4c4d69b2..ca763c50 100644 --- a/modules/local/qiime2_train.nf +++ b/modules/local/qiime2_train.nf @@ -5,11 +5,6 @@ process QIIME2_TRAIN { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple val(meta), path(qza) @@ -21,8 +16,14 @@ process QIIME2_TRAIN { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" #Train classifier qiime feature-classifier fit-classifier-naive-bayes \\ diff --git a/modules/local/qiime2_tree.nf b/modules/local/qiime2_tree.nf index 6e7a89fe..d8b9cff8 100644 --- a/modules/local/qiime2_tree.nf +++ b/modules/local/qiime2_tree.nf @@ -3,11 +3,6 @@ process QIIME2_TREE { container "qiime2/core:2023.7" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: path(repseq) @@ -20,8 +15,14 @@ process QIIME2_TREE { 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 "QIIME2 does not support Conda. Please use Docker / Singularity / Podman instead." + } """ - export XDG_CONFIG_HOME="\${PWD}/HOME" + export XDG_CONFIG_HOME="./xdgconfig" + export MPLCONFIGDIR="./mplconfigdir" + export NUMBA_CACHE_DIR="./numbacache" qiime alignment mafft \\ --i-sequences ${repseq} \\ diff --git a/nextflow.config b/nextflow.config index 7b90f100..93e19e86 100644 --- a/nextflow.config +++ b/nextflow.config @@ -329,7 +329,7 @@ manifest { description = """Amplicon sequencing analysis workflow using DADA2 and QIIME2""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.7.0' + version = '2.7.1' doi = '10.5281/zenodo.1493841' } diff --git a/nextflow_schema.json b/nextflow_schema.json index 9652e68b..1d3098da 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -76,37 +76,43 @@ "properties": { "illumina_novaseq": { "type": "boolean", - "description": "If data has binned quality scores such as Illumina NovaSeq" + "description": "If data has binned quality scores such as Illumina NovaSeq", + "fa_icon": "fas fa-align-justify" }, "pacbio": { "type": "boolean", - "description": "If data is single-ended PacBio reads instead of Illumina" + "description": "If data is single-ended PacBio reads instead of Illumina", + "fa_icon": "fas fa-align-justify" }, "iontorrent": { "type": "boolean", - "description": "If data is single-ended IonTorrent reads instead of Illumina" + "description": "If data is single-ended IonTorrent reads instead of Illumina", + "fa_icon": "fas fa-align-justify" }, "single_end": { "type": "boolean", "description": "If data is single-ended Illumina reads instead of paired-end", - "help_text": "When using a sample sheet with `--input` containing forward and reverse reads, specifying `--single_end` will only extract forward reads and treat the data as single ended instead of extracting forward and reverse reads." + "help_text": "When using a sample sheet with `--input` containing forward and reverse reads, specifying `--single_end` will only extract forward reads and treat the data as single ended instead of extracting forward and reverse reads.", + "fa_icon": "fas fa-align-left" }, "illumina_pe_its": { "type": "boolean", "description": "If analysing ITS amplicons or any other region with large length variability with Illumina paired end reads", - "help_text": "This will cause the pipeline to\n- not truncate input reads if not `--trunclenf` and `--trunclenr` are overwriting defaults\n- remove reverse complement primers from the end of reads in case the read length exceeds the amplicon length" + "help_text": "This will cause the pipeline to\n- not truncate input reads if not `--trunclenf` and `--trunclenr` are overwriting defaults\n- remove reverse complement primers from the end of reads in case the read length exceeds the amplicon length", + "fa_icon": "fas fa-align-justify" }, "multiple_sequencing_runs": { "type": "boolean", - "description": "If samples were sequenced in multiple sequencing runs", - "help_text": "Expects one sub-folder per sequencing run in the folder specified by `--input` containing sequencing data of the specific run.\nSample identifiers are taken from sequencing files, specifically the string before the first underscore will be the sample ID. Sample IDs across all sequencing runs (all sequencing files) have to be unique. If this is not the case, please use a sample sheet as input instead.\n\nExample for input data organization:\n\n```bash\ndata\n |-run1\n | |-sample1_1_L001_R1_001.fastq.gz\n | |-sample1_1_L001_R2_001.fastq.gz\n | |-sample2_1_L001_R1_001.fastq.gz\n | |-sample2_1_L001_R2_001.fastq.gz\n |\n |-run2\n |-sample3_1_L001_R1_001.fastq.gz\n |-sample3_1_L001_R2_001.fastq.gz\n |-sample4_1_L001_R1_001.fastq.gz\n |-sample4_1_L001_R2_001.fastq.gz\n```\n\nExample command to analyze this data in one pipeline run:\n\n```bash\nnextflow run nf-core/ampliseq \\\n -profile singularity \\\n --input \"data\" \\\n --FW_primer \"GTGYCAGCMGCCGCGGTAA\" \\\n --RV_primer \"GGACTACNVGGGTWTCTAAT\" \\\n --metadata \"data/Metadata.tsv\" \\\n --multiple_sequencing_runs\n```", + "description": "If using `--input_folder`: samples were sequenced in multiple sequencing runs", + "help_text": "Expects one sub-folder per sequencing run in the folder specified by `--input_folder` containing sequencing data of the specific run.\nSample identifiers are taken from sequencing files, specifically the string before the first underscore will be the sample ID. Sample IDs across all sequencing runs (all sequencing files) have to be unique. If this is not the case, please use a sample sheet as input instead.\n\nExample for input data organization:\n\n```bash\ndata\n |-run1\n | |-sample1_1_L001_R1_001.fastq.gz\n | |-sample1_1_L001_R2_001.fastq.gz\n | |-sample2_1_L001_R1_001.fastq.gz\n | |-sample2_1_L001_R2_001.fastq.gz\n |\n |-run2\n |-sample3_1_L001_R1_001.fastq.gz\n |-sample3_1_L001_R2_001.fastq.gz\n |-sample4_1_L001_R1_001.fastq.gz\n |-sample4_1_L001_R2_001.fastq.gz\n```\n\nExample command to analyze this data in one pipeline run:\n\n```bash\nnextflow run nf-core/ampliseq \\\n -profile singularity \\\n --input_folder \"data\" \\\n --FW_primer \"GTGYCAGCMGCCGCGGTAA\" \\\n --RV_primer \"GGACTACNVGGGTWTCTAAT\" \\\n --metadata \"data/Metadata.tsv\" \\\n --multiple_sequencing_runs\n```", "fa_icon": "fas fa-running" }, "extension": { "type": "string", "default": "/*_R{1,2}_001.fastq.gz", - "description": "Naming of sequencing files", - "help_text": "Indicates the naming of sequencing files (default: `\"/*_R{1,2}_001.fastq.gz\"`).\n\nPlease note:\n\n1. The prepended slash (`/`) is required\n2. The star (`*`) is the required wildcard for sample names\n3. The curly brackets (`{}`) enclose the orientation for paired end reads, separated by a comma (`,`).\n4. The pattern must be enclosed in quotes\n\nFor example for one sample (name: `1`) with forward (file: `1_a.fastq.gz`) and reverse (file: `1_b.fastq.gz`) reads in folder `data`:\n\n```bash\n--input \"data\" --extension \"/*_{a,b}.fastq.gz\"\n```" + "description": "If using `--input_folder`: naming of sequencing files", + "help_text": "Indicates the naming of sequencing files (default: `\"/*_R{1,2}_001.fastq.gz\"`).\n\nPlease note:\n\n1. The prepended slash (`/`) is required\n2. The star (`*`) is the required wildcard for sample names\n3. The curly brackets (`{}`) enclose the orientation for paired end reads, separated by a comma (`,`).\n4. The pattern must be enclosed in quotes\n\nFor example for one sample (name: `1`) with forward (file: `1_a.fastq.gz`) and reverse (file: `1_b.fastq.gz`) reads in folder `data`:\n\n```bash\n--input_folder \"data\" --extension \"/*_{a,b}.fastq.gz\"\n```", + "fa_icon": "fab fa-amilia" }, "min_read_counts": { "type": "integer", @@ -118,14 +124,15 @@ "ignore_empty_input_files": { "type": "boolean", "description": "Ignore input files with too few reads.", - "help_text": "Ignore input files with less reads than specified by `--min_read_counts` and continue the pipeline without those samples." + "help_text": "Ignore input files with less reads than specified by `--min_read_counts` and continue the pipeline without those samples.", + "fa_icon": "fas fa-arrow-right" } - } + }, + "fa_icon": "fas fa-align-justify" }, "primer_removal": { "title": "Primer removal", "type": "object", - "description": "", "default": "", "properties": { "retain_untrimmed": { @@ -137,12 +144,14 @@ "cutadapt_min_overlap": { "type": "integer", "default": 3, - "description": "Sets the minimum overlap for valid matches of primer sequences with reads for cutadapt (-O)." + "description": "Sets the minimum overlap for valid matches of primer sequences with reads for cutadapt (-O).", + "fa_icon": "fas fa-align-left" }, "cutadapt_max_error_rate": { "type": "number", "default": 0.1, - "description": "Sets the maximum error rate for valid matches of primer sequences with reads for cutadapt (-e)." + "description": "Sets the maximum error rate for valid matches of primer sequences with reads for cutadapt (-e).", + "fa_icon": "fas fa-exclamation-circle" }, "double_primer": { "type": "boolean", @@ -153,9 +162,11 @@ "ignore_failed_trimming": { "type": "boolean", "description": "Ignore files with too few reads after trimming.", - "help_text": "Ignore files with less reads than specified by `--min_read_counts` after trimming and continue the pipeline without those samples." + "help_text": "Ignore files with less reads than specified by `--min_read_counts` after trimming and continue the pipeline without those samples.", + "fa_icon": "fas fa-arrow-right" } - } + }, + "fa_icon": "fas fa-align-left" }, "read_trimming_and_quality_filtering": { "title": "Read trimming and quality filtering", @@ -188,7 +199,8 @@ "description": "Assures that values chosen with --trunc_qmin will retain a fraction of reads.", "help_text": "Value can range from 0 to 1. 0 means no reads need to be retained and 1 means all reads need to be retained. The minimum lengths of --trunc_qmin and --trunc_rmin are chosen as DADA2 cutoffs.", "minimum": 0, - "maximum": 1 + "maximum": 1, + "fa_icon": "fas fa-greater-than-equal" }, "max_ee": { "type": "integer", @@ -213,14 +225,15 @@ "ignore_failed_filtering": { "type": "boolean", "description": "Ignore files with too few reads after quality filtering.", - "help_text": "Ignore files with fewer reads than specified by `--min_read_counts` after trimming and continue the pipeline without those samples. Please review all quality trimming and filtering options before using this parameter. For example, one sample with shorter sequences than other samples might loose all sequences due to minimum length requirements by read truncation (see --trunclenf)." + "help_text": "Ignore files with fewer reads than specified by `--min_read_counts` after trimming and continue the pipeline without those samples. Please review all quality trimming and filtering options before using this parameter. For example, one sample with shorter sequences than other samples might loose all sequences due to minimum length requirements by read truncation (see --trunclenf).", + "fa_icon": "fas fa-arrow-right" } - } + }, + "fa_icon": "fas fa-ban" }, "amplicon_sequence_variants_asv_calculation": { "title": "Amplicon Sequence Variants (ASV) calculation", "type": "object", - "description": "", "default": "", "properties": { "sample_inference": { @@ -235,12 +248,85 @@ "description": "Not recommended: When paired end reads are not sufficiently overlapping for merging.", "help_text": "This parameters specifies that paired-end reads are not merged after denoising but concatenated (separated by 10 N's). This is of advantage when an amplicon was sequenced that is too long for merging (i.e. bad experimental design). This is an alternative to only analyzing the forward or reverse read in case of non-overlapping paired-end sequencing data.\n\n**This parameter is not recommended! Only if all other options fail.**" } - } + }, + "fa_icon": "fas fa-braille" + }, + "asv_post_processing": { + "title": "ASV post processing", + "type": "object", + "default": "", + "properties": { + "vsearch_cluster": { + "type": "boolean", + "description": "Post-cluster ASVs with VSEARCH", + "help_text": "ASVs will be clustered with VSEARCH using the id value found in `--vsearch_cluster_id`." + }, + "vsearch_cluster_id": { + "type": "number", + "default": 0.97, + "minimum": 0, + "maximum": 1, + "description": "Pairwise Identity value used when post-clustering ASVs if `--vsearch_cluster` option is used (default: 0.97).", + "help_text": "Lowering or increasing this value can change the number ASVs left over after clustering." + }, + "filter_ssu": { + "type": "string", + "description": "Enable SSU filtering. Comma separated list of kingdoms (domains) in Barrnap, a combination (or one) of \"bac\", \"arc\", \"mito\", and \"euk\". ASVs that have their lowest evalue in that kingdoms are kept.", + "enum": [ + "bac,arc,mito,euk", + "bac", + "arc", + "mito", + "euk", + "bac,arc", + "bac,mito", + "bac,euk", + "arc,mito", + "arc,euk", + "mito,euk", + "bac,arc,mito", + "bac,mito,euk", + "arc,mito,euk" + ] + }, + "min_len_asv": { + "type": "integer", + "description": "Minimal ASV length", + "help_text": "Remove ASV that are below the minimum length threshold (default: filter is disabled, otherwise 1). Increasing the threshold might reduce false positive ASVs (e.g. PCR off-targets)." + }, + "max_len_asv": { + "type": "integer", + "description": "Maximum ASV length", + "help_text": "Remove ASV that are above the maximum length threshold (default: filter is disabled, otherwise 1000000). Lowering the threshold might reduce false positive ASVs (e.g. PCR off-targets)." + }, + "filter_codons": { + "type": "boolean", + "description": "Filter ASVs based on codon usage", + "help_text": "ASVs will be filtered to contain no stop codon in their coding sequence and that their length is a multiple of 3." + }, + "orf_start": { + "type": "integer", + "default": 1, + "description": "Starting position of codon tripletts", + "help_text": "By default, when `--filter_codons` is set, the codons start from the first position of the ASV sequences. The start of the codons can be changed to any position." + }, + "orf_end": { + "type": "integer", + "description": "Ending position of codon tripletts", + "help_text": "By default, when `--filter_codons` is set, the codons are checked until the end of the ASV sequences. If you would like to change this setting, you can specify until which position of the ASV sequences the codon triplets are checked.\n\nPlease note that the length of the ASV from the beginning or from the `--orf_start` until this position must be a multiple of 3." + }, + "stop_codons": { + "type": "string", + "default": "TAA,TAG", + "description": "Define stop codons", + "help_text": "By default, when `--filter_codons` is set, the codons `TAA,TAG` are set as stop codons. Here you can specify any comma-separated list of codons to be used as stop codons, e.g. `--stop_codons \"TAA,TAG,TGA\"`" + } + }, + "fa_icon": "fas fa-filter" }, "taxonomic_database": { "title": "Taxonomic database", "type": "object", - "description": "", "default": "", "properties": { "dada_ref_taxonomy": { @@ -379,7 +465,7 @@ }, "kraken2_confidence": { "type": "number", - "default": 0, + "default": 0.0, "help_text": "Increasing the threshold will require more k-mers to match at a taxonomic levels and reduce the taxonomic levels shown until the threshold is met.", "description": "Confidence score threshold for taxonomic classification.", "minimum": 0, @@ -425,74 +511,9 @@ "asv_filtering": { "title": "ASV filtering", "type": "object", - "description": "", "default": "", + "fa_icon": "fas fa-filter", "properties": { - "vsearch_cluster": { - "type": "boolean", - "description": "Post-cluster ASVs with VSEARCH", - "help_text": "ASVs will be clustered with VSEARCH using the id value found in `--vsearch_cluster_id`." - }, - "vsearch_cluster_id": { - "type": "number", - "default": 0.97, - "minimum": 0.0, - "maximum": 1.0, - "description": "Pairwise Identity value used when post-clustering ASVs if `--vsearch_cluster` option is used (default: 0.97).", - "help_text": "Lowering or increasing this value can change the number ASVs left over after clustering." - }, - "filter_ssu": { - "type": "string", - "description": "Enable SSU filtering. Comma separated list of kingdoms (domains) in Barrnap, a combination (or one) of \"bac\", \"arc\", \"mito\", and \"euk\". ASVs that have their lowest evalue in that kingdoms are kept.", - "enum": [ - "bac,arc,mito,euk", - "bac", - "arc", - "mito", - "euk", - "bac,arc", - "bac,mito", - "bac,euk", - "arc,mito", - "arc,euk", - "mito,euk", - "bac,arc,mito", - "bac,mito,euk", - "arc,mito,euk" - ] - }, - "min_len_asv": { - "type": "integer", - "description": "Minimal ASV length", - "help_text": "Remove ASV that are below the minimum length threshold (default: filter is disabled, otherwise 1). Increasing the threshold might reduce false positive ASVs (e.g. PCR off-targets)." - }, - "max_len_asv": { - "type": "integer", - "description": "Maximum ASV length", - "help_text": "Remove ASV that are above the maximum length threshold (default: filter is disabled, otherwise 1000000). Lowering the threshold might reduce false positive ASVs (e.g. PCR off-targets)." - }, - "filter_codons": { - "type": "boolean", - "description": "Filter ASVs based on codon usage", - "help_text": "ASVs will be filtered to contain no stop codon in their coding sequence and that their length is a multiple of 3." - }, - "orf_start": { - "type": "integer", - "default": 1, - "description": "Starting position of codon tripletts", - "help_text": "By default, when `--filter_codons` is set, the codons start from the first position of the ASV sequences. The start of the codons can be changed to any position." - }, - "orf_end": { - "type": "integer", - "description": "Ending position of codon tripletts", - "help_text": "By default, when `--filter_codons` is set, the codons are checked until the end of the ASV sequences. If you would like to change this setting, you can specify until which position of the ASV sequences the codon triplets are checked.\n\nPlease note that the length of the ASV from the beginning or from the `--orf_start` until this position must be a multiple of 3." - }, - "stop_codons": { - "type": "string", - "default": "TAA,TAG", - "description": "Define stop codons", - "help_text": "By default, when `--filter_codons` is set, the codons `TAA,TAG` are set as stop codons. Here you can specify any comma-separated list of codons to be used as stop codons, e.g. `--stop_codons \"TAA,TAG,TGA\"`" - }, "exclude_taxa": { "type": "string", "default": "mitochondria,chloroplast", @@ -511,15 +532,14 @@ "description": "Prevalence filtering", "help_text": "Filtering low prevalent features from the feature table, e.g. keeping only features that are present in at least two samples can be achived by choosing a value of 2 (default: 1, meaning filter is disabled). Typically only used when having replicates for all samples.\n\nFor example to retain features that are present in at least two sample:\n\n```bash\n--min_samples 2\n```\n\nPlease note this is independent of abundance." } - }, - "fa_icon": "fas fa-filter" + } }, "downstream_analysis": { "title": "Downstream analysis", "type": "object", "description": "", "default": "", - "fa_icon": "fas fa-filter", + "fa_icon": "fas fa-bacteria", "properties": { "metadata_category": { "type": "string", @@ -600,10 +620,10 @@ }, "report_abstract": { "type": "string", - "default": null, "description": "Path to Markdown file (md) that replaces the 'Abstract' section" } - } + }, + "fa_icon": "fas fa-book-open" }, "skipping_specific_steps": { "title": "Skipping specific steps", @@ -671,7 +691,8 @@ "type": "boolean", "description": "Skip Markdown summary report" } - } + }, + "fa_icon": "fas fa-hand-paper" }, "generic_options": { "title": "Generic options", @@ -892,6 +913,9 @@ { "$ref": "#/definitions/amplicon_sequence_variants_asv_calculation" }, + { + "$ref": "#/definitions/asv_post_processing" + }, { "$ref": "#/definitions/taxonomic_database" }, diff --git a/subworkflows/local/dada2_taxonomy_wf.nf b/subworkflows/local/dada2_taxonomy_wf.nf index 9673b45e..9aa64145 100644 --- a/subworkflows/local/dada2_taxonomy_wf.nf +++ b/subworkflows/local/dada2_taxonomy_wf.nf @@ -83,7 +83,7 @@ workflow DADA2_TAXONOMY_WF { //set file name prefix for SH assignments if (!params.skip_dada_addspecies) { ASV_SH_name = "ASV_tax_species_SH" - } else { + } else { ASV_SH_name = "ASV_tax_SH" } //find SHs diff --git a/tests/pipeline/doubleprimers.nf.test.snap b/tests/pipeline/doubleprimers.nf.test.snap index 7c59fc97..26ffdc7a 100644 --- a/tests/pipeline/doubleprimers.nf.test.snap +++ b/tests/pipeline/doubleprimers.nf.test.snap @@ -13,7 +13,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, KRAKEN2_KRAKEN2={kraken2=2.1.2, pigz=2.6}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, KRAKEN2_KRAKEN2={kraken2=2.1.2, pigz=2.6}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-07-27T13:49:03+0000" }, diff --git a/tests/pipeline/fasta.nf.test.snap b/tests/pipeline/fasta.nf.test.snap index b8894c92..bde435d9 100644 --- a/tests/pipeline/fasta.nf.test.snap +++ b/tests/pipeline/fasta.nf.test.snap @@ -7,7 +7,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FILTER_CODONS={pandas=1.1.5, python=3.9.1}, FILTER_LEN_ASV={Biostrings=2.58.0, R=4.0.3}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FILTER_CODONS={pandas=1.1.5, python=3.9.1}, FILTER_LEN_ASV={Biostrings=2.58.0, R=4.0.3}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-05-28T21:06:17+0000" }, diff --git a/tests/pipeline/iontorrent.nf.test.snap b/tests/pipeline/iontorrent.nf.test.snap index 6d36ce3b..70bdf615 100644 --- a/tests/pipeline/iontorrent.nf.test.snap +++ b/tests/pipeline/iontorrent.nf.test.snap @@ -13,7 +13,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-06-20T01:42:35+0000" }, diff --git a/tests/pipeline/multi.nf.test.snap b/tests/pipeline/multi.nf.test.snap index 98fae3c6..10a5f78e 100644 --- a/tests/pipeline/multi.nf.test.snap +++ b/tests/pipeline/multi.nf.test.snap @@ -14,7 +14,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-05-28T21:15:03+0000" }, diff --git a/tests/pipeline/novaseq.nf.test.snap b/tests/pipeline/novaseq.nf.test.snap index 8b56978a..89bf199b 100644 --- a/tests/pipeline/novaseq.nf.test.snap +++ b/tests/pipeline/novaseq.nf.test.snap @@ -7,7 +7,7 @@ }, "software_versions": { "content": [ - "{CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_CODONS={pandas=1.1.5, python=3.9.1}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_CODONS={pandas=1.1.5, python=3.9.1}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-06-20T00:10:02+0000" }, diff --git a/tests/pipeline/pacbio_its.nf.test.snap b/tests/pipeline/pacbio_its.nf.test.snap index f26be552..0adfdad8 100644 --- a/tests/pipeline/pacbio_its.nf.test.snap +++ b/tests/pipeline/pacbio_its.nf.test.snap @@ -35,7 +35,7 @@ }, "software_versions": { "content": [ - "{ASSIGNSH={pandas=1.1.5, python=3.9.1}, BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FORMAT_TAXRESULTS_STD={pandas=1.1.5, python=3.9.1}, ITSX_CUTASV={ITSx=1.1.3}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, VSEARCH_USEARCHGLOBAL={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{ASSIGNSH={pandas=1.1.5, python=3.9.1}, BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FORMAT_TAXRESULTS_STD={pandas=1.1.5, python=3.9.1}, ITSX_CUTASV={ITSx=1.1.3}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, VSEARCH_USEARCHGLOBAL={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-06-20T02:07:02+0000" }, diff --git a/tests/pipeline/pplace.nf.test.snap b/tests/pipeline/pplace.nf.test.snap index e16b3e86..abd94f98 100644 --- a/tests/pipeline/pplace.nf.test.snap +++ b/tests/pipeline/pplace.nf.test.snap @@ -8,7 +8,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, EPANG_PLACE={epang=0.3.8}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, GAPPA_ASSIGN={gappa=0.8.0}, GAPPA_GRAFT={gappa=0.8.0}, GAPPA_HEATTREE={gappa=0.8.0}, HMMER_AFAFORMATQUERY={hmmer/easel=0.48}, HMMER_AFAFORMATREF={hmmer/easel=0.48}, HMMER_HMMALIGNQUERY={hmmer=3.3.2}, HMMER_HMMALIGNREF={hmmer=3.3.2}, HMMER_HMMBUILD={hmmer=3.3.2}, HMMER_MASKQUERY={hmmer/easel=0.48}, HMMER_MASKREF={hmmer/easel=0.48}, HMMER_UNALIGNREF={hmmer/easel=0.48}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, EPANG_PLACE={epang=0.3.8}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, GAPPA_ASSIGN={gappa=0.8.0}, GAPPA_GRAFT={gappa=0.8.0}, GAPPA_HEATTREE={gappa=0.8.0}, HMMER_AFAFORMATQUERY={hmmer/easel=0.48}, HMMER_AFAFORMATREF={hmmer/easel=0.48}, HMMER_HMMALIGNQUERY={hmmer=3.3.2}, HMMER_HMMALIGNREF={hmmer=3.3.2}, HMMER_HMMBUILD={hmmer=3.3.2}, HMMER_MASKQUERY={hmmer/easel=0.48}, HMMER_MASKREF={hmmer/easel=0.48}, HMMER_UNALIGNREF={hmmer/easel=0.48}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-06-20T17:24:03+0000" }, diff --git a/tests/pipeline/reftaxcustom.nf.test.snap b/tests/pipeline/reftaxcustom.nf.test.snap index 7ca4c208..87538971 100644 --- a/tests/pipeline/reftaxcustom.nf.test.snap +++ b/tests/pipeline/reftaxcustom.nf.test.snap @@ -13,7 +13,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, KRAKEN2_KRAKEN2={kraken2=2.1.2, pigz=2.6}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, KRAKEN2_KRAKEN2={kraken2=2.1.2, pigz=2.6}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-05-28T21:18:54+0000" }, diff --git a/tests/pipeline/single.nf.test.snap b/tests/pipeline/single.nf.test.snap index 77572d5d..751d9a83 100644 --- a/tests/pipeline/single.nf.test.snap +++ b/tests/pipeline/single.nf.test.snap @@ -13,7 +13,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, RENAME_RAW_DATA_FILES={sed=4.7}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-05-28T20:35:33+0000" }, diff --git a/tests/pipeline/sintax.nf.test.snap b/tests/pipeline/sintax.nf.test.snap index 1c19892e..aae3466c 100644 --- a/tests/pipeline/sintax.nf.test.snap +++ b/tests/pipeline/sintax.nf.test.snap @@ -16,7 +16,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, ITSX_CUTASV={ITSx=1.1.3}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, VSEARCH_SINTAX={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, ITSX_CUTASV={ITSx=1.1.3}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, VSEARCH_SINTAX={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-06-20T16:40:18+0000" }, diff --git a/tests/pipeline/test.nf.test.snap b/tests/pipeline/test.nf.test.snap index d3b9e8ac..8fc51fa0 100644 --- a/tests/pipeline/test.nf.test.snap +++ b/tests/pipeline/test.nf.test.snap @@ -22,7 +22,7 @@ }, "software_versions": { "content": [ - "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_CLUSTERS={pandas=1.1.5, python=3.9.1}, FILTER_LEN_ASV={Biostrings=2.58.0, R=4.0.3}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, VSEARCH_CLUSTER={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.0}}" + "{BARRNAP={barrnap=0.9}, CUSTOM_DUMPSOFTWAREVERSIONS={python=3.11.4, yaml=6.0}, CUTADAPT_BASIC={cutadapt=3.4}, DADA2_DENOISING={R=4.3.1, dada2=1.28.0}, DADA2_FILTNTRIM={R=4.3.1, dada2=1.28.0}, DADA2_QUALITY1={R=4.3.1, ShortRead=1.58.0, dada2=1.28.0}, DADA2_TAXONOMY={R=4.3.1, dada2=1.28.0}, FASTQC={fastqc=0.12.1}, FILTER_CLUSTERS={pandas=1.1.5, python=3.9.1}, FILTER_LEN_ASV={Biostrings=2.58.0, R=4.0.3}, FILTER_STATS={pandas=1.1.5, python=3.9.1}, PHYLOSEQ={R=4.3.0, phyloseq=1.44.0}, QIIME2_INSEQ={qiime2=2023.7.0}, RENAME_RAW_DATA_FILES={sed=4.7}, SBDIEXPORT={R=3.6.3}, TRUNCLEN={pandas=1.1.5, python=3.9.1}, VSEARCH_CLUSTER={vsearch=2.21.1}, Workflow={nf-core/ampliseq=2.7.1}}" ], "timestamp": "2023-05-28T20:55:32+0000" },