Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added QIIME2 custom reference database support. #667

Merged
merged 65 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
9ac22ba
Merge pull request #601 from nf-core/dev
d4straub Jun 26, 2023
3b252d2
Merge pull request #604 from nf-core/dev
d4straub Jun 27, 2023
4e48b71
Merge pull request #648 from nf-core/dev
d4straub Oct 19, 2023
113e90b
Merge pull request #660 from nf-core/dev
d4straub Nov 13, 2023
d86c569
Add params.qiime_ref_tax_custom in preparation of allowing custom qii…
Nov 28, 2023
439097c
Implementation of logic to handle a custom qiime2 reference database …
Nov 28, 2023
14c89b9
Some params checking logic.
Nov 28, 2023
d214ec0
Loose . lying around.
Nov 28, 2023
9346d7a
Only perform collect if going to FORMAT_TAXONOMY_QIIME.
Nov 28, 2023
ef053b1
Set into new channel when branching on ch_qiime_ref_taxonomy.£
Nov 28, 2023
a48a09f
Try to unpack the database dir into component files using a module.
Nov 28, 2023
a9971b6
Remove map wrapping the combine.
Nov 28, 2023
aac51bd
Remove unpack in favour of map and filter.
Nov 28, 2023
1b2825e
Glob results in list in all circumstances, check length instead.
Nov 28, 2023
a903fbe
Merge remote-tracking branch 'upstream/dev' into qiime2_custom_db
Nov 28, 2023
a4219a0
Update CHANGELOG.md.
Nov 28, 2023
0ccf6e6
Update error message when passing both one of --qiime_ref_taxonomy or…
Nov 29, 2023
590f415
Update CHANGELOG.md with pull request number.
Nov 29, 2023
f5d80f5
Add support for specifying two (possibly gzipped) files as --qiime_re…
Nov 29, 2023
7016682
Only support providing two files separated by a comma.
Nov 29, 2023
79cbfe8
Fix split returns a String[] and we actually need an ArrayList.
Nov 29, 2023
03881b2
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
6d767bc
Move ch_ref_database set into correct scope.
Nov 29, 2023
af1674b
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
f76b49b
Try using map to work through list of files.
Nov 29, 2023
31a310d
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
0890a0e
Can't call processes from inside maps.
Nov 29, 2023
b6d0c2a
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
7276a8d
Fix outfile definition in GZIP_DECOMPRESS.
Nov 29, 2023
a021bc5
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
f0a8715
Fix outfile definition in GZIP_DECOMPRESS.
Nov 29, 2023
cfc5179
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Nov 29, 2023
8ad82f2
Merge branch 'qiime2_custom_db' of github.com:MatthewJM96/ampliseq in…
Nov 29, 2023
56f241b
Add some comments.
Nov 29, 2023
7907df5
Add an early check that two paths are provided when providing a comma…
Nov 29, 2023
1d6ce32
Make sure downstream is aware of new means of pointing to a qiime ref…
Nov 29, 2023
913d284
Improve error message clarity for ill-formed file.
Dec 1, 2023
330bf43
Fix typo in error on --qiime_ref_paths form.
Dec 1, 2023
b8c595c
Remove unneeded collect from FORMAT_TAXONOMY_QIIME invocation.
Dec 1, 2023
3e05fe5
Improve version tracking in PREPTAX.
Dec 1, 2023
b012aeb
Add qiime_ref_tax_custom to testing in reftaxcustom nf-test.
Dec 1, 2023
c5f0188
Merge branch 'qiime2_custom_db' of https://gitlab.stfc.ac.uk/omics/op…
Dec 1, 2023
ba71667
Don't skip qiime while testing.
Dec 7, 2023
1360415
Add a skip option for just downstream qiime analysis, but still perfo…
Dec 7, 2023
8a9a0a2
Merge branch 'qiime2_custom_db' of gitlab.stfc.ac.uk:omics/open-sourc…
Dec 7, 2023
f4f5cda
Skip qiime downstream in reftaxcustom.
Dec 7, 2023
549c166
Fix path for testing tarball passed to --qiime_ref_tax_custom.
Dec 7, 2023
8516534
Add snapshot of files coming from qiime2 taxonomy.
Dec 7, 2023
745cab7
Work towards a qiime_ref_tax_custom specific test.
Dec 7, 2023
a1dfb5b
Skip dada tax.
Dec 7, 2023
51dc97e
Sequence then taxonomy file for file pair to --qiime_ref_tax_custom.
Dec 7, 2023
a33f17f
Clarify in help text of --qiime_ref_tax_custom the ordering of a file…
Dec 7, 2023
8f57fae
Update snapshots to include qiime2 in both correctly and add assertio…
Dec 7, 2023
74e05b2
Make ordering of sequence and taxonomy files deterministic in case of…
Dec 7, 2023
b65df44
Fix filtering in file pair case.
Dec 7, 2023
93e174e
Merge branch 'qiime2_custom_db' of github.com:MatthewJM96/ampliseq in…
Dec 7, 2023
45bee71
Fix version mixing in --qiime_ref_taxonomy case.
Dec 7, 2023
3c9eaf1
Update software version expectations for tests that no longer run QII…
Dec 7, 2023
07f4407
Remove assertions on dada2 tax and phyloseq files existing in test_qi…
Dec 7, 2023
1c129e5
Looks like qiime2 tax alignment is non-deterministic, just verify the…
Dec 7, 2023
2ace595
Make --skip_qiime_downstream help text clearer.
Dec 8, 2023
4464c38
Remove assertion on qiime phyloseq file no longer produced.
Dec 8, 2023
1fb5089
Merge branch 'qiime2_custom_db' of github.com:MatthewJM96/ampliseq in…
Dec 8, 2023
0287ba9
Merge branch 'dev' into qiime2_custom_db
d4straub Dec 12, 2023
6b71e4d
Fix reporting
d4straub Dec 19, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ jobs:
- "test_failed"
- "test_multi"
- "test_reftaxcustom"
- "test_qiimecustom"
- "test_doubleprimers"
- "test_iontorrent"
- "test_novaseq"
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### `Added`

[#667](https://github.com/nf-core/ampliseq/pull/667) - Added `--qiime_ref_tax_custom` to permit custom reference database for QIIME2 taxonomic classification.

### `Changed`

### `Fixed`
Expand Down
33 changes: 33 additions & 0 deletions conf/test_qiimecustom.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nextflow config file for running minimal tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Defines input files and everything required to run a fast and simple pipeline test.

Use as follows:
nextflow run nf-core/ampliseq -profile test_qiimecustom,<docker/singularity> --outdir <OUTDIR>

----------------------------------------------------------------------------------------
*/

params {
config_profile_name = 'Test custom QIIME2 reference taxonomy database profile'
config_profile_description = 'Minimal test dataset to check --qiime_ref_tax_custom'

// Limit resources so that this can run on GitHub Actions
max_cpus = 2
max_memory = '6.GB'
max_time = '6.h'

// Input data
FW_primer = "GTGYCAGCMGCCGCGGTAA"
RV_primer = "GGACTACNVGGGTWTCTAAT"
input = "https://raw.githubusercontent.com/nf-core/test-datasets/ampliseq/samplesheets/Samplesheet.tsv"

// Custom reference taxonomy
qiime_ref_tax_custom = "https://raw.githubusercontent.com/MatthewJM96/test-datasets/ampliseq/testdata/db/85_greengenes.fna.gz,https://raw.githubusercontent.com/MatthewJM96/test-datasets/ampliseq/testdata/db/85_greengenes.tax.gz"

// Skip downstream analysis with QIIME2
skip_qiime_downstream = true
skip_dada_taxonomy = true
}
3 changes: 2 additions & 1 deletion conf/test_reftaxcustom.config
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ params {
dada_assign_taxlevels = "Kingdom,Phylum,Class,Order,Family,Genus"
kraken2_ref_tax_custom = "https://genome-idx.s3.amazonaws.com/kraken/16S_Greengenes13.5_20200326.tgz"
kraken2_assign_taxlevels = "D,P,C,O"
qiime_ref_tax_custom = "https://raw.githubusercontent.com/MatthewJM96/test-datasets/ampliseq/testdata/db/85_greengenes.tar.gz"

// Skip downstream analysis with QIIME2
skip_qiime = true
skip_qiime_downstream = true
}
8 changes: 4 additions & 4 deletions lib/WorkflowAmpliseq.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,21 @@ class WorkflowAmpliseq {
}

if (params.skip_dada_taxonomy && params.sbdiexport) {
if (!params.sintax_ref_taxonomy && (params.skip_qiime || !params.qiime_ref_taxonomy)) {
if (!params.sintax_ref_taxonomy && (params.skip_qiime || (!params.qiime_ref_taxonomy && !params.qiime_ref_tax_custom))) {
Nextflow.error("Incompatible parameters: `--sbdiexport` expects taxa annotation and therefore annotation with either DADA2, SINTAX, or QIIME2 is needed.")
}
}

if ( (!params.FW_primer || !params.RV_primer) && params.qiime_ref_taxonomy && !params.skip_qiime && !params.skip_taxonomy ) {
if ( (!params.FW_primer || !params.RV_primer) && (params.qiime_ref_taxonomy || params.qiime_ref_tax_custom) && !params.skip_qiime && !params.skip_taxonomy ) {
Nextflow.error("Incompatible parameters: `--FW_primer` and `--RV_primer` are required for cutting the QIIME2 reference database to the amplicon sequences. Please specify primers or do not use `--qiime_ref_taxonomy`.")
}

if ( (!params.FW_primer || !params.RV_primer) && params.cut_dada_ref_taxonomy && !params.skip_taxonomy ) {
Nextflow.error("Incompatible parameters: `--FW_primer` and `--RV_primer` are required for cutting the DADA2 reference database to the amplicon sequences. Please specify primers or do not use `--cut_dada_ref_taxonomy`.")
}

if (params.qiime_ref_taxonomy && params.classifier) {
Nextflow.error("Incompatible parameters: `--qiime_ref_taxonomy` will produce a classifier but `--classifier` points to a precomputed classifier, therefore, only use one of those.")
if ((params.qiime_ref_taxonomy || params.qiime_ref_tax_custom) && params.classifier) {
Nextflow.error("Incompatible parameters: `--qiime_ref_taxonomy` and `--qiime_ref_tax_custom` will produce a classifier but `--classifier` points to a precomputed classifier, therefore, only use one of those.")
}

if (params.kraken2_ref_tax_custom && !params.kraken2_assign_taxlevels ) {
Expand Down
2 changes: 1 addition & 1 deletion lib/WorkflowMain.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class WorkflowMain {
if (params.sintax_ref_taxonomy && !params.skip_taxonomy) {
sintaxreftaxonomyExistsError(params, log)
}
if (params.qiime_ref_taxonomy && !params.skip_taxonomy && !params.classifier) {
if ((params.qiime_ref_taxonomy || params.qiime_ref_tax_custom) && !params.skip_taxonomy && !params.classifier) {
qiimereftaxonomyExistsError(params, log)
}

Expand Down
32 changes: 32 additions & 0 deletions modules/local/gzip_decompress.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
process GZIP_DECOMPRESS {
tag "$file"
label 'process_single'

conda "conda-forge::sed=4.7 conda-forge::gzip=1.13"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/ubuntu:20.04' :
'nf-core/ubuntu:20.04' }"

input:
path(file)

output:
path("$outfile"), emit: ungzip
path "versions.yml", emit: versions

when:
task.ext.when == null || task.ext.when

script:
def args = task.ext.args ?: ''
outfile = task.ext.outfile ?: file.baseName.toString().replaceFirst(/\.gz$/, "")

"""
gzip $args -c -d $file > $outfile

cat <<-END_VERSIONS > versions.yml
"${task.process}":
gzip: \$(echo \$(gzip --version 2>&1) | sed 's/gzip //; s/ Copyright.*\$//')
END_VERSIONS
"""
}
3 changes: 3 additions & 0 deletions nextflow.config
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ params {
skip_dada_quality = false
skip_barrnap = false
skip_qiime = false
skip_qiime_downstream = false
skip_fastqc = false
skip_alpha_rarefaction = false
skip_abundance_tables = false
Expand All @@ -108,6 +109,7 @@ params {
cut_dada_ref_taxonomy = false
sintax_ref_taxonomy = null
qiime_ref_taxonomy = null
qiime_ref_tax_custom = null
kraken2_ref_taxonomy = null
kraken2_assign_taxlevels = null
kraken2_ref_tax_custom = null
Expand Down Expand Up @@ -272,6 +274,7 @@ profiles {
test_failed { includeConfig 'conf/test_failed.config' }
test_full { includeConfig 'conf/test_full.config' }
test_reftaxcustom { includeConfig 'conf/test_reftaxcustom.config' }
test_qiimecustom { includeConfig 'conf/test_qiimecustom.config' }
test_novaseq { includeConfig 'conf/test_novaseq.config' }
test_pplace { includeConfig 'conf/test_pplace.config' }
test_sintax { includeConfig 'conf/test_sintax.config' }
Expand Down
9 changes: 9 additions & 0 deletions nextflow_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,11 @@
"greengenes85"
]
},
"qiime_ref_tax_custom": {
d4straub marked this conversation as resolved.
Show resolved Hide resolved
"type": "string",
"help_text": "Is preferred over `--qiime_ref_taxonomy`. A comma separated pair of (possibly gzipped) filepaths (sequence, taxonomy).",
"description": "Path to files of a custom QIIME2 reference taxonomy database (files may be gzipped)"
},
"classifier": {
"type": "string",
"description": "Path to QIIME2 trained classifier file (typically *-classifier.qza)",
Expand Down Expand Up @@ -651,6 +656,10 @@
"type": "boolean",
"description": "Skip all steps that are executed by QIIME2, including QIIME2 software download, taxonomy assignment by QIIME2, barplots, relative abundance tables, diversity analysis, differential abundance testing."
},
"skip_qiime_downstream": {
"type": "boolean",
"description": "Skip steps that are executed by QIIME2 except for taxonomic classification, including barplots, relative abundance tables, diversity analysis, differential abundance testing."
MatthewJM96 marked this conversation as resolved.
Show resolved Hide resolved
},
"skip_taxonomy": {
"type": "boolean",
"description": "Skip taxonomic classification. Incompatible with `--sbdiexport`"
Expand Down
84 changes: 80 additions & 4 deletions subworkflows/local/qiime2_preptax.nf
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,91 @@
* Training of a classifier with QIIME2
*/

include { UNTAR } from '../../modules/nf-core/untar/main'
include { GZIP_DECOMPRESS } from '../../modules/local/gzip_decompress.nf'
include { FORMAT_TAXONOMY_QIIME } from '../../modules/local/format_taxonomy_qiime'
include { QIIME2_EXTRACT } from '../../modules/local/qiime2_extract'
include { QIIME2_TRAIN } from '../../modules/local/qiime2_train'

workflow QIIME2_PREPTAX {
take:
ch_qiime_ref_taxonomy //channel, list of files
val_qiime_ref_taxonomy //val
FW_primer //val
RV_primer //val

main:
FORMAT_TAXONOMY_QIIME ( ch_qiime_ref_taxonomy )
ch_qiime2_preptax_versions = Channel.empty()

if (params.qiime_ref_tax_custom) {
MatthewJM96 marked this conversation as resolved.
Show resolved Hide resolved
// Handle case where we have been provided a pair of filepaths.
if ("${params.qiime_ref_tax_custom}".contains(",")) {
ch_qiime_ref_taxonomy.flatten()
.branch {
compressed: it.isFile() && it.getName().endsWith(".gz")
decompressed: it.isFile() && ( it.getName().endsWith(".fna") || it.getName().endsWith(".tax") )
failed: true
}.set { ch_qiime_ref_tax_branched }
ch_qiime_ref_tax_branched.failed.subscribe { error "$it is neither a compressed (ends with `.gz`) or decompressed sequence (ends with `.fna`) or taxonomy file (ends with `.tax`). Please review input." }

GZIP_DECOMPRESS(ch_qiime_ref_tax_branched.compressed)
ch_qiime2_preptax_versions = ch_qiime2_preptax_versions.mix(GZIP_DECOMPRESS.out.versions)

ch_qiime_db_files = GZIP_DECOMPRESS.out.ungzip
ch_qiime_db_files = ch_qiime_db_files.mix(ch_qiime_ref_tax_branched.decompressed)

ch_ref_database_fna = ch_qiime_db_files.filter {
it.getName().endsWith(".fna")
}
ch_ref_database_tax = ch_qiime_db_files.filter {
it.getName().endsWith(".tax")
}

ch_ref_database = ch_ref_database_fna.combine(ch_ref_database_tax)
// Handle case we have been provided a single filepath (tarball or directory).
} else {
ch_qiime_ref_taxonomy.flatten()
.branch {
tar: it.isFile() && ( it.getName().endsWith(".tar.gz") || it.getName().endsWith (".tgz") )
dir: it.isDirectory()
failed: true
}.set { ch_qiime_ref_tax_branched }
ch_qiime_ref_tax_branched.failed.subscribe { error "$it is neither a directory nor a file that ends in '.tar.gz' or '.tgz'. Please review input." }

UNTAR (
ch_qiime_ref_tax_branched.tar
.map {
db ->
def meta = [:]
meta.id = val_qiime_ref_taxonomy
[ meta, db ] } )
ch_qiime2_preptax_versions = ch_qiime2_preptax_versions.mix(UNTAR.out.versions)

ch_qiime_db_dir = UNTAR.out.untar.map{ it[1] }
ch_qiime_db_dir = ch_qiime_db_dir.mix(ch_qiime_ref_tax_branched.dir)

ch_ref_database_fna = ch_qiime_db_dir.map{ dir ->
files = file(dir.resolve("*.fna"), checkIfExists: true)
} | filter {
if (it.size() > 1) log.warn "Found multiple fasta files for QIIME2 reference database."
it.size() == 1
}
ch_ref_database_tax = ch_qiime_db_dir.map{ dir ->
files = file(dir.resolve("*.tax"), checkIfExists: true)
} | filter {
if (it.size() > 1) log.warn "Found multiple tax files for QIIME2 reference database."
it.size() == 1
}

ch_ref_database = ch_ref_database_fna.combine(ch_ref_database_tax)
}
} else {
FORMAT_TAXONOMY_QIIME ( ch_qiime_ref_taxonomy )
ch_qiime2_preptax_versions = ch_qiime2_preptax_versions.mix(FORMAT_TAXONOMY_QIIME.out.versions)

ch_ref_database = FORMAT_TAXONOMY_QIIME.out.fasta.combine(FORMAT_TAXONOMY_QIIME.out.tax)
}

ch_ref_database = FORMAT_TAXONOMY_QIIME.out.fasta.combine(FORMAT_TAXONOMY_QIIME.out.tax)
ch_ref_database
.map {
db ->
Expand All @@ -24,10 +95,15 @@ workflow QIIME2_PREPTAX {
meta.RV_primer = RV_primer
[ meta, db ] }
.set { ch_ref_database }

QIIME2_EXTRACT ( ch_ref_database )
ch_qiime2_preptax_versions = ch_qiime2_preptax_versions.mix(QIIME2_EXTRACT.out.versions)

QIIME2_TRAIN ( QIIME2_EXTRACT.out.qza )
ch_qiime2_preptax_versions = ch_qiime2_preptax_versions.mix(QIIME2_TRAIN.out.versions)

emit:
classifier = QIIME2_TRAIN.out.qza
versions = QIIME2_TRAIN.out.versions
classifier = QIIME2_TRAIN.out.qza
versions = ch_qiime2_preptax_versions
}

2 changes: 1 addition & 1 deletion tests/pipeline/doubleprimers.nf.test.snap

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tests/pipeline/multi.nf.test.snap

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions tests/pipeline/qiimecustom.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
nextflow_pipeline {

name "Test Workflow main.nf"
script "main.nf"
tag "test_qiimecustom"
tag "qiime2"
tag "pipeline"

test("Custom QIIME2 Reference Taxonomy Database") {

when {
params {
outdir = "$outputDir"
}
}

then {
assertAll(
{ assert workflow.success },
{ assert snapshot(UTILS.removeNextflowVersion("$outputDir")).match("software_versions") },
{ assert snapshot(path("$outputDir/overall_summary.tsv")).match("overall_summary_tsv") },
{ assert snapshot(path("$outputDir/barrnap/rrna.arc.gff"),
path("$outputDir/barrnap/rrna.bac.gff"),
path("$outputDir/barrnap/rrna.euk.gff"),
path("$outputDir/barrnap/rrna.mito.gff")).match("barrnap") },
{ assert new File("$outputDir/barrnap/summary.tsv").exists() },
{ assert snapshot(path("$outputDir/cutadapt/cutadapt_summary.tsv")).match("cutadapt") },
{ assert snapshot(path("$outputDir/dada2/ASV_seqs.fasta"),
path("$outputDir/dada2/ASV_table.tsv"),
path("$outputDir/dada2/DADA2_stats.tsv"),
path("$outputDir/dada2/DADA2_table.rds"),
path("$outputDir/dada2/DADA2_table.tsv")).match("dada2") },
{ assert new File("$outputDir/fastqc/sampleID_1_1_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_1_2_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_1a_1_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_1a_2_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_2_1_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_2_2_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_2a_1_fastqc.html").exists() },
{ assert new File("$outputDir/fastqc/sampleID_2a_2_fastqc.html").exists() },
{ assert snapshot(path("$outputDir/input/Samplesheet.tsv")).match("input") },
{ assert new File("$outputDir/qiime2/taxonomy/taxonomy.tsv").exists() },
{ assert new File("$outputDir/qiime2/taxonomy/GTGYCAGCMGCCGCGGTAA-GGACTACNVGGGTWTCTAAT-classifier.qza").exists() },
{ assert snapshot(path("$outputDir/multiqc/multiqc_data/multiqc_fastqc.txt"),
path("$outputDir/multiqc/multiqc_data/multiqc_general_stats.txt"),
path("$outputDir/multiqc/multiqc_data/multiqc_cutadapt.txt")).match("multiqc") },
{ assert new File("$outputDir/summary_report/summary_report.html").exists() }
)
}
}
}
Loading
Loading