From cb5d998d6b0da26ab37689d56586920e1add603c Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 15 Nov 2024 16:34:32 +0000 Subject: [PATCH 01/65] Updates for modules, README and config --- CHANGELOG.md | 79 +++++++++++++++++++++++++++++++++++++++++++++---- README.md | 4 +-- nextflow.config | 2 +- 3 files changed, 75 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7be3b8c6..ba3ebafb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,75 @@ 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). +## [1.2.0] - Ancient Destiny - [2024-11-15] + +Our 3rd release for sanger-tol/treeval. + +### Enhancements & Fixes + +- Togglable subworkflows +- Adds a JBrowse Only workflow (this will lead to an update to the FULL workflow which can now call JBROWSE_ONLY and RAPID). +- Updates to containers (local modules) to remove Anaconda dependencies following policy changes. +- Updates to modules to remove Anaconda dependencies following policy changes +- CONDA warnings for modules which cannot use CONDA. +- Removable of a liberal use of spaces. +- reformat_intersect was previously not outputing version data. +- Adding arch specification to Pretext GitHub actions runner. Hopefully this will stop the spurious errors we see on there. +- Addition of steps into schema. + +### Parameters + +| Old Parameter | New Parameter | +| ------------- | ------------- | +| - | --steps | + +### Software dependencies + +Note, since the pipeline is using Nextflow DSL2, each process will be run with its own Biocontainer. This means that on occasion it is entirely possible for the pipeline to be using different versions of the same tool. However, the overall software dependency changes compared to the last release have been listed below for reference. + +| Module | Old Version | New Versions | +| -------------------------------------- | ------------ | ---------------- | +| bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | +| bedtools | 2.31.1 | | +| busco | 5.5.0 | | +| bwa-mem2 | 2.2.1 | | +| cat | 2.3.4 | | +| chunk_fasta ( pyfasta ) | 0.5.2-1 | | +| cooler | 0.9.2 | | +| cram_filter_align_bwamem2_fixmate_sort | - | | +| ^ ( samtools + bwamem2 ) ^ | 1.17 + 2.2.1 | | +| coreutils | 9.1 | | +| fastk | 1.0.1 | | +| gcc | 10.4.0 | | +| find_telomere_windows ( java-jdk ) | 8.0.112 | | +| generate_cram_csv ( samtools ) | 1.17 | | +| gnu-sort | 8.25 | | +| juicer_tools_pre ( java-jdk ) | 8.0.112 | | +| perl | 5.26.2 | | +| merquryfk | 1.0.1 | | +| minimap2 + samtools | 2.24 + 1.14 | | +| miniprot | 0.11--he4a0461_2 | | +| mummer | 3.23 | | +| paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | +| pretextmap + samtools | 0.0.2 + 1.17 | | +| python | 3.9 | - | +| - pandas | 1.5.2 | - | +| samtools | 1.18 | 1.21 | +| selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | +| seqtk | 1.4 | | +| tabix | 1.11 | | +| ucsc | 377 | | +| windowmasker (blast) | 2.14.0 | | + +## [1.1.1] - Ancient Aurora (H1) - [2024-04-26] + +### Enhancements & Fixes + +- Generate CRAM CSV fix to allow for multi-readgroup cram files +- Removing KMER_READCOV +- tmp directory was being used +- Output file adjustment (names and location) + ## [1.1.0] - Ancient Aurora - [2024-04-26] The second release for sanger-tol, created with the [nf-core](https://nf-co.re/) template. @@ -42,18 +111,16 @@ This builds on the initial release by adding subworkflows which generate kmer ba #### Hot Fix 1 -- Adding support for multi-library cram input. - -#### Hot Fix 2 - -- Adding support to select subworkflows to use in pipeline run. +- Generate CRAM CSV fix to allow for multi-readgroup cram files +- Removing KMER_READCOV +- tmp directory was being used +- Output file adjustment (names and location) ### Parameters | Old Parameter | New Parameter | | ------------- | ------------- | | - | --juicer | -| - | --steps | ### Software dependencies diff --git a/README.md b/README.md index ffaa43bc..ada31f21 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## Introduction -**sanger-tol/treeval [1.1.0 - Ancient Aurora]** is a bioinformatics best-practice analysis pipeline for the generation of data supplemental to the curation of reference quality genomes. This pipeline has been written to generate flat files compatible with [JBrowse2](https://jbrowse.org/jb2/) as well as HiC maps for use in Juicebox, PretextView and HiGlass. +**sanger-tol/treeval [1.2.0 - Ancient Destiny-]** is a bioinformatics best-practice analysis pipeline for the generation of data supplemental to the curation of reference quality genomes. This pipeline has been written to generate flat files compatible with [JBrowse2](https://jbrowse.org/jb2/) as well as HiC maps for use in Juicebox, PretextView and HiGlass. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! @@ -80,8 +80,6 @@ If you would like to contribute to this pipeline, please see the [contributing g ## Citations - - If you use sanger-tol/treeval for your analysis, please cite it using the following doi: [10.5281/zenodo.10047653](https://doi.org/10.5281/zenodo.10047653). ### Tools diff --git a/nextflow.config b/nextflow.config index b9439082..0b8e5d63 100755 --- a/nextflow.config +++ b/nextflow.config @@ -196,7 +196,7 @@ manifest { description = """A pipeline to generate supplemental data for genome curation""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '1.1.1' + version = '1.2.0' doi = '10.5281/zenodo.10047653' } From 8aad21a1ebcf8f845e8964e56e4d8ba5665bc05e Mon Sep 17 00:00:00 2001 From: William Eagles Date: Mon, 18 Nov 2024 16:53:46 +0000 Subject: [PATCH 02/65] Add ktab to output --- conf/modules.config | 8 ++++++++ modules/nf-core/fastk/fastk/main.nf | 2 +- modules/nf-core/merquryfk/merquryfk/main.nf | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) mode change 100644 => 100755 modules/nf-core/fastk/fastk/main.nf mode change 100644 => 100755 modules/nf-core/merquryfk/merquryfk/main.nf diff --git a/conf/modules.config b/conf/modules.config index dafd5469..26d712b1 100755 --- a/conf/modules.config +++ b/conf/modules.config @@ -57,6 +57,14 @@ process { ] } + withName: FASTK_FASTK { + publishDir = [ + path: { "${params.outdir}/hic_files" }, + mode: params.publish_dir_mode, + pattern: "*.ktab*" + ] + } + // // MODULE CONFIGS // diff --git a/modules/nf-core/fastk/fastk/main.nf b/modules/nf-core/fastk/fastk/main.nf old mode 100644 new mode 100755 index 94d5f592..67c2dc7a --- a/modules/nf-core/fastk/fastk/main.nf +++ b/modules/nf-core/fastk/fastk/main.nf @@ -3,7 +3,7 @@ process FASTK_FASTK { label 'process_medium' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - container 'quay.io/sanger-tol/fastk:1.0.1-c1' + container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: tuple val(meta), path(reads) diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf old mode 100644 new mode 100755 index 378a9911..221a1aa2 --- a/modules/nf-core/merquryfk/merquryfk/main.nf +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -3,7 +3,7 @@ process MERQURYFK_MERQURYFK { label 'process_medium' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - container 'quay.io/sanger-tol/fastk:1.0.1-c1' + container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly), path(haplotigs) From ca2afc43e57fa5214dfab158ec26b3f43646734c Mon Sep 17 00:00:00 2001 From: William Eagles Date: Tue, 19 Nov 2024 09:27:44 +0000 Subject: [PATCH 03/65] Update documentation --- docs/output.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/output.md b/docs/output.md index 95c52f66..db8e6dba 100755 --- a/docs/output.md +++ b/docs/output.md @@ -213,6 +213,7 @@ This subworkflow performs a k-mer count using [FASTK_FASTK](https://nf-co.re/mod - `hic_files/` - `*.ref.spectra-cn.ln.png`: .png file of copy number k-mer spectra. + - `*.ktab*`: K-mer table files. From 79bd32f0e95dbb741f865cfbd77943ff98937f2b Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 11:58:10 +0000 Subject: [PATCH 04/65] Updating SAMTOOLS --- modules.json | 12 +- .../nf-core/samtools/faidx/environment.yml | 8 +- modules/nf-core/samtools/faidx/main.nf | 4 +- modules/nf-core/samtools/faidx/meta.yml | 83 +-- .../nf-core/samtools/index/environment.yml | 7 +- modules/nf-core/samtools/index/main.nf | 11 +- modules/nf-core/samtools/index/meta.yml | 68 ++- .../nf-core/samtools/index/tests/main.nf.test | 111 +++- .../samtools/index/tests/main.nf.test.snap | 254 ++++++++- .../nf-core/samtools/markdup/environment.yml | 8 +- modules/nf-core/samtools/markdup/main.nf | 6 +- modules/nf-core/samtools/markdup/meta.yml | 74 ++- .../nf-core/samtools/merge/environment.yml | 8 +- modules/nf-core/samtools/merge/main.nf | 4 +- modules/nf-core/samtools/merge/meta.yml | 117 ++-- .../nf-core/samtools/merge/tests/main.nf.test | 125 ++--- .../samtools/merge/tests/main.nf.test.snap | 220 ++++++-- modules/nf-core/samtools/sort/environment.yml | 8 +- modules/nf-core/samtools/sort/main.nf | 45 +- modules/nf-core/samtools/sort/meta.yml | 89 ++- .../nf-core/samtools/sort/tests/main.nf.test | 161 +++++- .../samtools/sort/tests/main.nf.test.snap | 259 ++++++++- .../samtools/sort/tests/nextflow.config | 3 +- modules/nf-core/samtools/view/environment.yml | 10 +- modules/nf-core/samtools/view/main.nf | 44 +- modules/nf-core/samtools/view/meta.yml | 158 ++++-- .../nf-core/samtools/view/tests/main.nf.test | 195 +++---- .../samtools/view/tests/main.nf.test.snap | 506 ++++++++++++++++-- subworkflows/local/hic_bamtobed.nf | 15 +- 29 files changed, 1978 insertions(+), 635 deletions(-) diff --git a/modules.json b/modules.json index e227d47c..674b2024 100755 --- a/modules.json +++ b/modules.json @@ -137,32 +137,32 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/markdup": { "branch": "master", - "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c", + "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "ce0b1aed7d504883061e748f492a31bf44c5777c", + "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", "installed_by": ["modules"] }, "seqtk/cutn": { diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 4807ba5f..62054fc9 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,8 +1,8 @@ -name: samtools_faidx +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index d3461627..28c0a81c 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index e189af28..6721b2cb 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -14,43 +14,62 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - fa: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 296ed99e..62054fc9 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,7 +1,8 @@ -name: samtools_index +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 8ad18fdc..31175610 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -35,10 +35,11 @@ process SAMTOOLS_INDEX { """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi + touch ${input}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 01a4ee03..db8df0d5 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -15,38 +15,52 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - csi: - type: file - description: CSI index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index c76a9169..ca34fb5c 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -8,18 +8,34 @@ nextflow_process { tag "samtools" tag "samtools/index" - test("sarscov2 [BAI]") { - + test("bai") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai") { + when { process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) """ } } @@ -27,24 +43,45 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.bai).match("bai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens [CRAI]") { + test("csi") { + config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.csi[0][1]).name, + process.out.versions + ).match() } + ) + } + } + + test("bai - stub") { + options "-stub" + when { process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -52,26 +89,43 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.crai).match("crai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out).match() } ) } } - test("homo_sapiens [CSI]") { + test("crai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("csi - stub") { + options "-stub" config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" - } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -79,8 +133,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index b3baee7f..72d65e81 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,28 +1,250 @@ { - "crai": { + "csi - stub": { "content": [ - [ - [ - { - "id": "test" - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:25.261127166" + }, + "crai - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:12.653194876" + }, + "bai - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:21:01.854932651" + }, + "csi": { + "content": [ + "test.paired_end.sorted.bam.csi", + [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] ], - "timestamp": "2023-11-15T15:17:37.30801" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:51.485364222" + }, + "crai": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:40.518873972" }, "bai": { "content": [ - [ - [ - { - "id": "test" - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] - ] + } ], - "timestamp": "2023-11-15T15:17:30.869234" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:21.184050361" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/markdup/environment.yml b/modules/nf-core/samtools/markdup/environment.yml index feb82f5f..62054fc9 100644 --- a/modules/nf-core/samtools/markdup/environment.yml +++ b/modules/nf-core/samtools/markdup/environment.yml @@ -1,8 +1,8 @@ -name: samtools_markdup +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/markdup/main.nf b/modules/nf-core/samtools/markdup/main.nf index 803a6bfb..8453bf82 100644 --- a/modules/nf-core/samtools/markdup/main.nf +++ b/modules/nf-core/samtools/markdup/main.nf @@ -4,12 +4,12 @@ process SAMTOOLS_MARKDUP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) - path fasta + tuple val(meta2), path(fasta) output: tuple val(meta), path("*.bam"), emit: bam, optional: true diff --git a/modules/nf-core/samtools/markdup/meta.yml b/modules/nf-core/samtools/markdup/meta.yml index 5e8c9733..31cb0c63 100644 --- a/modules/nf-core/samtools/markdup/meta.yml +++ b/modules/nf-core/samtools/markdup/meta.yml @@ -13,30 +13,62 @@ tools: tool_dev_url: "https://github.com/samtools/samtools" doi: "10.1093/bioinformatics/btp352" licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: A reference genome in FASTA format + pattern: "*.fasta" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file + pattern: "*{.bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: CRAM file + pattern: "*{.cram}" + - sam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: SAM file + pattern: "*{.sam}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - output: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@priyanka-surana" maintainers: diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml index 14f7e9aa..62054fc9 100644 --- a/modules/nf-core/samtools/merge/environment.yml +++ b/modules/nf-core/samtools/merge/environment.yml @@ -1,8 +1,8 @@ -name: samtools_merge +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index e104b90a..34da4c7c 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 2e8f3dbb..235aa219 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -15,60 +15,81 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_files: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of the reference file the CRAM was created with (optional) - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: BAM file + pattern: "*.{bam}" - cram: - type: file - description: CRAM file - pattern: "*.{cram}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: CRAM file + pattern: "*.{cram}" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@yuukiiwa " diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test index 024f9f70..40b36e82 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -9,21 +9,19 @@ nextflow_process { tag "samtools" tag "samtools/merge" - test("sarscov2 - [bam1, bam2, bam3], [], []") { + test("bams") { config "./index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -33,40 +31,35 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_csi") }, + { assert snapshot(process.out.crai).match("bams_crai") }, + { assert snapshot(process.out.versions).match("bams_versions") } ) } - } - test("homo_sapiens - [cram1, cram2], fasta, fai") { + test("crams") { config "./index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true), - ] - ] - input[1] = [ - [id:'genome'], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] - input[2] = [ - [id:'genome'], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -74,27 +67,24 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.cram[0][1]).name, - process.out.bam, - file(process.out.crai[0][1]).name, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.cram[0][1]).name).match("crams_cram") }, + { assert snapshot(process.out.bam).match("crams_bam") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("crams_crai") }, + { assert snapshot(process.out.csi).match("crams_csi") }, + { assert snapshot(process.out.versions).match("crams_versions") } ) } - } - test("sarscov2 - bam, [], []") { + test("bam") { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -104,19 +94,16 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.versions).match("bam_versions") } ) } - } - test("sarscov2 - [bam1, bam2, bam3], [], [] - stub") { + test("bams_stub") { config "./index.config" options "-stub" @@ -124,14 +111,12 @@ nextflow_process { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -141,16 +126,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_stub_csi") }, + { assert snapshot(process.out.crai).match("bams_stub_crai") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap index 3ab57d81..0a41e01a 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -1,68 +1,228 @@ { - "sarscov2 - bam, [], []": { + "crams_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.647389" + }, + "bams_stub_cram": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.937013" + }, + "bams_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.928616" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.923289" + }, + "bams_cram": { + "content": [ [ - ], - [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" ] ], - "timestamp": "2023-12-04T17:13:30.244841621" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.925716" }, - "sarscov2 - [bam1, bam2, bam3], [], [] - stub": { + "crams_csi": { "content": [ - "test.bam", [ - ], - "test.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.655959" + }, + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.319539" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:30.476887194" + }, + "bams_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.92719" + }, + "bams_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.940498" + }, + "bam_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.328852" + }, + "bams_stub_versions": { + "content": [ [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], - "timestamp": "2023-12-04T17:10:14.861445721" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:52.203823961" }, - "homo_sapiens - [cram1, cram2], fasta, fai": { + "bam_cram": { "content": [ - "test.cram", [ - ], - "test.cram.crai", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.324219" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.933153" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:29:57.524363148" + }, + "crams_bam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.650652" + }, + "crams_versions": { + "content": [ [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], - "timestamp": "2023-12-04T17:09:29.716002618" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:16:06.977096207" }, - "sarscov2 - [bam1, bam2, bam3], [], []": { + "bam_csi": { "content": [ - "test.bam", [ - ], - "test.bam.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.33292" + }, + "crams_crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.653512" + }, + "bams_stub_crai": { + "content": [ [ - ], - [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" ] ], - "timestamp": "2023-12-04T17:08:42.329973045" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.943839" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index f4064b72..62054fc9 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -1,8 +1,8 @@ -name: samtools_sort +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 4a666d42..caf3c61a 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,16 +4,19 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: - tuple val(meta), path(bam) + tuple val(meta) , path(bam) + tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.csi"), emit: csi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -21,14 +24,23 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + samtools cat \\ + ${bam} \\ + | \\ samtools sort \\ $args \\ - -@ $task.cpus \\ - -o ${prefix}.bam \\ - -T $prefix \\ - $bam + -T ${prefix} \\ + --threads $task.cpus \\ + ${reference} \\ + -o ${prefix}.${extension} \\ + - cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -37,9 +49,20 @@ process SAMTOOLS_SORT { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" """ - touch ${prefix}.bam + touch ${prefix}.${extension} + if [ "${extension}" == "bam" ]; + then + touch ${prefix}.${extension}.csi + elif [ "${extension}" == "cram" ]; + then + touch ${prefix}.${extension}.crai + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 2200de72..a9dbec5a 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -15,37 +15,78 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - cram: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Sorted CRAM file + pattern: "*.{cram}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" + - "@matthdsm" maintainers: - "@drpatelh" - "@ewels" + - "@matthdsm" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index abb80978..b05e6691 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -8,22 +8,55 @@ nextflow_process { tag "samtools" tag "samtools/sort" - test("test_samtools_sort") { + test("bam") { config "./nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("multiple bam") { + + config "./nextflow.config" + + when { process { """ - input[0] = [ - [ id:'test', single_end:false ], + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) ] - ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -31,29 +64,92 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} ) } + } + + test("cram") { + + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } } - test("test_samtools_sort_stub") { + test("bam - stub") { + options "-stub" config "./nextflow.config" - options "-stub-run" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("multiple bam - stub") { + + config "./nextflow.config" + + when { process { """ - input[0] = [ - [ id:'test', single_end:false ], + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true) ] - ] + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -61,13 +157,36 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } - } + test("cram - stub") { + + options "-stub" + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index ff722259..469891fe 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,5 +1,35 @@ { - "test_samtools_sort": { + "cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:49:58.207549273" + }, + "bam - stub": { "content": [ { "0": [ @@ -8,14 +38,26 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ ], "2": [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ], "bam": [ [ @@ -23,26 +65,223 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:08.630951018" + }, + "cram - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "csi": [ ], "versions": [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], - "timestamp": "2023-12-04T11:11:22.005628301" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:19.061912443" + }, + "multiple bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:55.479443" }, - "test_samtools_sort_stub": { + "multiple bam - stub": { "content": [ - "test.sorted.bam", + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "4": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9" + ] + ], + "versions": [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:36:13.781404" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] ], - "timestamp": "2023-12-04T17:47:22.314445935" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.09.0" + }, + "timestamp": "2024-10-08T11:59:46.372244" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config index d0f35086..f642771f 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -1,7 +1,8 @@ process { withName: SAMTOOLS_SORT { - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index" } } diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index 73ce7999..02cda6e6 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -1,8 +1,10 @@ -name: samtools_view +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.21 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 0b5a2912..41fa3d6a 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9e/9edc2564215d5cd137a8b25ca8a311600987186d406b092022444adf3c4447f7/data' : + 'community​.wave​.seqera​.io/library/htslib_samtools:1​.21--6cb89bfd40cbaabf' }" input: tuple val(meta), path(input), path(index) @@ -13,13 +13,15 @@ process SAMTOOLS_VIEW { path qname output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.sam"), emit: sam, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true + tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}.{bai,csi,crsi}"), emit: unselected_index, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -27,13 +29,13 @@ process SAMTOOLS_VIEW { script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def readnames = qname ? "--qname-file ${qname}": "" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ samtools \\ @@ -54,14 +56,14 @@ process SAMTOOLS_VIEW { stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + prefix = task.ext.prefix ?: "${meta.id}" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + def index = args.contains("--write-index") ? "touch ${prefix}.${file_type}.csi" : "" """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 3dadafae..caa7b015 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -15,68 +15,120 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) - pattern: "*.{.bai,.csi,.crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - qname: - type: file - description: Optional file with read names to output only select alignments - pattern: "*.{txt,list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: optional filtered/converted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" - cram: - type: file - description: optional filtered/converted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" - sam: - type: file - description: optional filtered/converted SAM file - pattern: "*.{sam}" - # bai, csi, and crai are created with `--write-index` + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" - bai: - type: file - description: optional BAM file index - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" - csi: - type: file - description: optional tabix BAM file index - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" - crai: - type: file - description: optional CRAM file index - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" + - unselected: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" + - unselected_index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}.{bai,csi,crsi}: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{bai,csi,crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@joseespinosa" diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test index 89ed3555..37b81a91 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -9,16 +9,16 @@ nextflow_process { tag "samtools" tag "samtools/view" - test("sarscov2 - [bam, []], [], []") { + test("bam") { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), [] - ] + ]) input[1] = [[],[]] input[2] = [] """ @@ -28,34 +28,31 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.bai).match("bam_bai") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.sam).match("bam_sam") }, + { assert snapshot(process.out.versions).match("bam_versions") } ) } - } - test("homo_sapiens - [cram, crai], fasta, []") { + test("cram") { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true) - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -64,36 +61,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.cram[0][1]).name, - process.out.bam, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.cram[0][1]).name).match("cram_cram") }, + { assert snapshot(process.out.bai).match("cram_bai") }, + { assert snapshot(process.out.bam).match("cram_bam") }, + { assert snapshot(process.out.crai).match("cram_crai") }, + { assert snapshot(process.out.csi).match("cram_csi") }, + { assert snapshot(process.out.sam).match("cram_sam") }, + { assert snapshot(process.out.versions).match("cram_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, [] - bam output") { + test("cram_to_bam") { config "./bam.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -102,36 +96,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_bam") }, + { assert snapshot(process.out.bai).match("cram_to_bam_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_cram") }, + { assert snapshot(process.out.csi).match("cram_to_bam_csi") }, + { assert snapshot(process.out.sam).match("cram_to_bam_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, [] - bam & index output") { + test("cram_to_bam_index") { config "./bam_index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -140,36 +131,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, qname - bam & index output") { + test("cram_to_bam_index_qname") { config "./bam_index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true) """ } @@ -178,21 +166,20 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_qname_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_qname_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_qname_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(file(process.out.unselected[0][1]).name).match("cram_to_bam_index_qname_unselected") }, + { assert snapshot(file(process.out.unselected_index[0][1]).name).match("cram_to_bam_index_qname_unselected_csi") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } ) } - } - test("sarscov2 - [bam, []], [], [] - stub") { + test("bam_stub") { options "-stub" config "./bam_index.config" @@ -200,11 +187,11 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), [] - ] + ]) input[1] = [[],[]] input[2] = [] """ @@ -214,18 +201,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bam_stub_csi") }, + { assert snapshot(process.out.bai).match("bam_stub_bai") }, + { assert snapshot(process.out.crai).match("bam_stub_crai") }, + { assert snapshot(process.out.cram).match("bam_stub_cram") }, + { assert snapshot(process.out.sam).match("bam_stub_sam") }, + { assert snapshot(process.out.versions).match("bam_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index 83427491..63849b03 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -1,140 +1,528 @@ { - "homo_sapiens - [cram, []], fasta, [] - bam output": { + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.256068" + }, + "cram_to_bam_index_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.958617" + }, + "bam_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.065301" + }, + "bam_bai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.258578" + }, + "bam_stub_bai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.071284" + }, + "bam_stub_versions": { + "content": [ [ - - ], + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:26:24.461775464" + }, + "cram_to_bam_index_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.972288" + }, + "cram_to_bam_sam": { + "content": [ [ - ], - [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" ] ], - "timestamp": "2023-12-04T17:41:17.563069206" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.999247" }, - "sarscov2 - [bam, []], [], []": { + "cram_to_bam_index_sam": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.976457" + }, + "cram_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.497581" + }, + "cram_csi": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.50038" + }, + "cram_to_bam_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.992239" + }, + "cram_to_bam_index_qname_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.325496" + }, + "bam_stub_sam": { + "content": [ [ - ], - [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" ] ], - "timestamp": "2023-12-04T17:41:03.206994564" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.079529" + }, + "cram_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.490286" }, - "homo_sapiens - [cram, []], fasta, qname - bam & index output": { + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, + "bam_csi": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.262882" + }, + "cram_to_bam_crai": { + "content": [ [ - ], - "test.bam.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.989247" + }, + "cram_to_bam_index_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.967681" + }, + "cram_to_bam_index_qname_versions": { + "content": [ [ - - ], + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:25:51.953436682" + }, + "cram_to_bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.982361" + }, + "cram_to_bam_index_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.95456" + }, + "cram_to_bam_index_versions": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], - "timestamp": "2023-12-04T17:44:39.165289759" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:25:14.475388399" }, - "homo_sapiens - [cram, []], fasta, [] - bam & index output": { + "cram_to_bam_bai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.98601" + }, + "cram_to_bam_versions": { + "content": [ [ - - ], - "test.bam.csi", + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:24:49.673441798" + }, + "cram_bam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.495512" + }, + "bam_stub_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.076908" + }, + "cram_to_bam_index_qname_bai": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:44:32.25731224" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" }, - "sarscov2 - [bam, []], [], [] - stub": { + "cram_to_bam_index_qname_crai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.330789" + }, + "cram_bai": { + "content": [ [ - ], - "test.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.493129" + }, + "bam_stub_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.074313" + }, + "cram_to_bam_index_qname_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:23:27.151650338" + }, + "cram_to_bam_index_qname_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.333248" + }, + "bam_crai": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:44:45.81037195" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.259774" }, - "homo_sapiens - [cram, crai], fasta, []": { + "bam_cram": { "content": [ - "test.cram", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.261287" + }, + "cram_to_bam_csi": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.995454" + }, + "cram_sam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.502625" + }, + "cram_versions": { + "content": [ + [ + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:24:12.95416913" + }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "bam_sam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.264651" + }, + "cram_to_bam_index_bai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.962863" + }, + "cram_to_bam_index_qname_sam": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:41:10.730011823" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.337634" + }, + "bam_stub_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.068596" } } \ No newline at end of file diff --git a/subworkflows/local/hic_bamtobed.nf b/subworkflows/local/hic_bamtobed.nf index 70ab1ba8..e8b2ae70 100755 --- a/subworkflows/local/hic_bamtobed.nf +++ b/subworkflows/local/hic_bamtobed.nf @@ -21,23 +21,12 @@ workflow HIC_BAMTOBED { main: ch_versions = Channel.empty() - // - // LOGIC: PREPARE MARKDUP INPUT - // - bam_file - .combine(reference_tuple) - .multiMap {meta_bam, bam_file, meta_ref, ref -> - bam : tuple(meta_bam, bam_file) - reference : ref - } - .set {markdup_input} - // // MODULE: MERGE POSITION SORTED BAM FILES AND MARK DUPLICATES // SAMTOOLS_MARKDUP ( - markdup_input.bam, - markdup_input.reference + bam_file, + reference_tuple ) ch_versions = ch_versions.mix (SAMTOOLS_MARKDUP.out.versions) From 217bd326f8521092353a1f8ba458f2e524a599e2 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 12:28:43 +0000 Subject: [PATCH 05/65] linting --- CHANGELOG.md | 68 ++++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba3ebafb..b20fdd83 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ Our 3rd release for sanger-tol/treeval. ### Enhancements & Fixes - Togglable subworkflows -- Adds a JBrowse Only workflow (this will lead to an update to the FULL workflow which can now call JBROWSE_ONLY and RAPID). +- Adds a JBrowse Only workflow (this will lead to an update to the FULL workflow which can now call JBROWSE_ONLY and RAPID). - Updates to containers (local modules) to remove Anaconda dependencies following policy changes. - Updates to modules to remove Anaconda dependencies following policy changes - CONDA warnings for modules which cannot use CONDA. @@ -29,39 +29,39 @@ Our 3rd release for sanger-tol/treeval. Note, since the pipeline is using Nextflow DSL2, each process will be run with its own Biocontainer. This means that on occasion it is entirely possible for the pipeline to be using different versions of the same tool. However, the overall software dependency changes compared to the last release have been listed below for reference. -| Module | Old Version | New Versions | -| -------------------------------------- | ------------ | ---------------- | -| bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | -| bedtools | 2.31.1 | | -| busco | 5.5.0 | | -| bwa-mem2 | 2.2.1 | | -| cat | 2.3.4 | | -| chunk_fasta ( pyfasta ) | 0.5.2-1 | | -| cooler | 0.9.2 | | -| cram_filter_align_bwamem2_fixmate_sort | - | | -| ^ ( samtools + bwamem2 ) ^ | 1.17 + 2.2.1 | | -| coreutils | 9.1 | | -| fastk | 1.0.1 | | -| gcc | 10.4.0 | | -| find_telomere_windows ( java-jdk ) | 8.0.112 | | -| generate_cram_csv ( samtools ) | 1.17 | | -| gnu-sort | 8.25 | | -| juicer_tools_pre ( java-jdk ) | 8.0.112 | | -| perl | 5.26.2 | | -| merquryfk | 1.0.1 | | -| minimap2 + samtools | 2.24 + 1.14 | | -| miniprot | 0.11--he4a0461_2 | | -| mummer | 3.23 | | -| paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | -| pretextmap + samtools | 0.0.2 + 1.17 | | -| python | 3.9 | - | -| - pandas | 1.5.2 | - | -| samtools | 1.18 | 1.21 | -| selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | -| seqtk | 1.4 | | -| tabix | 1.11 | | -| ucsc | 377 | | -| windowmasker (blast) | 2.14.0 | | +| Module | Old Version | New Versions | +| -------------------------------------- | ---------------- | ------------ | +| bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | +| bedtools | 2.31.1 | | +| busco | 5.5.0 | | +| bwa-mem2 | 2.2.1 | | +| cat | 2.3.4 | | +| chunk_fasta ( pyfasta ) | 0.5.2-1 | | +| cooler | 0.9.2 | | +| cram_filter_align_bwamem2_fixmate_sort | - | | +| ^ ( samtools + bwamem2 ) ^ | 1.17 + 2.2.1 | | +| coreutils | 9.1 | | +| fastk | 1.0.1 | | +| gcc | 10.4.0 | | +| find_telomere_windows ( java-jdk ) | 8.0.112 | | +| generate_cram_csv ( samtools ) | 1.17 | | +| gnu-sort | 8.25 | | +| juicer_tools_pre ( java-jdk ) | 8.0.112 | | +| perl | 5.26.2 | | +| merquryfk | 1.0.1 | | +| minimap2 + samtools | 2.24 + 1.14 | | +| miniprot | 0.11--he4a0461_2 | | +| mummer | 3.23 | | +| paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | +| pretextmap + samtools | 0.0.2 + 1.17 | | +| python | 3.9 | - | +| - pandas | 1.5.2 | - | +| samtools | 1.18 | 1.21 | +| selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | +| seqtk | 1.4 | | +| tabix | 1.11 | | +| ucsc | 377 | | +| windowmasker (blast) | 2.14.0 | | ## [1.1.1] - Ancient Aurora (H1) - [2024-04-26] From 30a576c175f8f8f22909fcedced6ee3e28c1fd53 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 14:38:00 +0000 Subject: [PATCH 06/65] Updating all easy to update modules --- conf/base.config | 4 +- conf/modules.config | 2 +- modules.json | 198 ++++++++++++------ .../nf-core/bedtools/bamtobed/environment.yml | 2 - modules/nf-core/bedtools/bamtobed/meta.yml | 43 ++-- .../bedtools/bamtobed/tests/main.nf.test | 4 +- .../bedtools/intersect/environment.yml | 2 - modules/nf-core/bedtools/intersect/meta.yml | 70 ++++--- .../bedtools/makewindows/environment.yml | 2 - modules/nf-core/bedtools/makewindows/meta.yml | 48 +++-- .../nf-core/bedtools/merge/environment.yml | 2 - modules/nf-core/bedtools/merge/meta.yml | 46 ++-- modules/nf-core/bedtools/sort/environment.yml | 2 - modules/nf-core/bedtools/sort/meta.yml | 53 ++--- modules/nf-core/busco/environment.yml | 7 - modules/nf-core/busco/main.nf | 94 --------- modules/nf-core/busco/meta.yml | 96 --------- modules/nf-core/bwamem2/index/environment.yml | 2 - modules/nf-core/bwamem2/index/meta.yml | 41 ++-- modules/nf-core/cat/cat/environment.yml | 2 - modules/nf-core/cat/cat/main.nf | 1 - modules/nf-core/cat/cat/meta.yml | 39 ++-- modules/nf-core/cat/cat/tests/main.nf.test | 48 +++-- .../nf-core/cat/cat/tests/main.nf.test.snap | 128 +++++------ .../dumpsoftwareversions/environment.yml | 4 +- .../custom/dumpsoftwareversions/main.nf | 4 +- .../custom/dumpsoftwareversions/meta.yml | 36 ++-- .../templates/dumpsoftwareversions.py | 4 +- .../getchromsizes/custom-getchromsizes.diff | 44 ++-- .../custom/getchromsizes/environment.yml | 6 +- modules/nf-core/custom/getchromsizes/main.nf | 27 ++- modules/nf-core/custom/getchromsizes/meta.yml | 67 +++--- .../custom/getchromsizes/tests/main.nf.test | 51 ++++- .../getchromsizes/tests/main.nf.test.snap | 140 ++++++++++++- modules/nf-core/gnu/sort/environment.yml | 6 +- modules/nf-core/gnu/sort/main.nf | 13 +- modules/nf-core/gnu/sort/meta.yml | 41 ++-- .../nf-core/minimap2/index/environment.yml | 4 +- modules/nf-core/minimap2/index/main.nf | 16 +- modules/nf-core/minimap2/index/meta.yml | 43 ++-- .../nf-core/miniprot/align/environment.yml | 2 - modules/nf-core/miniprot/align/meta.yml | 67 +++--- modules/nf-core/miniprot/index/main.nf | 2 +- modules/nf-core/miniprot/index/meta.yml | 46 ++-- .../nf-core/paftools/sam2paf/environment.yml | 2 - modules/nf-core/paftools/sam2paf/main.nf | 2 +- modules/nf-core/paftools/sam2paf/meta.yml | 38 ++-- modules/nf-core/pretextmap/main.nf | 29 +-- modules/nf-core/pretextmap/meta.yml | 70 ++++--- modules/nf-core/pretextmap/pretextmap.diff | 53 ++--- modules/nf-core/pretextsnapshot/main.nf | 15 +- modules/nf-core/pretextsnapshot/meta.yml | 52 ++--- .../pretextsnapshot/pretextsnapshot.diff | 29 ++- modules/nf-core/seqtk/cutn/environment.yml | 2 - modules/nf-core/seqtk/cutn/meta.yml | 47 +++-- .../nf-core/tabix/bgziptabix/environment.yml | 4 +- modules/nf-core/tabix/bgziptabix/main.nf | 13 +- modules/nf-core/tabix/bgziptabix/meta.yml | 70 ++++--- .../ucsc/bedgraphtobigwig/environment.yml | 4 +- modules/nf-core/ucsc/bedgraphtobigwig/main.nf | 8 +- .../nf-core/ucsc/bedgraphtobigwig/meta.yml | 53 ++--- .../ucsc/bedgraphtobigwig/tests/main.nf.test | 35 +++- .../bedgraphtobigwig/tests/main.nf.test.snap | 43 +++- modules/nf-core/ucsc/bedtobigbed/main.nf | 10 +- modules/nf-core/ucsc/bedtobigbed/meta.yml | 66 +++--- .../windowmasker/mkcounts/environment.yml | 4 +- modules/nf-core/windowmasker/mkcounts/main.nf | 8 +- .../nf-core/windowmasker/mkcounts/meta.yml | 45 ++-- .../windowmasker/ustat/environment.yml | 4 +- modules/nf-core/windowmasker/ustat/main.nf | 4 +- modules/nf-core/windowmasker/ustat/meta.yml | 63 +++--- subworkflows/local/busco_annotation.nf | 10 +- 72 files changed, 1254 insertions(+), 1088 deletions(-) delete mode 100644 modules/nf-core/busco/environment.yml delete mode 100644 modules/nf-core/busco/main.nf delete mode 100644 modules/nf-core/busco/meta.yml diff --git a/conf/base.config b/conf/base.config index 93360fc4..2d6e719c 100755 --- a/conf/base.config +++ b/conf/base.config @@ -225,14 +225,14 @@ process { memory = { check_max( 100.GB * task.attempt, 'memory' ) } } - withName: BUSCO { + withName: BUSCO_BUSCO { cpus = { check_max( 16 * task.attempt, 'cpus' ) } memory = { check_max( 50.GB * task.attempt, 'memory' ) } time = { check_max( 20.h * task.attempt, 'time' ) } } // Large Genomes > 4Gb - //withName: BUSCO { + //withName: BUSCO_BUSCO { // cpus = { check_max( 30 * task.attempt, 'cpus' ) } // memory = { check_max( 100.GB * task.attempt, 'memory' ) } // time = { check_max( 300.h * task.attempt, 'time' ) } diff --git a/conf/modules.config b/conf/modules.config index dafd5469..a5212bda 100755 --- a/conf/modules.config +++ b/conf/modules.config @@ -307,7 +307,7 @@ process { ext.prefix = { "${meta.id}_ancestral" } } - withName: "BUSCO" { + withName: "BUSCO_BUSCO" { ext.args = "--offline" } diff --git a/modules.json b/modules.json index 674b2024..36502544 100755 --- a/modules.json +++ b/modules.json @@ -7,193 +7,267 @@ "nf-core": { "bedtools/bamtobed": { "branch": "master", - "git_sha": "1d1cb7bfef6cf67fbc7faafa6992ad8bdc3045b3", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/intersect": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "bedtools/makewindows": { "branch": "master", - "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/merge": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "bedtools/sort": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, - "busco": { + "busco/busco": { "branch": "master", - "git_sha": "e3126f437c336c826f242842fe51769cfce0ec2d", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "bwamem2/index": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", - "git_sha": "81f27e75847087865299cc46605deb3b09b4e0a2", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "custom/getchromsizes": { "branch": "master", - "git_sha": "1b0ffa4e5aed5b7e3cd4311af31bd3b2c8345051", - "installed_by": ["modules"], + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gnu/sort": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "miniprot/align": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "miniprot/index": { "branch": "master", - "git_sha": "8d737766e8f3c1417212b4b56acb959f3c356d26", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "pretextmap": { "branch": "master", - "git_sha": "decfb802f2e573efb7b44ff06b11ecf16853054d", - "installed_by": ["modules"], + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"], + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "seqtk/cutn": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", + "installed_by": [ + "modules" + ] }, "ucsc/bedgraphtobigwig": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", + "installed_by": [ + "modules" + ] }, "ucsc/bedtobigbed": { "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "windowmasker/mkcounts": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] }, "windowmasker/ustat": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] } } }, @@ -202,4 +276,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/bamtobed/environment.yml b/modules/nf-core/bedtools/bamtobed/environment.yml index 4b50139e..5683bc05 100644 --- a/modules/nf-core/bedtools/bamtobed/environment.yml +++ b/modules/nf-core/bedtools/bamtobed/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_bamtobed channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/bamtobed/meta.yml b/modules/nf-core/bedtools/bamtobed/meta.yml index b6d14929..20171885 100644 --- a/modules/nf-core/bedtools/bamtobed/meta.yml +++ b/modules/nf-core/bedtools/bamtobed/meta.yml @@ -12,30 +12,33 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/complement.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Input BAM file - pattern: "*.{bam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM file + pattern: "*.{bam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: Bed file containing genomic intervals. - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: Bed file containing genomic intervals. + pattern: "*.{bed}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yuukiiwa" - "@drpatelh" diff --git a/modules/nf-core/bedtools/bamtobed/tests/main.nf.test b/modules/nf-core/bedtools/bamtobed/tests/main.nf.test index 9c65ef70..297f1813 100644 --- a/modules/nf-core/bedtools/bamtobed/tests/main.nf.test +++ b/modules/nf-core/bedtools/bamtobed/tests/main.nf.test @@ -14,7 +14,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_single_end_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) ] """ } @@ -38,7 +38,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_single_end_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) ] """ } diff --git a/modules/nf-core/bedtools/intersect/environment.yml b/modules/nf-core/bedtools/intersect/environment.yml index 2a343050..5683bc05 100644 --- a/modules/nf-core/bedtools/intersect/environment.yml +++ b/modules/nf-core/bedtools/intersect/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_intersect channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/intersect/meta.yml b/modules/nf-core/bedtools/intersect/meta.yml index 0939cb54..45ecf377 100644 --- a/modules/nf-core/bedtools/intersect/meta.yml +++ b/modules/nf-core/bedtools/intersect/meta.yml @@ -10,43 +10,47 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/intersect.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals1: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bam|bed|gff|vcf}" - - intervals2: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bam|bed|gff|vcf}" - - meta2: - type: map - description: | - Groovy Map containing reference chromosome sizes - e.g. [ id:'test' ] - - chrom_sizes: - type: file - description: Chromosome sizes file - pattern: "*{.sizes,.txt}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals1: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - intervals2: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - - meta2: + type: map + description: | + Groovy Map containing reference chromosome sizes + e.g. [ id:'test' ] + - chrom_sizes: + type: file + description: Chromosome sizes file + pattern: "*{.sizes,.txt}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - intersect: - type: file - description: File containing the description of overlaps found between the two features - pattern: "*.${extension}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: File containing the description of overlaps found between the two + features + pattern: "*.${extension}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/bedtools/makewindows/environment.yml b/modules/nf-core/bedtools/makewindows/environment.yml index 0de3c15d..5683bc05 100644 --- a/modules/nf-core/bedtools/makewindows/environment.yml +++ b/modules/nf-core/bedtools/makewindows/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_makewindows channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/makewindows/meta.yml b/modules/nf-core/bedtools/makewindows/meta.yml index f89d7175..df047f66 100644 --- a/modules/nf-core/bedtools/makewindows/meta.yml +++ b/modules/nf-core/bedtools/makewindows/meta.yml @@ -7,35 +7,39 @@ keywords: - chunking tools: - bedtools: - description: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + description: A set of tools for genomic analysis tasks, specifically enabling + genome arithmetic (merge, count, complement) on various file types. homepage: https://bedtools.readthedocs.io documentation: https://bedtools.readthedocs.io/en/latest/content/tools/makewindows.html doi: "10.1093/bioinformatics/btq033" licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - regions: - type: file - description: BED file OR Genome details file () - pattern: "*.{bed,tab,fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - regions: + type: file + description: BED file OR Genome details file () + pattern: "*.{bed,tab,fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bed: - type: file - description: BED file containing the windows - pattern: "*.bed" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: BED file containing the windows + pattern: "*.bed" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevbrick" - "@nvnieuwk" diff --git a/modules/nf-core/bedtools/merge/environment.yml b/modules/nf-core/bedtools/merge/environment.yml index 99707878..5683bc05 100644 --- a/modules/nf-core/bedtools/merge/environment.yml +++ b/modules/nf-core/bedtools/merge/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_merge channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/merge/meta.yml b/modules/nf-core/bedtools/merge/meta.yml index d7463e3d..6da54205 100644 --- a/modules/nf-core/bedtools/merge/meta.yml +++ b/modules/nf-core/bedtools/merge/meta.yml @@ -1,5 +1,6 @@ name: bedtools_merge -description: combines overlapping or “book-ended” features in an interval file into a single feature which spans all of the combined features. +description: combines overlapping or “book-ended” features in an interval file into + a single feature which spans all of the combined features. keywords: - bed - merge @@ -11,30 +12,33 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/merge.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bed: - type: file - description: Input BED file - pattern: "*.{bed}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Input BED file + pattern: "*.{bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: Overlapped bed file with combined features - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: Overlapped bed file with combined features + pattern: "*.{bed}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/bedtools/sort/environment.yml b/modules/nf-core/bedtools/sort/environment.yml index 87b2e425..5683bc05 100644 --- a/modules/nf-core/bedtools/sort/environment.yml +++ b/modules/nf-core/bedtools/sort/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_sort channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/sort/meta.yml b/modules/nf-core/bedtools/sort/meta.yml index 7c915f5f..313698f1 100644 --- a/modules/nf-core/bedtools/sort/meta.yml +++ b/modules/nf-core/bedtools/sort/meta.yml @@ -11,35 +11,38 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/sort.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals: - type: file - description: BED/BEDGRAPH - pattern: "*.{bed|bedGraph}" - - genome_file: - type: file - description: | - Optional reference genome 2 column file that defines the expected chromosome order. - pattern: "*.{fai,txt,chromsizes}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: BED/BEDGRAPH + pattern: "*.{bed|bedGraph}" + - - genome_file: + type: file + description: | + Optional reference genome 2 column file that defines the expected chromosome order. + pattern: "*.{fai,txt,chromsizes}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sorted: - type: file - description: Sorted output file - pattern: "*.${extension}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: Sorted output file + pattern: "*.${extension}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/busco/environment.yml b/modules/nf-core/busco/environment.yml deleted file mode 100644 index f872d057..00000000 --- a/modules/nf-core/busco/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: busco -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::busco=5.5.0 diff --git a/modules/nf-core/busco/main.nf b/modules/nf-core/busco/main.nf deleted file mode 100644 index e7100405..00000000 --- a/modules/nf-core/busco/main.nf +++ /dev/null @@ -1,94 +0,0 @@ -process BUSCO { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/busco:5.5.0--pyhdfd78af_0': - 'biocontainers/busco:5.5.0--pyhdfd78af_0' }" - - input: - tuple val(meta), path('tmp_input/*') - val mode // Required: One of genome, proteins, or transcriptome - val lineage // Required: lineage to check against, "auto" enables --auto-lineage instead - path busco_lineages_path // Recommended: path to busco lineages - downloads if not set - path config_file // Optional: busco configuration file - - output: - tuple val(meta), path("*-busco.batch_summary.txt") , emit: batch_summary - tuple val(meta), path("short_summary.*.txt") , emit: short_summaries_txt, optional: true - tuple val(meta), path("short_summary.*.json") , emit: short_summaries_json, optional: true - tuple val(meta), path("*-busco/*/run_*/full_table.tsv") , emit: full_table, optional: true - tuple val(meta), path("*-busco/*/run_*/missing_busco_list.tsv") , emit: missing_busco_list, optional: true - tuple val(meta), path("*-busco/*/run_*/single_copy_proteins.faa") , emit: single_copy_proteins, optional: true - tuple val(meta), path("*-busco/*/run_*/busco_sequences") , emit: seq_dir - tuple val(meta), path("*-busco/*/translated_proteins") , emit: translated_dir, optional: true - tuple val(meta), path("*-busco") , emit: busco_dir - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - if ( mode !in [ 'genome', 'proteins', 'transcriptome' ] ) { - error "Mode must be one of 'genome', 'proteins', or 'transcriptome'." - } - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" - def busco_config = config_file ? "--config $config_file" : '' - def busco_lineage = lineage.equals('auto') ? '--auto-lineage' : "--lineage_dataset ${lineage}" - def busco_lineage_dir = busco_lineages_path ? "--download_path ${busco_lineages_path}" : '' - """ - # Nextflow changes the container --entrypoint to /bin/bash (container default entrypoint: /usr/local/env-execute) - # Check for container variable initialisation script and source it. - if [ -f "/usr/local/env-activate.sh" ]; then - set +u # Otherwise, errors out because of various unbound variables - . "/usr/local/env-activate.sh" - set -u - fi - - # If the augustus config directory is not writable, then copy to writeable area - if [ ! -w "\${AUGUSTUS_CONFIG_PATH}" ]; then - # Create writable tmp directory for augustus - AUG_CONF_DIR=\$( mktemp -d -p \$PWD ) - cp -r \$AUGUSTUS_CONFIG_PATH/* \$AUG_CONF_DIR - export AUGUSTUS_CONFIG_PATH=\$AUG_CONF_DIR - echo "New AUGUSTUS_CONFIG_PATH=\${AUGUSTUS_CONFIG_PATH}" - fi - - # Ensure the input is uncompressed - INPUT_SEQS=input_seqs - mkdir "\$INPUT_SEQS" - cd "\$INPUT_SEQS" - for FASTA in ../tmp_input/*; do - if [ "\${FASTA##*.}" == 'gz' ]; then - gzip -cdf "\$FASTA" > \$( basename "\$FASTA" .gz ) - else - ln -s "\$FASTA" . - fi - done - cd .. - - busco \\ - --cpu $task.cpus \\ - --in "\$INPUT_SEQS" \\ - --out ${prefix}-busco \\ - --mode $mode \\ - $busco_lineage \\ - $busco_lineage_dir \\ - $busco_config \\ - $args - - # clean up - rm -rf "\$INPUT_SEQS" - - # Move files to avoid staging/publishing issues - mv ${prefix}-busco/batch_summary.txt ${prefix}-busco.batch_summary.txt - mv ${prefix}-busco/*/short_summary.*.{json,txt} . || echo "Short summaries were not available: No genes were found." - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/busco/meta.yml b/modules/nf-core/busco/meta.yml deleted file mode 100644 index 90b30d4d..00000000 --- a/modules/nf-core/busco/meta.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: busco -description: Benchmarking Universal Single Copy Orthologs -keywords: - - quality control - - genome - - transcriptome - - proteome -tools: - - busco: - description: BUSCO provides measures for quantitative assessment of genome assembly, gene set, and transcriptome completeness based on evolutionarily informed expectations of gene content from near-universal single-copy orthologs selected from OrthoDB. - homepage: https://busco.ezlab.org/ - documentation: https://busco.ezlab.org/busco_userguide.html - tool_dev_url: https://gitlab.com/ezlab/busco - doi: "10.1007/978-1-4939-9173-0_14" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Nucleic or amino acid sequence file in FASTA format. - pattern: "*.{fasta,fna,fa,fasta.gz,fna.gz,fa.gz}" - - mode: - type: string - description: The mode to run Busco in. One of genome, proteins, or transcriptome - pattern: "{genome,proteins,transcriptome}" - - lineage: - type: string - description: The BUSCO lineage to use, or "auto" to automatically select lineage - - busco_lineages_path: - type: directory - description: Path to local BUSCO lineages directory. - - config_file: - type: file - description: Path to BUSCO config file. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - batch_summary: - type: file - description: Summary of all sequence files analyzed - pattern: "*-busco.batch_summary.txt" - - short_summaries_txt: - type: file - description: Short Busco summary in plain text format - pattern: "short_summary.*.txt" - - short_summaries_json: - type: file - description: Short Busco summary in JSON format - pattern: "short_summary.*.json" - - busco_dir: - type: directory - description: BUSCO lineage specific output - pattern: "*-busco" - - full_table: - type: file - description: Full BUSCO results table - pattern: "full_table.tsv" - - missing_busco_list: - type: file - description: List of missing BUSCOs - pattern: "missing_busco_list.tsv" - - single_copy_proteins: - type: file - description: Fasta file of single copy proteins (transcriptome mode) - pattern: "single_copy_proteins.faa" - - seq_dir: - type: directory - description: BUSCO sequence directory - pattern: "busco_sequences" - - translated_proteins: - type: directory - description: Six frame translations of each transcript made by the transcriptome mode - pattern: "translated_proteins" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@priyanka-surana" - - "@charles-plessy" - - "@mahesh-panchal" - - "@muffato" - - "@jvhagey" -maintainers: - - "@priyanka-surana" - - "@charles-plessy" - - "@mahesh-panchal" - - "@muffato" - - "@jvhagey" diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml index 26b43917..15cee238 100644 --- a/modules/nf-core/bwamem2/index/environment.yml +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -1,7 +1,5 @@ -name: bwamem2_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml index c14a1092..74f54ef0 100644 --- a/modules/nf-core/bwamem2/index/meta.yml +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -13,29 +13,32 @@ tools: homepage: https://github.com/bwa-mem2/bwa-mem2 documentation: https://github.com/bwa-mem2/bwa-mem2#usage licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 17a04ef2..9b01c865 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,7 +1,5 @@ -name: cat_cat channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index adbdbd7b..2862c64c 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -76,4 +76,3 @@ def getFileSuffix(filename) { def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) } - diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 00a8db0b..81778a06 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -9,25 +9,32 @@ tools: description: Just concatenation documentation: https://man7.org/linux/man-pages/man1/cat.1.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - files_in: - type: file - description: List of compressed / uncompressed files - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - file_out: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@erikrikarddaniel" - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index aaae04f9..9cb16178 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -19,8 +19,8 @@ nextflow_process { [ [ id:'genome', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -29,7 +29,8 @@ nextflow_process { then { assertAll( { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -45,8 +46,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -72,8 +73,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -83,7 +84,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -101,8 +107,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -130,8 +136,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -141,7 +147,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -158,7 +169,7 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] ] """ @@ -168,10 +179,13 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } } - diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 0c9bfe8d..b7623ee6 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -28,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:18.500464399" }, "test_cat_zipped_unzipped": { @@ -59,40 +63,46 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:49.642741302" }, "test_cat_zipped_zipped": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] ], - "timestamp": "2024-01-12T14:02:02.999254641" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" }, - "test_cat_one_file_unzipped_zipped_lines": { + "test_cat_name_conflict": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" + }, + "test_cat_one_file_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -101,45 +111,37 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:21.39642399" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" }, "test_cat_unzipped_zipped": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } - ], - "timestamp": "2024-01-12T14:08:26.948048418" - }, - "test_cat_one_file_unzipped_zipped_size": { - "content": [ - 374 + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] ], - "timestamp": "2024-01-12T14:10:22.445700266" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" } -} +} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml index 9b3272bc..9d79af93 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/environment.yml @@ -1,7 +1,5 @@ -name: custom_dumpsoftwareversions channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.19 + - bioconda::multiqc=1.20 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index f2187611..105f9265 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -4,8 +4,8 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' : - 'biocontainers/multiqc:1.19--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.20--pyhdfd78af_0' : + 'biocontainers/multiqc:1.20--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml index 5f15a5fd..dc1e412f 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml @@ -1,34 +1,40 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: custom_dumpsoftwareversions -description: Custom module used to dump software versions within the nf-core pipeline template +description: Custom module used to dump software versions within the nf-core pipeline + template keywords: - custom - dump - version tools: - custom: - description: Custom module used to dump software versions within the nf-core pipeline template + description: Custom module used to dump software versions within the nf-core pipeline + template homepage: https://github.com/nf-core/tools documentation: https://github.com/nf-core/tools licence: ["MIT"] + identifier: "" input: - - versions: - type: file - description: YML file containing software versions - pattern: "*.yml" + - - versions: + type: file + description: YML file containing software versions + pattern: "*.yml" output: - yml: - type: file - description: Standard YML file containing software versions - pattern: "software_versions.yml" + - software_versions.yml: + type: file + description: Standard YML file containing software versions + pattern: "software_versions.yml" - mqc_yml: - type: file - description: MultiQC custom content YML file containing software versions - pattern: "software_versions_mqc.yml" + - software_versions_mqc.yml: + type: file + description: MultiQC custom content YML file containing software versions + pattern: "software_versions_mqc.yml" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py index da033408..b83b32c4 100755 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -3,11 +3,11 @@ """Provide functions to merge multiple versions.yml files.""" - -import yaml import platform from textwrap import dedent +import yaml + def _make_versions_html(versions): """Generate a tabular HTML output of all versions for MultiQC.""" diff --git a/modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff b/modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff index 216925e6..b05f08cc 100644 --- a/modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff +++ b/modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff @@ -1,15 +1,10 @@ Changes in module 'nf-core/custom/getchromsizes' +'modules/nf-core/custom/getchromsizes/meta.yml' is unchanged +Changes in 'custom/getchromsizes/main.nf': --- modules/nf-core/custom/getchromsizes/main.nf +++ modules/nf-core/custom/getchromsizes/main.nf -@@ -1,5 +1,5 @@ - process CUSTOM_GETCHROMSIZES { -- tag "$fasta" -+ tag "$meta.id" - label 'process_single' - - conda "bioconda::samtools=1.16.1" -@@ -8,22 +8,26 @@ - 'biocontainers/samtools:1.16.1--h6899075_1' }" +@@ -8,22 +8,25 @@ + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: - tuple val(meta), path(fasta) @@ -21,18 +16,16 @@ Changes in module 'nf-core/custom/getchromsizes' - tuple val(meta), path ("*.fai") , emit: fai - tuple val(meta), path ("*.gzi") , emit: gzi, optional: true - path "versions.yml" , emit: versions -+ tuple val(meta), path ("*.${suffix}") , emit: sizes -+ tuple val(meta), path ("*.fa") , emit: fasta -+ tuple val(meta), path ("*.fai") , emit: fai -+ tuple val(meta), path ("*.gzi") , emit: gzi, optional: true -+ path "versions.yml" , emit: versions ++ tuple val(meta), path ("*.${suffix}"), emit: sizes ++ tuple val(meta), path ("*.fai"), emit: fai ++ tuple val(meta), path ("*.gzi"), emit: gzi, optional: true ++ path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: -- def args = task.ext.args ?: '' -+ def args = task.ext.args ?: '' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ - samtools faidx $fasta @@ -43,20 +36,9 @@ Changes in module 'nf-core/custom/getchromsizes' cat <<-END_VERSIONS > versions.yml "${task.process}": -@@ -32,9 +36,12 @@ - """ - - stub: -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def suffix = 'temp.genome' - """ -- touch ${fasta}.fai -- touch ${fasta}.sizes -+ ln -s ${fasta} ${prefix}.fa -+ touch ${prefix}.fa.fai -+ touch ${prefix}.${suffix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": +'modules/nf-core/custom/getchromsizes/environment.yml' is unchanged +'modules/nf-core/custom/getchromsizes/tests/main.nf.test' is unchanged +'modules/nf-core/custom/getchromsizes/tests/tags.yml' is unchanged +'modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/custom/getchromsizes/environment.yml b/modules/nf-core/custom/getchromsizes/environment.yml index 2a01695f..2bcd47ee 100644 --- a/modules/nf-core/custom/getchromsizes/environment.yml +++ b/modules/nf-core/custom/getchromsizes/environment.yml @@ -1,7 +1,7 @@ -name: custom_getchromsizes channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::samtools=1.16.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/custom/getchromsizes/main.nf b/modules/nf-core/custom/getchromsizes/main.nf index 146f501e..263ddc7d 100644 --- a/modules/nf-core/custom/getchromsizes/main.nf +++ b/modules/nf-core/custom/getchromsizes/main.nf @@ -1,28 +1,27 @@ process CUSTOM_GETCHROMSIZES { - tag "$meta.id" + tag "$fasta" label 'process_single' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta, stageAs: 'input/*') val suffix output: - tuple val(meta), path ("*.${suffix}") , emit: sizes - tuple val(meta), path ("*.fa") , emit: fasta - tuple val(meta), path ("*.fai") , emit: fai - tuple val(meta), path ("*.gzi") , emit: gzi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path ("*.${suffix}"), emit: sizes + tuple val(meta), path ("*.fai"), emit: fai + tuple val(meta), path ("*.gzi"), emit: gzi, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ ln -s ${fasta} ${prefix}.fa @@ -36,12 +35,12 @@ process CUSTOM_GETCHROMSIZES { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = 'temp.genome' """ - ln -s ${fasta} ${prefix}.fa - touch ${prefix}.fa.fai - touch ${prefix}.${suffix} + touch ${fasta}.fai + touch ${fasta}.sizes + if [[ "${fasta.extension}" == "gz" ]]; then + touch ${fasta}.gzi + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/custom/getchromsizes/meta.yml b/modules/nf-core/custom/getchromsizes/meta.yml index 529be07e..2a0e8da0 100644 --- a/modules/nf-core/custom/getchromsizes/meta.yml +++ b/modules/nf-core/custom/getchromsizes/meta.yml @@ -12,38 +12,53 @@ tools: tool_dev_url: https://github.com/samtools/samtools doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta,fna,fas}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta,fna,fas}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sizes: - type: file - description: File containing chromosome lengths - pattern: "*.{sizes}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sizes": + type: file + description: File containing chromosome lengths + pattern: "*.{sizes}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@tamara-hodgetts" - "@chris-cheshire" diff --git a/modules/nf-core/custom/getchromsizes/tests/main.nf.test b/modules/nf-core/custom/getchromsizes/tests/main.nf.test index 9f6b5640..2f741a4b 100644 --- a/modules/nf-core/custom/getchromsizes/tests/main.nf.test +++ b/modules/nf-core/custom/getchromsizes/tests/main.nf.test @@ -12,9 +12,6 @@ nextflow_process { test("test_custom_getchromsizes") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -31,15 +28,11 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } test("test_custom_getchromsizes_bgzip") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -56,7 +49,51 @@ nextflow_process { { assert snapshot(process.out).match() } ) } + } + + test("test_custom_getchromsizes - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } } + test("test_custom_getchromsizes_bgzip - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap b/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap index 2e560bd3..d2072e22 100644 --- a/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap +++ b/modules/nf-core/custom/getchromsizes/tests/main.nf.test.snap @@ -1,4 +1,69 @@ { + "test_custom_getchromsizes_bgzip - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.gz.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:11:37.459094476" + }, "test_custom_getchromsizes": { "content": [ { @@ -22,7 +87,7 @@ ], "3": [ - "versions.yml:md5,45a83c5f3dddbc5dcab30035169f7ce8" + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" ], "fai": [ [ @@ -44,11 +109,15 @@ ] ], "versions": [ - "versions.yml:md5,45a83c5f3dddbc5dcab30035169f7ce8" + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" ] } ], - "timestamp": "2024-01-17T17:48:35.562918" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:11:01.526301351" }, "test_custom_getchromsizes_bgzip": { "content": [ @@ -78,7 +147,7 @@ ] ], "3": [ - "versions.yml:md5,45a83c5f3dddbc5dcab30035169f7ce8" + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" ], "fai": [ [ @@ -105,10 +174,69 @@ ] ], "versions": [ - "versions.yml:md5,45a83c5f3dddbc5dcab30035169f7ce8" + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:11:14.32456385" + }, + "test_custom_getchromsizes - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" + ], + "fai": [ + [ + { + "id": "test" + }, + "genome.fasta.fai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gzi": [ + + ], + "sizes": [ + [ + { + "id": "test" + }, + "genome.fasta.sizes:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f68edc4d5999d8cb07147b9be115d60b" ] } ], - "timestamp": "2024-01-17T17:49:02.562311" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:11:26.505487624" } } \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/environment.yml b/modules/nf-core/gnu/sort/environment.yml index 45d23356..babcfb55 100644 --- a/modules/nf-core/gnu/sort/environment.yml +++ b/modules/nf-core/gnu/sort/environment.yml @@ -1,7 +1,7 @@ -name: GNU_SORT +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::coreutils=8.25 + - conda-forge::coreutils=9.3 diff --git a/modules/nf-core/gnu/sort/main.nf b/modules/nf-core/gnu/sort/main.nf index 108a70a8..e1167666 100644 --- a/modules/nf-core/gnu/sort/main.nf +++ b/modules/nf-core/gnu/sort/main.nf @@ -1,11 +1,11 @@ process GNU_SORT { - tag "${meta.id}" + tag "$meta.id" label "process_low" conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/coreutils:8.25--1' : - 'biocontainers/coreutils:8.25--1' }" + 'https://depot.galaxyproject.org/singularity/coreutils:9.3': + 'biocontainers/coreutils:9.3' }" input: tuple val(meta), path(input) @@ -22,7 +22,7 @@ process GNU_SORT { def prefix = task.ext.prefix ?: "${meta.id}" suffix = task.ext.suffix ?: "${input.extension}" output_file = "${prefix}.${suffix}" - def VERSION = "9.1" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = "9.3" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ sort ${args} ${input} > ${output_file} @@ -34,15 +34,14 @@ process GNU_SORT { """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" suffix = task.ext.suffix ?: "${input.extension}" output_file = "${prefix}.${suffix}" - def VERSION = "9.1" + def VERSION = "9.3" if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - sort ${args} ${input} > ${output_file} + touch ${output_file} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gnu/sort/meta.yml b/modules/nf-core/gnu/sort/meta.yml index 014bcd52..c555dbb5 100644 --- a/modules/nf-core/gnu/sort/meta.yml +++ b/modules/nf-core/gnu/sort/meta.yml @@ -1,4 +1,4 @@ -name: "GNU_SORT" +name: "gnu_sort" description: | Writes a sorted concatenation of file/s keywords: @@ -11,30 +11,29 @@ tools: homepage: "https://github.com/vgl-hub/gfastats" documentation: "https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html" licence: ["GPL"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: Draft assembly file - pattern: "*.{txt,bed,interval,genome,bins}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Draft assembly file + pattern: "*.{txt,bed,interval,genome,bins}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sorted: - type: file - description: The sorted txt file generated by sort - pattern: "*.{txt,bed,interval,genome,bins}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@DLBPointon" maintainers: diff --git a/modules/nf-core/minimap2/index/environment.yml b/modules/nf-core/minimap2/index/environment.yml index 2a66e410..d1c1b471 100644 --- a/modules/nf-core/minimap2/index/environment.yml +++ b/modules/nf-core/minimap2/index/environment.yml @@ -1,7 +1,5 @@ -name: minimap2_index channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::minimap2=2.24 + - bioconda::minimap2=2.28 diff --git a/modules/nf-core/minimap2/index/main.nf b/modules/nf-core/minimap2/index/main.nf index 45e1cec0..38320214 100644 --- a/modules/nf-core/minimap2/index/main.nf +++ b/modules/nf-core/minimap2/index/main.nf @@ -1,11 +1,11 @@ process MINIMAP2_INDEX { - label 'process_medium' + label 'process_low' // Note: the versions here need to match the versions used in minimap2/align conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/minimap2:2.24--h7132678_1' : - 'biocontainers/minimap2:2.24--h7132678_1' }" + 'https://depot.galaxyproject.org/singularity/minimap2:2.28--he4a0461_0' : + 'biocontainers/minimap2:2.28--he4a0461_0' }" input: tuple val(meta), path(fasta) @@ -31,4 +31,14 @@ process MINIMAP2_INDEX { minimap2: \$(minimap2 --version 2>&1) END_VERSIONS """ + + stub: + """ + touch ${fasta.baseName}.mmi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + minimap2: \$(minimap2 --version 2>&1) + END_VERSIONS + """ } diff --git a/modules/nf-core/minimap2/index/meta.yml b/modules/nf-core/minimap2/index/meta.yml index 1d29e3f2..57c80e29 100644 --- a/modules/nf-core/minimap2/index/meta.yml +++ b/modules/nf-core/minimap2/index/meta.yml @@ -11,30 +11,33 @@ tools: homepage: https://github.com/lh3/minimap2 documentation: https://github.com/lh3/minimap2#uguide licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: | - Reference database in FASTA format. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Reference database in FASTA format. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: file - description: Minimap2 fasta index. - pattern: "*.mmi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mmi": + type: file + description: Minimap2 fasta index. + pattern: "*.mmi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yuukiiwa" - "@drpatelh" diff --git a/modules/nf-core/miniprot/align/environment.yml b/modules/nf-core/miniprot/align/environment.yml index d437e07a..7e258a04 100644 --- a/modules/nf-core/miniprot/align/environment.yml +++ b/modules/nf-core/miniprot/align/environment.yml @@ -1,7 +1,5 @@ -name: miniprot_align channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::miniprot=0.11=he4a0461_2 diff --git a/modules/nf-core/miniprot/align/meta.yml b/modules/nf-core/miniprot/align/meta.yml index 8b4ffe9e..aadd6fdf 100644 --- a/modules/nf-core/miniprot/align/meta.yml +++ b/modules/nf-core/miniprot/align/meta.yml @@ -14,40 +14,49 @@ tools: homepage: https://github.com/lh3/miniprot documentation: https://github.com/lh3/miniprot licence: ["MIT"] + identifier: biotools:miniprot input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - pep: - type: file - description: a fasta file contains one or multiple protein sequences - - meta2: - type: map - description: | - Groovy Map containing reference information - - ref: - type: file - description: Reference database in FASTA format or miniprot index format. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pep: + type: file + description: a fasta file contains one or multiple protein sequences + - - meta2: + type: map + description: | + Groovy Map containing reference information + - ref: + type: file + description: Reference database in FASTA format or miniprot index format. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - paf: - type: file - description: Alignment in PAF format - pattern: "*.paf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.paf": + type: file + description: Alignment in PAF format + pattern: "*.paf" - gff: - type: file - description: Alignment in gff format - pattern: "*.gff" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gff": + type: file + description: Alignment in gff format + pattern: "*.gff" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yumisims" - "@muffato" diff --git a/modules/nf-core/miniprot/index/main.nf b/modules/nf-core/miniprot/index/main.nf index ee3757b6..f2a036cb 100644 --- a/modules/nf-core/miniprot/index/main.nf +++ b/modules/nf-core/miniprot/index/main.nf @@ -2,7 +2,7 @@ process MINIPROT_INDEX { tag "$meta.id" label 'process_medium' - conda "bioconda::miniprot=0.11=he4a0461_2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/miniprot:0.11--he4a0461_2': 'biocontainers/miniprot:0.11--he4a0461_2' }" diff --git a/modules/nf-core/miniprot/index/meta.yml b/modules/nf-core/miniprot/index/meta.yml index 3a098802..bd076ada 100644 --- a/modules/nf-core/miniprot/index/meta.yml +++ b/modules/nf-core/miniprot/index/meta.yml @@ -12,30 +12,36 @@ tools: homepage: https://github.com/lh3/miniprot documentation: https://github.com/lh3/miniprot licence: ["MIT"] + identifier: biotools:miniprot input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: | - Reference database in FASTA format. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + Reference database in FASTA format. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: file - description: miniprot fasta index. - pattern: "*.mpi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mpi": + type: file + description: miniprot fasta index. + pattern: "*.mpi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@yumisims" - "@muffato" +maintainers: + - "@yumisims" + - "@muffato" diff --git a/modules/nf-core/paftools/sam2paf/environment.yml b/modules/nf-core/paftools/sam2paf/environment.yml index a2f0c8e9..988733dd 100644 --- a/modules/nf-core/paftools/sam2paf/environment.yml +++ b/modules/nf-core/paftools/sam2paf/environment.yml @@ -1,8 +1,6 @@ -name: paftools_sam2paf channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::minimap2=2.24 - bioconda::samtools=1.14 diff --git a/modules/nf-core/paftools/sam2paf/main.nf b/modules/nf-core/paftools/sam2paf/main.nf index a9584000..914dd9ba 100644 --- a/modules/nf-core/paftools/sam2paf/main.nf +++ b/modules/nf-core/paftools/sam2paf/main.nf @@ -12,7 +12,7 @@ process PAFTOOLS_SAM2PAF { tuple val(meta), path(bam) output: - tuple val(meta), file("*.paf") , emit: paf + tuple val(meta), file("*.paf") , emit: paf path "versions.yml" , emit: versions when: diff --git a/modules/nf-core/paftools/sam2paf/meta.yml b/modules/nf-core/paftools/sam2paf/meta.yml index 438ab2dd..e5829740 100644 --- a/modules/nf-core/paftools/sam2paf/meta.yml +++ b/modules/nf-core/paftools/sam2paf/meta.yml @@ -11,30 +11,28 @@ tools: homepage: https://github.com/lh3/minimap2 documentation: https://github.com/lh3/minimap2/blob/master/README.md licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: An input bam file to be converted into paf. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: An input bam file to be converted into paf. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - paf: - type: file - description: | - An output paf containing detailed data about the sample - pattern: "${prefix}.paf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@DLBPointon" maintainers: diff --git a/modules/nf-core/pretextmap/main.nf b/modules/nf-core/pretextmap/main.nf index 87427c40..95824c45 100644 --- a/modules/nf-core/pretextmap/main.nf +++ b/modules/nf-core/pretextmap/main.nf @@ -3,24 +3,25 @@ process PRETEXTMAP { tag "$meta.id" label 'process_single' - container "quay.io/sanger-tol/pretext:0.0.2-yy5-c3" + conda "${moduleDir}/environment.yml" + container "quay.io/sanger-tol/pretext:0.0.2-yy5-c4" input: - tuple val(meta), path(input) - tuple val(meta2), path(fasta), path(genome) + tuple val(meta), path(input) + tuple val(meta2), path(fasta), path(fai) output: - tuple val(meta), path("*.pretext"), emit: pretext - path "versions.yml", emit: versions + tuple val(meta), path("*.pretext") , emit: pretext + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def VERSION = "0.1.9" - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def reference = fasta ? "--reference ${fasta}" : "" + def VERSION = "0.1.9" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" """ if [[ $input == *.pairs.gz ]]; then @@ -39,21 +40,21 @@ process PRETEXTMAP { cat <<-END_VERSIONS > versions.yml "${task.process}": - PretextMap: $VERSION + pretextmap: $VERSION samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) END_VERSIONS """ stub: - def VERSION = "0.1.9" - def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "0.1.9" + def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.pretext cat <<-END_VERSIONS > versions.yml "${task.process}": - PretextMap: $VERSION - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' )) + pretextmap: $VERSION + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/pretextmap/meta.yml b/modules/nf-core/pretextmap/meta.yml index 47811974..d79295cd 100644 --- a/modules/nf-core/pretextmap/meta.yml +++ b/modules/nf-core/pretextmap/meta.yml @@ -6,38 +6,54 @@ keywords: - map tools: - "pretextmap": - description: "Paired REad TEXTure Mapper. Converts SAM formatted read pairs into genome contact maps." + description: "Paired REad TEXTure Mapper. Converts SAM formatted read pairs into + genome contact maps." homepage: "https://github.com/wtsi-hpag/PretextMap" documentation: "https://github.com/wtsi-hpag/PretextMap/blob/master/README.md" - - licence: "['MIT']" - + licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file or pairs formatted reads file - pattern: "*.{bam,cram,sam,pairs.gz}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file or pairs formatted reads file + pattern: "*.{bam,cram,sam,pairs.gz}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference sequence file + pattern: "*.{fasta,fna,fa}" + - fai: + type: file + description: Reference sequence index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - pretext: - type: file - description: pretext map - pattern: "*.pretext" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pretext": + type: file + description: pretext map + pattern: "*.pretext" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@marrip" - "@getrudeln" +maintainers: + - "@marrip" + - "@getrudeln" diff --git a/modules/nf-core/pretextmap/pretextmap.diff b/modules/nf-core/pretextmap/pretextmap.diff index 2494d6ce..7343eff2 100644 --- a/modules/nf-core/pretextmap/pretextmap.diff +++ b/modules/nf-core/pretextmap/pretextmap.diff @@ -1,64 +1,53 @@ Changes in module 'nf-core/pretextmap' +'modules/nf-core/pretextmap/meta.yml' is unchanged +Changes in 'pretextmap/main.nf': --- modules/nf-core/pretextmap/main.nf +++ modules/nf-core/pretextmap/main.nf -@@ -3,26 +3,24 @@ - tag "$meta.id" +@@ -4,9 +4,7 @@ label 'process_single' -- conda "bioconda::pretextmap=0.1.9 bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-f3591ce8609c7b3b33e5715333200aa5c163aa61%3A44321ab4d64f0b6d0c93abbd1406369d1b3da684-0': - 'biocontainers/mulled-v2-f3591ce8609c7b3b33e5715333200aa5c163aa61:44321ab4d64f0b6d0c93abbd1406369d1b3da684-0' }" -+ container "quay.io/sanger-tol/pretext:0.0.2-yy5-c3" ++ container "quay.io/sanger-tol/pretext:0.0.2-yy5-c4" input: -- tuple val(meta), path(input) -- path fasta -+ tuple val(meta), path(input) -+ tuple val(meta2), path(fasta), path(genome) - - output: - tuple val(meta), path("*.pretext"), emit: pretext -- path "versions.yml" , emit: versions -+ path "versions.yml", emit: versions - - when: + tuple val(meta), path(input) +@@ -20,6 +18,7 @@ task.ext.when == null || task.ext.when script: -- def args = task.ext.args ?: '' -- def prefix = task.ext.prefix ?: "${meta.id}" -- def reference = fasta ? "--reference ${fasta}" : "" -+ def VERSION = "0.1.9" -+ def args = task.ext.args ?: '' -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def reference = fasta ? "--reference ${fasta}" : "" - - """ - if [[ $input == *.pairs.gz ]]; then -@@ -41,19 +39,20 @@ ++ def VERSION = "0.1.9" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta}" : "" +@@ -41,19 +40,20 @@ cat <<-END_VERSIONS > versions.yml "${task.process}": - pretextmap: \$(PretextMap | grep "Version" | sed 's/PretextMap Version //g') -+ PretextMap: $VERSION ++ pretextmap: $VERSION samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) END_VERSIONS """ stub: -- def prefix = task.ext.prefix ?: "${meta.id}" -+ def VERSION = "0.1.9" -+ def prefix = task.ext.prefix ?: "${meta.id}" ++ def VERSION = "0.1.9" + def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.pretext cat <<-END_VERSIONS > versions.yml "${task.process}": - pretextmap: \$(PretextMap | grep "Version" | sed 's/PretextMap Version //g') -+ PretextMap: $VERSION - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' )) ++ pretextmap: $VERSION + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ +'modules/nf-core/pretextmap/environment.yml' is unchanged +'modules/nf-core/pretextmap/tests/main.nf.test' is unchanged +'modules/nf-core/pretextmap/tests/tags.yml' is unchanged +'modules/nf-core/pretextmap/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/pretextsnapshot/main.nf b/modules/nf-core/pretextsnapshot/main.nf index c896343c..39d72c74 100644 --- a/modules/nf-core/pretextsnapshot/main.nf +++ b/modules/nf-core/pretextsnapshot/main.nf @@ -2,7 +2,9 @@ process PRETEXTSNAPSHOT { tag "$meta.id" label 'process_single' - container "quay.io/sanger-tol/pretext:0.0.2-yy5-c3" + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'docker.io/ubuntu:20.04' }" input: tuple val(meta), path(pretext_map) @@ -15,10 +17,9 @@ process PRETEXTSNAPSHOT { task.ext.when == null || task.ext.when script: - def VERSION = "0.0.4" - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - + def VERSION = "0.0.4" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}." """ PretextSnapshot \\ $args \\ @@ -29,7 +30,7 @@ process PRETEXTSNAPSHOT { cat <<-END_VERSIONS > versions.yml "${task.process}": - PretextSnapshot: $VERSION + pretextsnapshot: $VERSION END_VERSIONS """ @@ -40,7 +41,7 @@ process PRETEXTSNAPSHOT { cat <<-END_VERSIONS > versions.yml "${task.process}": - PretextSnapshot: $VERSION + pretextsnapshot: $VERSION END_VERSIONS """ } diff --git a/modules/nf-core/pretextsnapshot/meta.yml b/modules/nf-core/pretextsnapshot/meta.yml index fe9cb17a..434da68e 100644 --- a/modules/nf-core/pretextsnapshot/meta.yml +++ b/modules/nf-core/pretextsnapshot/meta.yml @@ -13,33 +13,35 @@ tools: description: "Commandline image generator for Pretext Hi-C genome contact maps." homepage: "https://github.com/wtsi-hpag/PretextSnapshot" tool_dev_url: "https://github.com/wtsi-hpag/PretextSnapshot" - licence: "['https://github.com/wtsi-hpag/PretextSnapshot/blob/master/LICENSE']" - + licence: ["https://github.com/wtsi-hpag/PretextSnapshot/blob/master/LICENSE"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - pretext_map: - type: file - description: pretext hic map - pattern: "*.pretext" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pretext_map: + type: file + description: pretext hic map + pattern: "*.pretext" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - image: - type: file - description: image of a hic contact map - pattern: "*.{png,jpg,bmp}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{jpeg,png,bmp}": + type: file + description: image of a hic contact map + pattern: "*.{png,jpg,bmp}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@epaule" +maintainers: + - "@epaule" diff --git a/modules/nf-core/pretextsnapshot/pretextsnapshot.diff b/modules/nf-core/pretextsnapshot/pretextsnapshot.diff index caba07ac..edd414d5 100644 --- a/modules/nf-core/pretextsnapshot/pretextsnapshot.diff +++ b/modules/nf-core/pretextsnapshot/pretextsnapshot.diff @@ -1,33 +1,29 @@ Changes in module 'nf-core/pretextsnapshot' +'modules/nf-core/pretextsnapshot/meta.yml' is unchanged +Changes in 'pretextsnapshot/main.nf': --- modules/nf-core/pretextsnapshot/main.nf +++ modules/nf-core/pretextsnapshot/main.nf -@@ -2,11 +2,9 @@ - tag "$meta.id" - label 'process_single' +@@ -4,8 +4,7 @@ -- conda "bioconda::pretextsnapshot=0.0.4" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/pretextsnapshot:0.0.4--h7d875b9_0': - 'biocontainers/pretextsnapshot:0.0.4--h7d875b9_0' }" -- -+ 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : -+ 'docker.io/ubuntu:20.04' }" ++ 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'docker.io/ubuntu:20.04' }" + input: tuple val(meta), path(pretext_map) - -@@ -18,18 +16,32 @@ +@@ -18,18 +17,31 @@ task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' -- def prefix = task.ext.prefix ?: "${meta.id}" -+ def VERSION = "0.0.4" -+ def args = task.ext.args ?: '' -+ def prefix = task.ext.prefix ?: "${meta.id}" -+ def pretext_path = "${projectDir}/bin/PretextSnapshot/bin/PretextSnapshot" +- def prefix = task.ext.prefix ?: "${meta.id}." ++ def VERSION = "0.0.4" ++ def args = task.ext.args ?: '' ++ def prefix = task.ext.prefix ?: "${meta.id}." """ -- PretextSnapshot \\ -+ ${pretext_path} \\ + PretextSnapshot \\ $args \\ + --memory $task.memory \\ --map $pretext_map \\ @@ -53,4 +49,5 @@ Changes in module 'nf-core/pretextsnapshot' """ } +'modules/nf-core/pretextsnapshot/environment.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/seqtk/cutn/environment.yml b/modules/nf-core/seqtk/cutn/environment.yml index a57afbb6..693aa5c1 100644 --- a/modules/nf-core/seqtk/cutn/environment.yml +++ b/modules/nf-core/seqtk/cutn/environment.yml @@ -1,7 +1,5 @@ -name: seqtk_cutn channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::seqtk=1.4 diff --git a/modules/nf-core/seqtk/cutn/meta.yml b/modules/nf-core/seqtk/cutn/meta.yml index 10828679..2e39a477 100644 --- a/modules/nf-core/seqtk/cutn/meta.yml +++ b/modules/nf-core/seqtk/cutn/meta.yml @@ -6,35 +6,40 @@ keywords: - seqtk tools: - seqtk: - description: Seqtk is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format. Seqtk mergepe command merges pair-end reads into one interleaved file. + description: Seqtk is a fast and lightweight tool for processing sequences in + the FASTA or FASTQ format. Seqtk mergepe command merges pair-end reads into + one interleaved file. homepage: https://github.com/lh3/seqtk documentation: https://docs.csc.fi/apps/seqtk/ tool_dev_url: https://github.com/lh3/seqtk licence: ["MIT"] + identifier: biotools:seqtk input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: A single fasta file to be split. - pattern: "*.{fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: A single fasta file to be split. + pattern: "*.{fasta}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bed: - type: file - description: The output bed which summarised locations of cuts - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: The output bed which summarised locations of cuts + pattern: "*.{bed}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@DLBPointon" maintainers: diff --git a/modules/nf-core/tabix/bgziptabix/environment.yml b/modules/nf-core/tabix/bgziptabix/environment.yml index 028461c9..017c259d 100644 --- a/modules/nf-core/tabix/bgziptabix/environment.yml +++ b/modules/nf-core/tabix/bgziptabix/environment.yml @@ -1,7 +1,7 @@ -name: tabix_bgziptabix channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index f9482690..22f37a77 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIPTABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'biocontainers/tabix:1.11--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(input) @@ -24,7 +24,7 @@ process TABIX_BGZIPTABIX { def prefix = task.ext.prefix ?: "${meta.id}" """ bgzip --threads ${task.cpus} -c $args $input > ${prefix}.${input.getExtension()}.gz - tabix $args2 ${prefix}.${input.getExtension()}.gz + tabix --threads ${task.cpus} $args2 ${prefix}.${input.getExtension()}.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -34,10 +34,11 @@ process TABIX_BGZIPTABIX { stub: def prefix = task.ext.prefix ?: "${meta.id}" + def args2 = task.ext.args2 ?: '' + def index = args2.contains("-C ") || args2.contains("--csi") ? "csi" : "tbi" """ - touch ${prefix}.${input.getExtension()}.gz - touch ${prefix}.${input.getExtension()}.gz.tbi - touch ${prefix}.${input.getExtension()}.gz.csi + echo "" | gzip > ${prefix}.${input.getExtension()}.gz + touch ${prefix}.${input.getExtension()}.gz.${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/bgziptabix/meta.yml b/modules/nf-core/tabix/bgziptabix/meta.yml index 438aba4d..806fbc12 100644 --- a/modules/nf-core/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/tabix/bgziptabix/meta.yml @@ -13,38 +13,50 @@ tools: documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file - pattern: "*.{bed,gff,sam,vcf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Sorted tab-delimited genome file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gz: - type: file - description: Output compressed file - pattern: "*.{gz}" - - tbi: - type: file - description: tabix index file - pattern: "*.{gz.tbi}" - - csi: - type: file - description: tabix alternate index file - pattern: "*.{gz.csi}" + - gz_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.tbi": + type: file + description: tabix index file + pattern: "*.tbi" + - gz_csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.csi": + type: file + description: csi index file + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@DLBPointon" diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml b/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml index f91e216f..27868a44 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml +++ b/modules/nf-core/ucsc/bedgraphtobigwig/environment.yml @@ -1,7 +1,5 @@ -name: ucsc_bedgraphtobigwig channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::ucsc-bedgraphtobigwig=445 + - bioconda::ucsc-bedgraphtobigwig=469 diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf index bff0b00a..81cdee95 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/main.nf +++ b/modules/nf-core/ucsc/bedgraphtobigwig/main.nf @@ -5,8 +5,8 @@ process UCSC_BEDGRAPHTOBIGWIG { // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:445--h954228d_0' : - 'biocontainers/ucsc-bedgraphtobigwig:445--h954228d_0' }" + 'https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:469--h9b8f530_0' : + 'biocontainers/ucsc-bedgraphtobigwig:469--h9b8f530_0' }" input: tuple val(meta), path(bedgraph) @@ -22,7 +22,7 @@ process UCSC_BEDGRAPHTOBIGWIG { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '445' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ bedGraphToBigWig \\ $bedgraph \\ @@ -37,7 +37,7 @@ process UCSC_BEDGRAPHTOBIGWIG { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '445' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '469' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.bigWig diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml b/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml index a60118ab..5d42cbde 100755 --- a/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml +++ b/modules/nf-core/ucsc/bedgraphtobigwig/meta.yml @@ -12,34 +12,37 @@ tools: homepage: http://hgdownload.cse.ucsc.edu/admin/exe/ documentation: https://genome.ucsc.edu/goldenPath/help/bigWig.html licence: ["varies; see http://genome.ucsc.edu/license"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bedgraph: - type: file - description: bedGraph file - pattern: "*.{bedGraph}" - - sizes: - type: file - description: chromosome sizes file - pattern: "*.{sizes}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedGraph}" + - - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bigwig: - type: file - description: bigWig file - pattern: "*.{bigWig}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bigWig": + type: file + description: bigWig file + pattern: "*.{bigWig}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test index 6209ddaf..94a799ef 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test @@ -9,17 +9,14 @@ nextflow_process { tag "ucsc/bedgraphtobigwig" test("Should run without failures") { - when { - params { - outdir = "$outputDir" - } process { """ - input[0] = [ [ id:'test' ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_bedgraph'], checkIfExists: true) ] - ] - input[1] = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bedgraph/test.bedgraph", checkIfExists: true) + ]) + input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true)) """ } } @@ -30,7 +27,27 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } + test("stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bedgraph/test.bedgraph", checkIfExists: true) + ]) + input[1] = Channel.of(file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true)) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap index 6b0de0ff..7c731f65 100644 --- a/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap +++ b/modules/nf-core/ucsc/bedgraphtobigwig/tests/main.nf.test.snap @@ -1,4 +1,37 @@ { + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + ], + "bigwig": [ + [ + { + "id": "test" + }, + "test.bigWig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:47:58.558813949" + }, "Should run without failures": { "content": [ { @@ -11,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,93b027527145a243903a3c687c3453b8" + "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" ], "bigwig": [ [ @@ -22,10 +55,14 @@ ] ], "versions": [ - "versions.yml:md5,93b027527145a243903a3c687c3453b8" + "versions.yml:md5,db26514184acfdf220bb2f061382cf8c" ] } ], - "timestamp": "2023-10-18T04:06:47.826602" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-10-18T10:47:36.476844229" } } \ No newline at end of file diff --git a/modules/nf-core/ucsc/bedtobigbed/main.nf b/modules/nf-core/ucsc/bedtobigbed/main.nf index 1e40375d..9902560f 100644 --- a/modules/nf-core/ucsc/bedtobigbed/main.nf +++ b/modules/nf-core/ucsc/bedtobigbed/main.nf @@ -3,10 +3,10 @@ process UCSC_BEDTOBIGBED { label 'process_single' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - conda "bioconda::ucsc-bedtobigbed=377" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-bedtobigbed:377--ha8a8165_3' : - 'biocontainers/ucsc-bedtobigbed:377--ha8a8165_3' }" + 'https://depot.galaxyproject.org/singularity/ucsc-bedtobigbed:447--h954228d_0' : + 'biocontainers/ucsc-bedtobigbed:447--h954228d_0' }" input: tuple val(meta), path(bed) @@ -24,7 +24,7 @@ process UCSC_BEDTOBIGBED { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def as_option = autosql ? "-as=${autosql}" : "" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '447' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ bedToBigBed \\ $bed \\ @@ -41,7 +41,7 @@ process UCSC_BEDTOBIGBED { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '447' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.bigBed diff --git a/modules/nf-core/ucsc/bedtobigbed/meta.yml b/modules/nf-core/ucsc/bedtobigbed/meta.yml index 8e9e5291..6afc3148 100755 --- a/modules/nf-core/ucsc/bedtobigbed/meta.yml +++ b/modules/nf-core/ucsc/bedtobigbed/meta.yml @@ -12,40 +12,42 @@ tools: homepage: http://hgdownload.cse.ucsc.edu/admin/exe/ documentation: https://genome.ucsc.edu/goldenPath/help/bigBed.html licence: ["varies; see http://genome.ucsc.edu/license"] - + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bed: - type: file - description: bed file - pattern: "*.{bed}" - - sizes: - type: file - description: chromosome sizes file - pattern: "*.{sizes}" - - autosql: - type: file - description: autoSql file to describe the columns of the BED file - pattern: "*.{as}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: bed file + pattern: "*.{bed}" + - - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" + - - autosql: + type: file + description: autoSql file to describe the columns of the BED file + pattern: "*.{as}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bigbed: - type: file - description: bigBed file - pattern: "*.{bigBed}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bigBed": + type: file + description: bigBed file + pattern: "*.{bigBed}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/windowmasker/mkcounts/environment.yml b/modules/nf-core/windowmasker/mkcounts/environment.yml index 15887425..777e097e 100644 --- a/modules/nf-core/windowmasker/mkcounts/environment.yml +++ b/modules/nf-core/windowmasker/mkcounts/environment.yml @@ -1,7 +1,5 @@ -name: windowmasker_mkcounts channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::blast=2.14.0 + - bioconda::blast=2.15.0 diff --git a/modules/nf-core/windowmasker/mkcounts/main.nf b/modules/nf-core/windowmasker/mkcounts/main.nf index 6bfd175e..406f7761 100644 --- a/modules/nf-core/windowmasker/mkcounts/main.nf +++ b/modules/nf-core/windowmasker/mkcounts/main.nf @@ -4,8 +4,8 @@ process WINDOWMASKER_MKCOUNTS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/blast:2.14.0--h7d5a4b4_1': - 'biocontainers/blast:2.14.0--h7d5a4b4_1' }" + 'https://depot.galaxyproject.org/singularity/blast:2.15.0--pl5321h6f7f691_1': + 'biocontainers/blast:2.15.0--pl5321h6f7f691_1' }" input: tuple val(meta), path(ref) @@ -21,11 +21,11 @@ process WINDOWMASKER_MKCOUNTS { def args = task.ext.args ?: "" def prefix = task.ext.prefix ?: "${meta.id}" - def memory = 3072 + def memory = 3072 if (!task.memory) { log.info '[WINDOWMASKER: MK_COUNTS] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - memory = (task.memory.toMega()).intValue() + memory = (task.memory.toMega()).intValue() } """ diff --git a/modules/nf-core/windowmasker/mkcounts/meta.yml b/modules/nf-core/windowmasker/mkcounts/meta.yml index 436ed7a5..825a0674 100644 --- a/modules/nf-core/windowmasker/mkcounts/meta.yml +++ b/modules/nf-core/windowmasker/mkcounts/meta.yml @@ -11,31 +11,32 @@ tools: homepage: https://github.com/ncbi/ncbi-cxx-toolkit-public documentation: https://ncbi.github.io/cxx-toolkit/ licence: ["MIT"] + identifier: biotools:windowmasker input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ref: - type: file - description: An input nucleotide fasta file. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ref: + type: file + description: An input nucleotide fasta file. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals: - type: file - description: | - An output file containing genomic locations of low - complexity and highly repetitive regions - pattern: "${prefix}.txt" + - counts: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt": + type: file + description: A file containing frequency counts of repetitive units. + pattern: "*.txt" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@DLBPointon" maintainers: diff --git a/modules/nf-core/windowmasker/ustat/environment.yml b/modules/nf-core/windowmasker/ustat/environment.yml index a97fdd9d..777e097e 100644 --- a/modules/nf-core/windowmasker/ustat/environment.yml +++ b/modules/nf-core/windowmasker/ustat/environment.yml @@ -1,7 +1,5 @@ -name: windowmasker_ustat channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::blast=2.14.0 + - bioconda::blast=2.15.0 diff --git a/modules/nf-core/windowmasker/ustat/main.nf b/modules/nf-core/windowmasker/ustat/main.nf index 2cc3df63..7a7d29f6 100644 --- a/modules/nf-core/windowmasker/ustat/main.nf +++ b/modules/nf-core/windowmasker/ustat/main.nf @@ -4,8 +4,8 @@ process WINDOWMASKER_USTAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/blast:2.14.0--h7d5a4b4_1': - 'biocontainers/blast:2.14.0--h7d5a4b4_1' }" + 'https://depot.galaxyproject.org/singularity/blast:2.15.0--pl5321h6f7f691_1': + 'biocontainers/blast:2.15.0--pl5321h6f7f691_1' }" input: tuple val(meta) , path(counts) diff --git a/modules/nf-core/windowmasker/ustat/meta.yml b/modules/nf-core/windowmasker/ustat/meta.yml index 6a07c935..bc51a934 100644 --- a/modules/nf-core/windowmasker/ustat/meta.yml +++ b/modules/nf-core/windowmasker/ustat/meta.yml @@ -1,5 +1,6 @@ name: windowmasker_ustat -description: A program to take a counts file and creates a file of genomic co-ordinates to be masked. +description: A program to take a counts file and creates a file of genomic co-ordinates + to be masked. keywords: - fasta - interval @@ -11,39 +12,39 @@ tools: homepage: https://github.com/ncbi/ncbi-cxx-toolkit-public documentation: https://ncbi.github.io/cxx-toolkit/ licence: ["MIT"] + identifier: biotools:windowmasker input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - counts: - type: file - description: Contains count data of repetitive regions. - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ref: - type: file - description: An input nucleotide fasta file. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - counts: + type: file + description: Contains count data of repetitive regions. + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ref: + type: file + description: An input nucleotide fasta file. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - wm_intervals: - type: file - description: | - An output file containing genomic locations of low - complexity and highly repetitive regions - pattern: "${output}" + - intervals: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}: + type: file + description: intervals - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@DLBPointon" maintainers: diff --git a/subworkflows/local/busco_annotation.nf b/subworkflows/local/busco_annotation.nf index 40c85166..75182788 100755 --- a/subworkflows/local/busco_annotation.nf +++ b/subworkflows/local/busco_annotation.nf @@ -8,7 +8,7 @@ // // MODULE IMPORT BLOCK // -include { BUSCO } from '../../modules/nf-core/busco/main' +include { BUSCO_BUSCO } from '../../modules/nf-core/busco/busco/main' include { UCSC_BEDTOBIGBED } from '../../modules/nf-core/ucsc/bedtobigbed/main' include { BEDTOOLS_SORT } from '../../modules/nf-core/bedtools/sort/main' include { EXTRACT_BUSCOGENE } from '../../modules/local/extract_buscogene' @@ -38,16 +38,16 @@ workflow BUSCO_ANNOTATION { // MODULE: RUN BUSCO TO OBTAIN FULL_TABLE.CSV // EMITS FULL_TABLE.CSV // - BUSCO ( + BUSCO_BUSCO ( reference_tuple, ch_busco_mode, lineageinfo, lineagespath, [] ) - ch_versions = ch_versions.mix(BUSCO.out.versions.first()) + ch_versions = ch_versions.mix(BUSCO_BUSCO.out.versions.first()) - ch_grab = GrabFiles(BUSCO.out.busco_dir) + ch_grab = GrabFiles(BUSCO_BUSCO.out.busco_dir) // // MODULE: EXTRACT THE BUSCO GENES FOUND IN REFERENCE @@ -92,7 +92,7 @@ workflow BUSCO_ANNOTATION { // LOGIC: AGGREGATE DATA AND SORT BRANCH ON CLASS // lineageinfo - .combine(BUSCO.out.busco_dir) + .combine(BUSCO_BUSCO.out.busco_dir) .combine(ancestral_table) .branch { lep: it[0].split('_')[0] == "lepidoptera" From e93fd9a5cc7a00f22ecd055f369e188db8434883 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 14:38:41 +0000 Subject: [PATCH 07/65] Updating all easy to update modules --- .../bedtools/intersect/tests/main.nf.test | 90 +++ .../intersect/tests/main.nf.test.snap | 101 +++ .../bedtools/intersect/tests/nextflow.config | 5 + .../nf-core/bedtools/intersect/tests/tags.yml | 2 + .../bedtools/makewindows/tests/main.nf.test | 58 ++ .../makewindows/tests/main.nf.test.snap | 68 ++ .../makewindows/tests/nextflow.config | 5 + .../nf-core/bedtools/merge/tests/main.nf.test | 34 + .../bedtools/merge/tests/main.nf.test.snap | 35 + .../bedtools/merge/tests/nextflow.config | 7 + modules/nf-core/bedtools/merge/tests/tags.yml | 2 + .../nf-core/bedtools/sort/tests/main.nf.test | 58 ++ .../bedtools/sort/tests/main.nf.test.snap | 68 ++ .../bedtools/sort/tests/nextflow.config | 8 + modules/nf-core/bedtools/sort/tests/tags.yml | 2 + .../nf-core/busco/busco/tests/main.nf.test | 415 ++++++++++++ .../busco/busco/tests/main.nf.test.snap | 230 +++++++ .../busco/tests/nextflow.augustus.config | 5 + .../nf-core/busco/busco/tests/nextflow.config | 5 + .../busco/busco/tests/nextflow.metaeuk.config | 5 + .../nf-core/busco/busco/tests/old_test.yml | 624 ++++++++++++++++++ modules/nf-core/busco/busco/tests/tags.yml | 2 + .../nf-core/bwamem2/index/tests/main.nf.test | 31 + .../bwamem2/index/tests/main.nf.test.snap | 47 ++ modules/nf-core/bwamem2/index/tests/tags.yml | 2 + modules/nf-core/gnu/sort/tests/main.nf.test | 120 ++++ .../nf-core/gnu/sort/tests/main.nf.test.snap | 164 +++++ .../gnu/sort/tests/sort_complex.config | 6 + .../gnu/sort/tests/sort_simple_bed.config | 6 + .../gnu/sort/tests/sort_simple_genome.config | 6 + modules/nf-core/gnu/sort/tests/tags.yml | 2 + .../nf-core/minimap2/index/tests/main.nf.test | 32 + .../minimap2/index/tests/main.nf.test.snap | 68 ++ modules/nf-core/minimap2/index/tests/tags.yml | 2 + .../nf-core/miniprot/align/tests/main.nf.test | 89 +++ .../miniprot/align/tests/main.nf.test.snap | 119 ++++ .../miniprot/align/tests/nextflow.gff.config | 5 + .../miniprot/align/tests/nextflow.paf.config | 5 + .../nf-core/miniprot/index/tests/main.nf.test | 51 ++ .../miniprot/index/tests/main.nf.test.snap | 68 ++ .../paftools/sam2paf/tests/main.nf.test | 57 ++ .../paftools/sam2paf/tests/main.nf.test.snap | 68 ++ .../nf-core/samtools/faidx/tests/main.nf.test | 122 ++++ .../samtools/faidx/tests/main.nf.test.snap | 249 +++++++ .../samtools/faidx/tests/nextflow.config | 7 + .../samtools/faidx/tests/nextflow2.config | 6 + modules/nf-core/samtools/faidx/tests/tags.yml | 2 + .../samtools/markdup/tests/main.nf.test | 90 +++ .../samtools/markdup/tests/main.nf.test.snap | 96 +++ .../samtools/markdup/tests/nextflow.config | 14 + .../samtools/sort/tests/nextflow_cram.config | 8 + modules/nf-core/seqtk/cutn/tests/main.nf.test | 57 ++ .../seqtk/cutn/tests/main.nf.test.snap | 70 ++ modules/nf-core/seqtk/cutn/tests/tags.yml | 2 + .../tabix/bgziptabix/tests/main.nf.test | 123 ++++ .../tabix/bgziptabix/tests/main.nf.test.snap | 206 ++++++ .../tabix/bgziptabix/tests/tabix_csi.config | 5 + .../tabix/bgziptabix/tests/tabix_tbi.config | 5 + .../nf-core/tabix/bgziptabix/tests/tags.yml | 2 + .../windowmasker/mkcounts/tests/main.nf.test | 59 ++ .../mkcounts/tests/main.nf.test.snap | 60 ++ .../mkcounts/tests/nextflow.config | 5 + .../windowmasker/mkcounts/tests/tags.yml | 2 + .../windowmasker/ustat/tests/main.nf.test | 66 ++ .../ustat/tests/main.nf.test.snap | 60 ++ .../windowmasker/ustat/tests/nextflow.config | 5 + .../nf-core/windowmasker/ustat/tests/tags.yml | 2 + 67 files changed, 4100 insertions(+) create mode 100644 modules/nf-core/bedtools/intersect/tests/main.nf.test create mode 100644 modules/nf-core/bedtools/intersect/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedtools/intersect/tests/nextflow.config create mode 100644 modules/nf-core/bedtools/intersect/tests/tags.yml create mode 100644 modules/nf-core/bedtools/makewindows/tests/main.nf.test create mode 100644 modules/nf-core/bedtools/makewindows/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedtools/makewindows/tests/nextflow.config create mode 100644 modules/nf-core/bedtools/merge/tests/main.nf.test create mode 100644 modules/nf-core/bedtools/merge/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedtools/merge/tests/nextflow.config create mode 100644 modules/nf-core/bedtools/merge/tests/tags.yml create mode 100644 modules/nf-core/bedtools/sort/tests/main.nf.test create mode 100644 modules/nf-core/bedtools/sort/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedtools/sort/tests/nextflow.config create mode 100644 modules/nf-core/bedtools/sort/tests/tags.yml create mode 100644 modules/nf-core/busco/busco/tests/main.nf.test create mode 100644 modules/nf-core/busco/busco/tests/main.nf.test.snap create mode 100644 modules/nf-core/busco/busco/tests/nextflow.augustus.config create mode 100644 modules/nf-core/busco/busco/tests/nextflow.config create mode 100644 modules/nf-core/busco/busco/tests/nextflow.metaeuk.config create mode 100644 modules/nf-core/busco/busco/tests/old_test.yml create mode 100644 modules/nf-core/busco/busco/tests/tags.yml create mode 100644 modules/nf-core/bwamem2/index/tests/main.nf.test create mode 100644 modules/nf-core/bwamem2/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwamem2/index/tests/tags.yml create mode 100644 modules/nf-core/gnu/sort/tests/main.nf.test create mode 100644 modules/nf-core/gnu/sort/tests/main.nf.test.snap create mode 100644 modules/nf-core/gnu/sort/tests/sort_complex.config create mode 100644 modules/nf-core/gnu/sort/tests/sort_simple_bed.config create mode 100644 modules/nf-core/gnu/sort/tests/sort_simple_genome.config create mode 100644 modules/nf-core/gnu/sort/tests/tags.yml create mode 100644 modules/nf-core/minimap2/index/tests/main.nf.test create mode 100644 modules/nf-core/minimap2/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/minimap2/index/tests/tags.yml create mode 100644 modules/nf-core/miniprot/align/tests/main.nf.test create mode 100644 modules/nf-core/miniprot/align/tests/main.nf.test.snap create mode 100644 modules/nf-core/miniprot/align/tests/nextflow.gff.config create mode 100644 modules/nf-core/miniprot/align/tests/nextflow.paf.config create mode 100644 modules/nf-core/miniprot/index/tests/main.nf.test create mode 100644 modules/nf-core/miniprot/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/paftools/sam2paf/tests/main.nf.test create mode 100644 modules/nf-core/paftools/sam2paf/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test create mode 100644 modules/nf-core/samtools/faidx/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow.config create mode 100644 modules/nf-core/samtools/faidx/tests/nextflow2.config create mode 100644 modules/nf-core/samtools/faidx/tests/tags.yml create mode 100644 modules/nf-core/samtools/markdup/tests/main.nf.test create mode 100644 modules/nf-core/samtools/markdup/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/markdup/tests/nextflow.config create mode 100644 modules/nf-core/samtools/sort/tests/nextflow_cram.config create mode 100644 modules/nf-core/seqtk/cutn/tests/main.nf.test create mode 100644 modules/nf-core/seqtk/cutn/tests/main.nf.test.snap create mode 100644 modules/nf-core/seqtk/cutn/tests/tags.yml create mode 100644 modules/nf-core/tabix/bgziptabix/tests/main.nf.test create mode 100644 modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tags.yml create mode 100644 modules/nf-core/windowmasker/mkcounts/tests/main.nf.test create mode 100644 modules/nf-core/windowmasker/mkcounts/tests/main.nf.test.snap create mode 100644 modules/nf-core/windowmasker/mkcounts/tests/nextflow.config create mode 100644 modules/nf-core/windowmasker/mkcounts/tests/tags.yml create mode 100644 modules/nf-core/windowmasker/ustat/tests/main.nf.test create mode 100644 modules/nf-core/windowmasker/ustat/tests/main.nf.test.snap create mode 100644 modules/nf-core/windowmasker/ustat/tests/nextflow.config create mode 100644 modules/nf-core/windowmasker/ustat/tests/tags.yml diff --git a/modules/nf-core/bedtools/intersect/tests/main.nf.test b/modules/nf-core/bedtools/intersect/tests/main.nf.test new file mode 100644 index 00000000..cd770946 --- /dev/null +++ b/modules/nf-core/bedtools/intersect/tests/main.nf.test @@ -0,0 +1,90 @@ +nextflow_process { + + name "Test Process BEDTOOLS_INTERSECT" + script "../main.nf" + process "BEDTOOLS_INTERSECT" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/intersect" + + test("sarscov2 - bed - bed") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test2.bed', checkIfExists: true) + ] + + input[1] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true) + ] + + input[1] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bed - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test2.bed', checkIfExists: true) + ] + + input[1] = [[:], []] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bedtools/intersect/tests/main.nf.test.snap b/modules/nf-core/bedtools/intersect/tests/main.nf.test.snap new file mode 100644 index 00000000..b748dd49 --- /dev/null +++ b/modules/nf-core/bedtools/intersect/tests/main.nf.test.snap @@ -0,0 +1,101 @@ +{ + "sarscov2 - bam - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.bam:md5,738324efe2b1e442ceb6539a630c3fe6" + ] + ], + "1": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ], + "intersect": [ + [ + { + "id": "test" + }, + "test_out.bam:md5,738324efe2b1e442ceb6539a630c3fe6" + ] + ], + "versions": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-17T20:55:57.454847668" + }, + "sarscov2 - bed - bed": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,afcbf01c2f2013aad71dbe8e34f2c15c" + ] + ], + "1": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ], + "intersect": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,afcbf01c2f2013aad71dbe8e34f2c15c" + ] + ], + "versions": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-17T20:55:49.072132931" + }, + "sarscov2 - bed - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ], + "intersect": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,42ba439339672f4a9193f0f0fe7a7f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-17T20:56:06.259192552" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/intersect/tests/nextflow.config b/modules/nf-core/bedtools/intersect/tests/nextflow.config new file mode 100644 index 00000000..f1f9e693 --- /dev/null +++ b/modules/nf-core/bedtools/intersect/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BEDTOOLS_INTERSECT { + ext.prefix = { "${meta.id}_out" } + } +} diff --git a/modules/nf-core/bedtools/intersect/tests/tags.yml b/modules/nf-core/bedtools/intersect/tests/tags.yml new file mode 100644 index 00000000..6219cc40 --- /dev/null +++ b/modules/nf-core/bedtools/intersect/tests/tags.yml @@ -0,0 +1,2 @@ +bedtools/intersect: + - "modules/nf-core/bedtools/intersect/**" diff --git a/modules/nf-core/bedtools/makewindows/tests/main.nf.test b/modules/nf-core/bedtools/makewindows/tests/main.nf.test new file mode 100644 index 00000000..b27e59b6 --- /dev/null +++ b/modules/nf-core/bedtools/makewindows/tests/main.nf.test @@ -0,0 +1,58 @@ + +nextflow_process { + + name "Test Process BEDTOOLS_MAKEWINDOWS" + script "../main.nf" + process "BEDTOOLS_MAKEWINDOWS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/makewindows" + + test("test-bedtools-makewindows-bed") { + + when { + process { + """ + input[0] = [ + [ id:'test2'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-bedtools-makewindows-fai") { + + when { + process { + """ + input[0] = [ + [ id:'test2'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/bedtools/makewindows/tests/main.nf.test.snap b/modules/nf-core/bedtools/makewindows/tests/main.nf.test.snap new file mode 100644 index 00000000..22cfbc17 --- /dev/null +++ b/modules/nf-core/bedtools/makewindows/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test-bedtools-makewindows-fai": { + "content": [ + { + "0": [ + [ + { + "id": "test2" + }, + "test2.bed:md5,622d1f62786fe4239b76c53168f21c54" + ] + ], + "1": [ + "versions.yml:md5,f797078cc8b8bac7e6906685d4867be5" + ], + "bed": [ + [ + { + "id": "test2" + }, + "test2.bed:md5,622d1f62786fe4239b76c53168f21c54" + ] + ], + "versions": [ + "versions.yml:md5,f797078cc8b8bac7e6906685d4867be5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T14:03:31.430455" + }, + "test-bedtools-makewindows-bed": { + "content": [ + { + "0": [ + [ + { + "id": "test2" + }, + "test2.bed:md5,0cf6ed2b6f470cd44a247da74ca4fe4e" + ] + ], + "1": [ + "versions.yml:md5,f797078cc8b8bac7e6906685d4867be5" + ], + "bed": [ + [ + { + "id": "test2" + }, + "test2.bed:md5,0cf6ed2b6f470cd44a247da74ca4fe4e" + ] + ], + "versions": [ + "versions.yml:md5,f797078cc8b8bac7e6906685d4867be5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T14:03:27.118372" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/makewindows/tests/nextflow.config b/modules/nf-core/bedtools/makewindows/tests/nextflow.config new file mode 100644 index 00000000..fa16733f --- /dev/null +++ b/modules/nf-core/bedtools/makewindows/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BEDTOOLS_MAKEWINDOWS { + ext.args = '-w 50 ' + } +} diff --git a/modules/nf-core/bedtools/merge/tests/main.nf.test b/modules/nf-core/bedtools/merge/tests/main.nf.test new file mode 100644 index 00000000..2959d6b9 --- /dev/null +++ b/modules/nf-core/bedtools/merge/tests/main.nf.test @@ -0,0 +1,34 @@ +nextflow_process { + + name "Test Process BEDTOOLS_MERGE" + script "../main.nf" + config "./nextflow.config" + process "BEDTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/merge" + + test("test_bedtools_merge") { + + when { + process { + """ + input[0] = [ [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/merge/tests/main.nf.test.snap b/modules/nf-core/bedtools/merge/tests/main.nf.test.snap new file mode 100644 index 00000000..ee6c4e63 --- /dev/null +++ b/modules/nf-core/bedtools/merge/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test_bedtools_merge": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,0cf6ed2b6f470cd44a247da74ca4fe4e" + ] + ], + "1": [ + "versions.yml:md5,2d134badb4cd1e4e903696c7967f28d6" + ], + "bed": [ + [ + { + "id": "test" + }, + "test_out.bed:md5,0cf6ed2b6f470cd44a247da74ca4fe4e" + ] + ], + "versions": [ + "versions.yml:md5,2d134badb4cd1e4e903696c7967f28d6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T17:07:09.721153" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/merge/tests/nextflow.config b/modules/nf-core/bedtools/merge/tests/nextflow.config new file mode 100644 index 00000000..16444e98 --- /dev/null +++ b/modules/nf-core/bedtools/merge/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: BEDTOOLS_MERGE { + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/bedtools/merge/tests/tags.yml b/modules/nf-core/bedtools/merge/tests/tags.yml new file mode 100644 index 00000000..60c8cad1 --- /dev/null +++ b/modules/nf-core/bedtools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +bedtools/merge: + - "modules/nf-core/bedtools/merge/**" diff --git a/modules/nf-core/bedtools/sort/tests/main.nf.test b/modules/nf-core/bedtools/sort/tests/main.nf.test new file mode 100644 index 00000000..b1f36dd9 --- /dev/null +++ b/modules/nf-core/bedtools/sort/tests/main.nf.test @@ -0,0 +1,58 @@ +nextflow_process { + + name "Test Process BEDTOOLS_SORT" + script "../main.nf" + config "./nextflow.config" + process "BEDTOOLS_SORT" + + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/sort" + + test("test_bedtools_sort") { + + when { + process { + """ + input[0] = [ [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + + test("test_bedtools_sort_with_genome") { + + when { + process { + """ + input[0] = [ [ id:'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/sort/tests/main.nf.test.snap b/modules/nf-core/bedtools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..f10e8b98 --- /dev/null +++ b/modules/nf-core/bedtools/sort/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test_bedtools_sort_with_genome": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.testtext:md5,fe4053cf4de3aebbdfc3be2efb125a74" + ] + ], + "1": [ + "versions.yml:md5,cdbae2c7ebc41e534aaf0835779061f8" + ], + "sorted": [ + [ + { + "id": "test" + }, + "test_out.testtext:md5,fe4053cf4de3aebbdfc3be2efb125a74" + ] + ], + "versions": [ + "versions.yml:md5,cdbae2c7ebc41e534aaf0835779061f8" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-19T10:13:11.830452" + }, + "test_bedtools_sort": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_out.testtext:md5,fe4053cf4de3aebbdfc3be2efb125a74" + ] + ], + "1": [ + "versions.yml:md5,cdbae2c7ebc41e534aaf0835779061f8" + ], + "sorted": [ + [ + { + "id": "test" + }, + "test_out.testtext:md5,fe4053cf4de3aebbdfc3be2efb125a74" + ] + ], + "versions": [ + "versions.yml:md5,cdbae2c7ebc41e534aaf0835779061f8" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-19T10:16:40.535947" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/sort/tests/nextflow.config b/modules/nf-core/bedtools/sort/tests/nextflow.config new file mode 100644 index 00000000..f203c99c --- /dev/null +++ b/modules/nf-core/bedtools/sort/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + withName: BEDTOOLS_SORT { + ext.prefix = { "${meta.id}_out" } + ext.suffix = "testtext" + } + +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/sort/tests/tags.yml b/modules/nf-core/bedtools/sort/tests/tags.yml new file mode 100644 index 00000000..47c85eea --- /dev/null +++ b/modules/nf-core/bedtools/sort/tests/tags.yml @@ -0,0 +1,2 @@ +bedtools/sort: + - "modules/nf-core/bedtools/sort/**" diff --git a/modules/nf-core/busco/busco/tests/main.nf.test b/modules/nf-core/busco/busco/tests/main.nf.test new file mode 100644 index 00000000..bb7b49a9 --- /dev/null +++ b/modules/nf-core/busco/busco/tests/main.nf.test @@ -0,0 +1,415 @@ +nextflow_process { + + name "Test Process BUSCO_BUSCO" + script "../main.nf" + process "BUSCO_BUSCO" + + tag "modules" + tag "modules_nfcore" + tag "busco" + tag "busco/busco" + + test("test_busco_genome_single_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' // Launch with 'auto' to use --auto-lineage, and specified lineages // 'auto' removed from test due to memory issues + input[3] = [] // Download busco lineage + input[4] = [] // No config + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + } + + test("test_busco_genome_multi_fasta") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/genome.fasta', checkIfExists: true) + ] + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1][0]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_txt[0][1][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1][0]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + with(path(process.out.short_summaries_json[0][1][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1][0]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(file(process.out.seq_dir[0][1][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_metaeuk") { + + config './nextflow.metaeuk.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_eukaryote_augustus") { + + config './nextflow.augustus.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'eukaryota_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + assert snapshot( + process.out.batch_summary[0][1], + process.out.versions[0] + ).match() + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Augustus did not recognize any genes') + + } + + assert process.out.short_summaries_json == [] + assert process.out.short_summaries_txt == [] + assert process.out.missing_busco_list == [] + assert process.out.full_table == [] + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_protein") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/candidatus_portiera_aleyrodidarum/genome/proteome.fasta', checkIfExists: true) + ] + input[1] = 'proteins' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + + assert process.out.single_copy_proteins == [] + assert process.out.translated_dir == [] + } + + } + + test("test_busco_transcriptome") { + + config './nextflow.config' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) + ] + input[1] = 'transcriptome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assert process.success + + with(path(process.out.short_summaries_txt[0][1]).text) { + assert contains('BUSCO version') + assert contains('The lineage dataset is') + assert contains('BUSCO was run in mode') + assert contains('Complete BUSCOs') + assert contains('Missing BUSCOs') + assert contains('Dependencies and versions') + } + + with(path(process.out.short_summaries_json[0][1]).text) { + assert contains('one_line_summary') + assert contains('mode') + assert contains('dataset') + } + + assert snapshot( + process.out.batch_summary[0][1], + process.out.full_table[0][1], + process.out.missing_busco_list[0][1], + process.out.translated_dir[0][1], + process.out.single_copy_proteins[0][1], + process.out.versions[0] + ).match() + + with(file(process.out.seq_dir[0][1]).listFiles().collect { it.name }) { + assert contains('single_copy_busco_sequences.tar.gz') + assert contains('multi_copy_busco_sequences.tar.gz') + assert contains('fragmented_busco_sequences.tar.gz') + } + + with(path("${process.out.busco_dir[0][1]}/logs/busco.log").text) { + assert contains('DEBUG:busco.run_BUSCO') + assert contains('Results from dataset') + assert contains('how to cite BUSCO') + } + } + + } + + test("minimal-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + input[1] = 'genome' + input[2] = 'bacteria_odb10' + input[3] = [] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/busco/busco/tests/main.nf.test.snap b/modules/nf-core/busco/busco/tests/main.nf.test.snap new file mode 100644 index 00000000..1b6411bc --- /dev/null +++ b/modules/nf-core/busco/busco/tests/main.nf.test.snap @@ -0,0 +1,230 @@ +{ + "minimal-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "7": [ + + ], + "8": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "9": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "batch_summary": [ + [ + { + "id": "test" + }, + "test-bacteria_odb10-busco.batch_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "busco_dir": [ + [ + { + "id": "test" + }, + [ + [ + [ + [ + + ] + ] + ] + ] + ] + ], + "full_table": [ + + ], + "missing_busco_list": [ + + ], + "seq_dir": [ + [ + { + "id": "test" + }, + [ + + ] + ] + ], + "short_summaries_json": [ + + ], + "short_summaries_txt": [ + + ], + "single_copy_proteins": [ + + ], + "translated_dir": [ + + ], + "versions": [ + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:28:04.451297" + }, + "test_busco_eukaryote_augustus": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,3ea3bdc423a461dae514d816bdc61c89", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:26:36.974986" + }, + "test_busco_genome_single_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,21b3fb771cf36be917cc451540d999be", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:22:45.07816" + }, + "test_busco_genome_multi_fasta": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,fcd3c208913e8abda3d6742c43fec5fa", + [ + "full_table.tsv:md5,c657edcc7d0de0175869717551df6e83", + "full_table.tsv:md5,638fe7590f442c57361554dae330eca1" + ], + [ + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "missing_busco_list.tsv:md5,1530af4fe7673a6d001349537bcd410a" + ], + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:23:50.255602" + }, + "test_busco_eukaryote_metaeuk": { + "content": [ + "test-eukaryota_odb10-busco.batch_summary.txt:md5,ff6d8277e452a83ce9456bbee666feb6", + "full_table.tsv:md5,92b1b1d5cb5ea0e2093d16f00187e8c7", + "missing_busco_list.tsv:md5,0352e563de290bf804c708323c35a9e3", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:25:38.159041" + }, + "test_busco_transcriptome": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,8734b3f379c4c0928e5dd4ea1873dc64", + "full_table.tsv:md5,1b2ce808fdafa744c56b5f781551272d", + "missing_busco_list.tsv:md5,a6931b6470262b997b8b99ea0f1d14a4", + [ + "1024388at2.faa:md5,797d603d262a6595a112e25b73e878b0", + "1054741at2.faa:md5,cd4b928cba6b19b4437746ba507e7195", + "1093223at2.faa:md5,df9549708e5ffcfaee6a74dd70a0e5dc", + "1151822at2.faa:md5,12726afc1cdc40c13392e1596e93df3a", + "143460at2.faa:md5,d887431fd988a5556a523440f02d9594", + "1491686at2.faa:md5,d03362d19979b27306c192f1c74a84e5", + "1504821at2.faa:md5,4f5f6e5c57bac0092c1d85ded73d7e67", + "1574817at2.faa:md5,1153e55998c2929eacad2aed7d08d248", + "1592033at2.faa:md5,bb7a59e5f3a57ba12d10dabf4c77ab57", + "1623045at2.faa:md5,8fe38155feb1802beb97ef7714837bf5", + "1661836at2.faa:md5,6c6d592c2fbb0d7a4e5e1f47a15644f0", + "1674344at2.faa:md5,bb41b44e53565a54cadf0b780532fe08", + "1698718at2.faa:md5,f233860000028eb00329aa85236c71e5", + "1990650at2.faa:md5,34a2d29c5f8b6253159ddb7a43fa1829", + "223233at2.faa:md5,dec6705c7846c989296e73942f953cbc", + "402899at2.faa:md5,acc0f271f9a586d2ce1ee41669b22999", + "505485at2.faa:md5,aa0391f8fa5d9bd19b30d844d5a99845", + "665824at2.faa:md5,47f8ad43b6a6078206feb48c2e552793", + "776861at2.faa:md5,f8b90c13f7c6be828dea3bb920195e3d", + "874197at2.faa:md5,8d22a35a768debe6f376fc695d233a69", + "932854at2.faa:md5,2eff2de1ab83b22f3234a529a44e22bb", + "95696at2.faa:md5,247bfd1aef432f7b5456307768e9149c" + ], + "single_copy_proteins.faa:md5,73e2c5d6a9b0f01f2deea3cc5f21b764", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:53.992893" + }, + "test_busco_protein": { + "content": [ + "test-bacteria_odb10-busco.batch_summary.txt:md5,f5a782378f9f94a748aa907381fdef91", + "full_table.tsv:md5,812ab6a0496fccab774643cf40c4f2a8", + "missing_busco_list.tsv:md5,aceb66e347a353cb7fca8e2a725f9112", + "versions.yml:md5,3fc94714b95c2dc15399a4229d9dd1d9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T13:27:12.724862" + } +} \ No newline at end of file diff --git a/modules/nf-core/busco/busco/tests/nextflow.augustus.config b/modules/nf-core/busco/busco/tests/nextflow.augustus.config new file mode 100644 index 00000000..84daa69d --- /dev/null +++ b/modules/nf-core/busco/busco/tests/nextflow.augustus.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --augustus' + } +} diff --git a/modules/nf-core/busco/busco/tests/nextflow.config b/modules/nf-core/busco/busco/tests/nextflow.config new file mode 100644 index 00000000..1ec3fec0 --- /dev/null +++ b/modules/nf-core/busco/busco/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar' + } +} diff --git a/modules/nf-core/busco/busco/tests/nextflow.metaeuk.config b/modules/nf-core/busco/busco/tests/nextflow.metaeuk.config new file mode 100644 index 00000000..c1418445 --- /dev/null +++ b/modules/nf-core/busco/busco/tests/nextflow.metaeuk.config @@ -0,0 +1,5 @@ +process { + withName: 'BUSCO_BUSCO' { + ext.args = '--tar --metaeuk' + } +} diff --git a/modules/nf-core/busco/busco/tests/old_test.yml b/modules/nf-core/busco/busco/tests/old_test.yml new file mode 100644 index 00000000..75177f5d --- /dev/null +++ b/modules/nf-core/busco/busco/tests/old_test.yml @@ -0,0 +1,624 @@ +- name: busco test_busco_genome_single_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_single_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: bc2440f8a68d7fbf931ff911c1c3fdfa + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "lineage_dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_genome_multi_fasta + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_genome_multi_fasta -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.genome.fna.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 8c64c1a28b086ef2ee444f99cbed5f7d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: 8f047bdb33264d22a83920bc2c63f29a + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/logs/prodigal_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/predicted.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 8166471fc5f08c82fd5643ab42327f9d + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: ddc508a18f60e7f3314534df50cdf8ca + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: c1fdc6977332f53dfe7f632733bb4585 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 50752acb1c5a20be886bfdfc06635bcb + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.faa + md5sum: e56fd59c38248dc21ac94355dca98121 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4.fna + md5sum: b365f84bf99c68357952e0b98ed7ce42 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_err.log + md5sum: e5f14d7925ba14a0f9850542f3739894 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_4_out.log + md5sum: d41971bfc1b621d4ffd2633bc47017ea + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: c9651b88b10871abc260ee655898e828 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/bbtools_out.log + md5sum: 9caf1a1434414c78562eb0bbb9c0e53f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/logs/prodigal_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/.checkpoint + contains: + - "Tool: prodigal" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/predicted.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.faa + md5sum: 836e9a80d33d8b89168f07ddc13ee991 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11.fna + md5sum: 20eeb75f86842e6e136f02bca8b73a9f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_err.log + md5sum: 538510cfc7483498210f01e53fe035ad + - path: output/busco/test-bacteria_odb10-busco/genome.fna/prodigal_output/predicted_genes/tmp/prodigal_mode_single_code_11_out.log + md5sum: 61050b0706addc9498b2088a2d6efa9a + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/full_table.tsv + md5sum: c56edab1dc1522e993c25ae2b730799f + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/missing_busco_list.tsv + md5sum: b533ef30270f27160acce85a22d01bf5 + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/genome.fna/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_metaeuk + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_metaeuk -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_eukaryote_augustus + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_eukaryote_augustus -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.eukaryota_odb10.genome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-eukaryota_odb10-busco.batch_summary.txt + md5sum: ff6d8277e452a83ce9456bbee666feb6 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/bbtools_out.log + md5sum: e63debaa653f18f7405d936050abc093 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/hmmsearch_out.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run1_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_err.log + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/logs/metaeuk_run2_out.log + contains: + - "metaeuk" + - "easy-predict" + - "Compute score and coverage" + - "Time for processing:" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/.bbtools_output/.checkpoint + contains: + - "Tool: bbtools" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/full_table.tsv + md5sum: bd880e90b9e5620a58943a3e0f9ff16b + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/hmmer_output.tar.gz + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/.checkpoint + contains: + - "Tool: metaeuk" + - "Completed" + - "jobs" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/combined_pred_proteins.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/initial_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/refseq_db_rerun.faa + md5sum: d80b8fa4cb5ed0d47d63d6aa93635bc2 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.codon.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.fas + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.gff + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/metaeuk_output/rerun_results/genome.fasta.headersMap.tsv + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/missing_busco_list.tsv + md5sum: 1e8e79c540fd2e69ba0d2659d9eb2988 + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-eukaryota_odb10-busco/genome.fasta/run_eukaryota_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-eukaryota_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/versions.yml + +- name: busco test_busco_protein + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_protein -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.proteome.fasta.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 7a65e6cbb6c56a2ea4e739ae0aa3297d + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/full_table.tsv + md5sum: 0e34f1011cd83ea1d5d5103ec62b8922 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/missing_busco_list.tsv + md5sum: 9939309df2da5419de88c32d1435c779 + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/proteome.fasta/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/versions.yml + +- name: busco test_busco_transcriptome + command: nextflow run ./tests/modules/nf-core/busco -entry test_busco_transcriptome -c ./tests/config/nextflow.config + tags: + - busco + files: + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/short_summary.specific.bacteria_odb10.test1.contigs.fa.txt + contains: + - "BUSCO version" + - "The lineage dataset is" + - "BUSCO was run in mode" + - "Complete BUSCOs" + - "Missing BUSCOs" + - "Dependencies and versions" + - path: output/busco/test-bacteria_odb10-busco.batch_summary.txt + md5sum: 46118ecf60d1b87d22b96d80f4f03632 + - path: output/busco/test-bacteria_odb10-busco/logs/busco.log + contains: + - "DEBUG:busco.run_BUSCO" + - "Results from dataset" + - "how to cite BUSCO" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/.checkpoint + contains: + - "Tool: makeblastdb" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ndb + md5sum: 3788c017fe5e6f0f58224e9cdd21822b + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nhr + md5sum: 8ecd2ce392bb5e25ddbe1d85f879582e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nin + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.njs + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.not + md5sum: 0c340e376c7e85d19f82ec1a833e6a6e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nsq + md5sum: 532d5c0a7ea00fe95ca3c97cb3be6198 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.ntf + md5sum: de1250813f0c7affc6d12dac9d0fb6bb + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/blast_db/test1.contigs.fa.nto + md5sum: ff74bd41f9cc9b011c63a32c4f7693bf + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/hmmsearch_out.log + contains: + - "# hmmsearch :: search profile(s) against a sequence database" + - "# target sequence database:" + - "Internal pipeline statistics summary:" + - "[ok]" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/makeblastdb_out.log + contains: + - "Building a new DB" + - "Adding sequences from FASTA" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_err.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/logs/tblastn_out.log + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/.checkpoint + contains: + - "Tool: tblastn" + - "Completed" + - "jobs" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/coordinates.tsv + md5sum: cc30eed321944af293452bdbcfc24292 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_101.temp + md5sum: 73e9c65fc83fedc58f57f09b08f08238 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_119.temp + md5sum: 7fa4cc7955ec0cc36330a221c579b975 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_129.temp + md5sum: 6f1601c875d019e3f6f1f98ed8e988d4 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_138.temp + md5sum: 3f8e034686cd240c2330650d791bcae2 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_143.temp + md5sum: df3dfa8e9ba30ed70cf75b5e7abf2179 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_172.temp + md5sum: 7d463e0e6cf7169bc9077d8dc776dda1 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_178.temp + md5sum: 2288edf7fa4f88f51b4cf4d94086f77e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_188.temp + md5sum: 029906abbad6d87fc57830dd548cac24 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_195.temp + md5sum: 4937f3b348774a31b1160a00297c29cc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_210.temp + md5sum: afcb20ba4c466479d6b91c8c62251e1f + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_232.temp + md5sum: 2e1e823ce017345bd998191a39fa9924 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_268.temp + md5sum: 08c2d82c34ecffbe1c638b410349412e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_29.temp + md5sum: cd9b63cf93524284781535c888313764 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_44.temp + md5sum: d1929b742b24ebe379bf4801ca882dca + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_58.temp + md5sum: 69215765b010c05336538cb322c900b3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_72.temp + md5sum: 6feaa1cc3b0899a147ea9d466878f3e3 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_80.temp + md5sum: 13625eae14e860a96ce17cd4e37e9d01 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_81.temp + md5sum: e14b2484649b0dbc8926815c207b806d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_93.temp + md5sum: 6902c93691df00e690faea914c71839e + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/sequences/k141_97.temp + md5sum: 0a0d9d38a83acbd5ad43c29cdf429988 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/blast_output/tblastn.tsv + contains: + - "TBLASTN" + - "BLAST processed" + - "queries" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/fragmented_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/multi_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/busco_sequences/single_copy_busco_sequences.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/full_table.tsv + md5sum: 24df25199e13c88bd892fc3e7b541ca0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/hmmer_output.tar.gz + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/missing_busco_list.tsv + md5sum: e7232e2b8cca4fdfdd9e363b39ebbc81 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.json + contains: + - "one_line_summary" + - "mode" + - "dataset" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/short_summary.txt + contains: + - "# BUSCO version is:" + - "Results:" + - "busco:" + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/run_bacteria_odb10/single_copy_proteins.faa + md5sum: e04b9465733577ae6e4bccb7aa01e720 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1024388at2.faa + md5sum: 7333c39a20258f20c7019ea0cd83157c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1054741at2.faa + md5sum: ebb481e77a824685fbe04d8a2f3a0d7d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1093223at2.faa + md5sum: 34621c7d499034e8f8e6b92fd4020a93 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1151822at2.faa + md5sum: aa89ca381c1c70c9c4e1380351ca7c2a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/143460at2.faa + md5sum: f2e91d78b8dd3722840378789f29e8c8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1491686at2.faa + md5sum: 73c25aef5c9cba7f4151804941b146ea + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1504821at2.faa + md5sum: cda556018d1f84ebe517e89f6fc107d0 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1574817at2.faa + md5sum: a9096c9fb8b25c78a72871ab0463acdc + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1592033at2.faa + md5sum: e463d25ce186c0cebfd749474f3a4c64 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1623045at2.faa + md5sum: f2cfd241590c6d8377286d6135480937 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1661836at2.faa + md5sum: 586569546fb9861502468e3d9ba2775c + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1674344at2.faa + md5sum: 24c658bee14ad84b062d81ad96642eb8 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1698718at2.faa + md5sum: 0b8e26ddf5149bbd8805be7af125208d + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/1990650at2.faa + md5sum: 159320712ee01fb2ccb31a25df44eead + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/223233at2.faa + md5sum: 812629c0b06ac3d18661c2ca78de0c08 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/402899at2.faa + md5sum: f7ff4e1591342d30b77392a2e84b57d9 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/505485at2.faa + md5sum: 7b34a24fc49c540d46fcf96ff5129564 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/665824at2.faa + md5sum: 4cff2df64f6bcaff8bc19c234c8bcccd + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/776861at2.faa + md5sum: 613af7a3fea30ea2bece66f603b9284a + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/874197at2.faa + md5sum: a7cd1b13c9ef91c7ef4e31614166f197 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/932854at2.faa + md5sum: fe313ffd5efdb0fed887a04fba352552 + - path: output/busco/test-bacteria_odb10-busco/test1.contigs.fa/translated_proteins/95696at2.faa + md5sum: 4e1f30a2fea4dfbf9bb7fae2700622a0 + - path: output/busco/versions.yml diff --git a/modules/nf-core/busco/busco/tests/tags.yml b/modules/nf-core/busco/busco/tests/tags.yml new file mode 100644 index 00000000..7c4d2835 --- /dev/null +++ b/modules/nf-core/busco/busco/tests/tags.yml @@ -0,0 +1,2 @@ +busco/busco: + - "modules/nf-core/busco/busco/**" diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test b/modules/nf-core/bwamem2/index/tests/main.nf.test new file mode 100644 index 00000000..dbf11132 --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test @@ -0,0 +1,31 @@ +nextflow_process { + + name "Test Process BWAMEM2_INDEX" + tag "modules_nfcore" + tag "modules" + tag "bwamem2" + tag "bwamem2/index" + script "../main.nf" + process "BWAMEM2_INDEX" + + test("BWAMEM2 index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/bwamem2/index/tests/main.nf.test.snap b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap new file mode 100644 index 00000000..69b268ee --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "BWAMEM2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "1": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.bwt.2bit.64:md5,d097a1b82dee375d41a1ea69895a9216", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66" + ] + ] + ], + "versions": [ + "versions.yml:md5,9ffd13d12e7108ed15c58566bc4717d6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T12:59:39.132616" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/tests/tags.yml b/modules/nf-core/bwamem2/index/tests/tags.yml new file mode 100644 index 00000000..3953018e --- /dev/null +++ b/modules/nf-core/bwamem2/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/index: + - modules/nf-core/bwamem2/index/** diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test b/modules/nf-core/gnu/sort/tests/main.nf.test new file mode 100644 index 00000000..e4030187 --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/main.nf.test @@ -0,0 +1,120 @@ +nextflow_process { + + name "Test Process GNU_SORT" + script "modules/nf-core/gnu/sort/main.nf" + process "GNU_SORT" + + tag "modules" + tag "modules_nfcore" + tag "gnu" + tag "gnu/sort" + + test("unsorted_genome_sort") { + config "./sort_simple_bed.config" + + when { + process { + """ + input[0] = [ + [id:'genome_test'], + file(params.test_data['generic']['unsorted_data']['unsorted_text']['genome_file'], + checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.sorted[0][1]).name + ).match("genome_sort") + } + ) + } + + } + + test("unsorted_intervals_sort") { + config "./sort_simple_bed.config" + when { + process { + """ + input[0] = [ + [id:'test'], + file(params.test_data['generic']['unsorted_data']['unsorted_text']['intervals'], + checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.sorted[0][1]).name + ).match("interval_sort") + } + ) + } + + } + + test("unsorted_csv_sort") { + config "./sort_complex.config" + + when { + process { + """ + input[0] = [ + [id:'test'], + file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'], + checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.sorted[0][1]).name + ).match("csv_sort") + } + ) + } + + } + + test("unsorted_csv_sort_stub") { + config "./sort_complex.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [id:'test'], + file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'], + checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + +} diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test.snap b/modules/nf-core/gnu/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..63891bc4 --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/main.nf.test.snap @@ -0,0 +1,164 @@ +{ + "unsorted_csv_sort": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d" + ] + ], + "1": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ], + "sorted": [ + [ + { + "id": "test" + }, + "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d" + ] + ], + "versions": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:44.714632791" + }, + "interval_sort": { + "content": [ + "test.bed.sorted" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:37.962807086" + }, + "unsorted_csv_sort_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ], + "sorted": [ + [ + { + "id": "test" + }, + "test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:51.456258705" + }, + "csv_sort": { + "content": [ + "test.csv.sorted" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:44.725431761" + }, + "unsorted_genome_sort": { + "content": [ + { + "0": [ + [ + { + "id": "genome_test" + }, + "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" + ] + ], + "1": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ], + "sorted": [ + [ + { + "id": "genome_test" + }, + "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" + ] + ], + "versions": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:31.041778719" + }, + "genome_sort": { + "content": [ + "genome_test.bed.sorted" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:31.060201722" + }, + "unsorted_intervals_sort": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab" + ] + ], + "1": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ], + "sorted": [ + [ + { + "id": "test" + }, + "test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab" + ] + ], + "versions": [ + "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-14T11:13:37.951397547" + } +} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/sort_complex.config b/modules/nf-core/gnu/sort/tests/sort_complex.config new file mode 100644 index 00000000..103eaaf6 --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/sort_complex.config @@ -0,0 +1,6 @@ +process { + withName: GNU_SORT { + ext.args = { "-t ';' -g -k 1,1 -k 2,2" } + ext.suffix = { "csv.sorted" } + } +} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_bed.config b/modules/nf-core/gnu/sort/tests/sort_simple_bed.config new file mode 100644 index 00000000..d7d52e0f --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/sort_simple_bed.config @@ -0,0 +1,6 @@ +process { + withName: GNU_SORT { + ext.args = { "-k1,1 -k2,2n" } + ext.suffix = { "bed.sorted" } + } +} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_genome.config b/modules/nf-core/gnu/sort/tests/sort_simple_genome.config new file mode 100644 index 00000000..4dcec385 --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/sort_simple_genome.config @@ -0,0 +1,6 @@ +process { + withName: GNU_SORT { + ext.args = { "-k1,1 -k2,2n" } + ext.suffix = { "genome.sorted" } + } +} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/tags.yml b/modules/nf-core/gnu/sort/tests/tags.yml new file mode 100644 index 00000000..ac40e376 --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/tags.yml @@ -0,0 +1,2 @@ +gnu/sort: + - "modules/nf-core/gnu/sort/**" diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test b/modules/nf-core/minimap2/index/tests/main.nf.test new file mode 100644 index 00000000..97840ff7 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/main.nf.test @@ -0,0 +1,32 @@ +nextflow_process { + + name "Test Process MINIMAP2_INDEX" + script "../main.nf" + process "MINIMAP2_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "minimap2" + tag "minimap2/index" + + test("minimap2 index") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test.snap b/modules/nf-core/minimap2/index/tests/main.nf.test.snap new file mode 100644 index 00000000..0b098828 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + [ + { + "id": "test_ref" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "1": [ + "versions.yml:md5,0fced0ee8015e7f50b82566e3db8f7b0" + ], + "index": [ + [ + { + "id": "test_ref" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "versions": [ + "versions.yml:md5,0fced0ee8015e7f50b82566e3db8f7b0" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T11:46:30.000058092" + }, + "minimap2 index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "1": [ + "versions.yml:md5,2f8340380c6741e9261a284262a90bde" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.mmi:md5,72e450f12dc691e763c697463bdb1571" + ] + ], + "versions": [ + "versions.yml:md5,2f8340380c6741e9261a284262a90bde" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-05T10:58:29.828187662" + } +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/tests/tags.yml b/modules/nf-core/minimap2/index/tests/tags.yml new file mode 100644 index 00000000..e5ef8e19 --- /dev/null +++ b/modules/nf-core/minimap2/index/tests/tags.yml @@ -0,0 +1,2 @@ +minimap2/index: + - modules/nf-core/minimap2/index/** diff --git a/modules/nf-core/miniprot/align/tests/main.nf.test b/modules/nf-core/miniprot/align/tests/main.nf.test new file mode 100644 index 00000000..12366934 --- /dev/null +++ b/modules/nf-core/miniprot/align/tests/main.nf.test @@ -0,0 +1,89 @@ + +nextflow_process { + + name "Test Process MINIPROT_ALIGN" + script "../main.nf" + process "MINIPROT_ALIGN" + + + tag "modules" + tag "modules_nfcore" + tag "miniprot" + tag "miniprot/align" + tag "miniprot/index" + + setup { + run("MINIPROT_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] =[ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + """ + } + } + } + + test("test-miniprot-align-gff") { + config "./nextflow.gff.config" + + when { + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true)] + input[1] = MINIPROT_INDEX.out.index + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-miniprot-align-paf") { + config "./nextflow.paf.config" + + when { + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true)] + input[1] = MINIPROT_INDEX.out.index + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-miniprot-align-paf-stub") { + config "./nextflow.paf.config" + options '-stub' + when { + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true)] + input[1] = MINIPROT_INDEX.out.index + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/miniprot/align/tests/main.nf.test.snap b/modules/nf-core/miniprot/align/tests/main.nf.test.snap new file mode 100644 index 00000000..63f41136 --- /dev/null +++ b/modules/nf-core/miniprot/align/tests/main.nf.test.snap @@ -0,0 +1,119 @@ +{ + "test-miniprot-align-paf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ], + "gff": [ + + ], + "paf": [ + [ + { + "id": "test" + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T13:45:20.16677" + }, + "test-miniprot-align-paf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.paf:md5,f2b40da6a9605df44efc9df14b255b53" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ], + "gff": [ + + ], + "paf": [ + [ + { + "id": "test" + }, + "test.paf:md5,f2b40da6a9605df44efc9df14b255b53" + ] + ], + "versions": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T13:45:15.160286" + }, + "test-miniprot-align-gff": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.gff:md5,dc2d01ac840ee26416b5eb9cf252181d" + ] + ], + "2": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ], + "gff": [ + [ + { + "id": "test" + }, + "test.gff:md5,dc2d01ac840ee26416b5eb9cf252181d" + ] + ], + "paf": [ + + ], + "versions": [ + "versions.yml:md5,cd4a5baa0b71a4edc70e556289a35ee9" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T13:45:09.941901" + } +} \ No newline at end of file diff --git a/modules/nf-core/miniprot/align/tests/nextflow.gff.config b/modules/nf-core/miniprot/align/tests/nextflow.gff.config new file mode 100644 index 00000000..f97d4fd2 --- /dev/null +++ b/modules/nf-core/miniprot/align/tests/nextflow.gff.config @@ -0,0 +1,5 @@ +process { + withName: 'MINIPROT_ALIGN' { + ext.args = "-u --gff" + } +} diff --git a/modules/nf-core/miniprot/align/tests/nextflow.paf.config b/modules/nf-core/miniprot/align/tests/nextflow.paf.config new file mode 100644 index 00000000..8d9c2550 --- /dev/null +++ b/modules/nf-core/miniprot/align/tests/nextflow.paf.config @@ -0,0 +1,5 @@ +process { + withName: 'MINIPROT_ALIGN' { + ext.args = "-u" + } +} diff --git a/modules/nf-core/miniprot/index/tests/main.nf.test b/modules/nf-core/miniprot/index/tests/main.nf.test new file mode 100644 index 00000000..b6092df9 --- /dev/null +++ b/modules/nf-core/miniprot/index/tests/main.nf.test @@ -0,0 +1,51 @@ + +nextflow_process { + + name "Test Process MINIPROT_INDEX" + script "../main.nf" + process "MINIPROT_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "miniprot" + tag "miniprot/index" + + test("test-miniprot-index") { + + when { + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-miniprot-index-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/miniprot/index/tests/main.nf.test.snap b/modules/nf-core/miniprot/index/tests/main.nf.test.snap new file mode 100644 index 00000000..3bfc4b72 --- /dev/null +++ b/modules/nf-core/miniprot/index/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test-miniprot-index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.mpi:md5,6161e75cdeca970d844b6cfada14766b" + ] + ], + "1": [ + "versions.yml:md5,1e6ea592f24125bd879956ea78f6afeb" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.mpi:md5,6161e75cdeca970d844b6cfada14766b" + ] + ], + "versions": [ + "versions.yml:md5,1e6ea592f24125bd879956ea78f6afeb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T13:35:37.561483" + }, + "test-miniprot-index-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.mpi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,1e6ea592f24125bd879956ea78f6afeb" + ], + "index": [ + [ + { + "id": "test" + }, + "genome.mpi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1e6ea592f24125bd879956ea78f6afeb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T13:35:42.977101" + } +} \ No newline at end of file diff --git a/modules/nf-core/paftools/sam2paf/tests/main.nf.test b/modules/nf-core/paftools/sam2paf/tests/main.nf.test new file mode 100644 index 00000000..be31cc33 --- /dev/null +++ b/modules/nf-core/paftools/sam2paf/tests/main.nf.test @@ -0,0 +1,57 @@ + +nextflow_process { + + name "Test Process PAFTOOLS_SAM2PAF" + script "../main.nf" + process "PAFTOOLS_SAM2PAF" + + tag "modules" + tag "modules_nfcore" + tag "paftools" + tag "paftools/sam2paf" + + test("test-paftools-sam2paf") { + + when { + process { + """ + input[0] = [ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/scramble/test.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-paftools-sam2paf-stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/scramble/test.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/paftools/sam2paf/tests/main.nf.test.snap b/modules/nf-core/paftools/sam2paf/tests/main.nf.test.snap new file mode 100644 index 00000000..3e7ab899 --- /dev/null +++ b/modules/nf-core/paftools/sam2paf/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test-paftools-sam2paf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.paf:md5,bf981d964f3ffa6feac079199e157330" + ] + ], + "1": [ + "versions.yml:md5,ae0342a5ff0006c183531b23d9fb5d4f" + ], + "paf": [ + [ + { + "id": "test" + }, + "test.paf:md5,bf981d964f3ffa6feac079199e157330" + ] + ], + "versions": [ + "versions.yml:md5,ae0342a5ff0006c183531b23d9fb5d4f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T12:37:30.82847" + }, + "test-paftools-sam2paf-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,88072120e3a09a8338ce7ae0c844067e" + ], + "paf": [ + [ + { + "id": "test" + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,88072120e3a09a8338ce7ae0c844067e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T12:37:35.457832" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 00000000..17244ef2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 00000000..1bbb3ec2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:57:47.450887871" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:04.804905659" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:23.831268154" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:35.600243706" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T07:58:54.705460167" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 00000000..f76a3ba0 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 00000000..33ebbd5d --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 00000000..e4a83948 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/markdup/tests/main.nf.test b/modules/nf-core/samtools/markdup/tests/main.nf.test new file mode 100644 index 00000000..acfbd1c1 --- /dev/null +++ b/modules/nf-core/samtools/markdup/tests/main.nf.test @@ -0,0 +1,90 @@ +nextflow_process { + + name "Test Process SAMTOOLS_MARKDUP" + script "../main.nf" + process "SAMTOOLS_MARKDUP" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/fixmate" + tag "samtools/sort" + tag "samtools/markdup" + + test("sarscov2 - bam") { + setup { + run("SAMTOOLS_FIXMATE") { + script "../../fixmate/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + ] + """ + } + } + run("SAMTOOLS_SORT") { + script "../../sort/main.nf" + process { + """ + input[0] = SAMTOOLS_FIXMATE.out.bam + input[1] = [ + [ id:'fasta' ], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + ] + """ + } + } + } + when { + process { + """ + input[0] = SAMTOOLS_SORT.out.bam + input[1] = [ + [ id:'fasta' ], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + ] + input[1] = [ + [ id:'fasta' ], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/samtools/markdup/tests/main.nf.test.snap b/modules/nf-core/samtools/markdup/tests/main.nf.test.snap new file mode 100644 index 00000000..4e7cbf5e --- /dev/null +++ b/modules/nf-core/samtools/markdup/tests/main.nf.test.snap @@ -0,0 +1,96 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.markdup.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4ce5394244e549f97b8250b7dfad71ba" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.markdup.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,4ce5394244e549f97b8250b7dfad71ba" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-17T08:46:57.510270753" + }, + "sarscov2 - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.markdup.bam:md5,e73ea77e3857e7c6b0e6db2ec660361f" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4ce5394244e549f97b8250b7dfad71ba" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.markdup.bam:md5,e73ea77e3857e7c6b0e6db2ec660361f" + ] + ], + "cram": [ + + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,4ce5394244e549f97b8250b7dfad71ba" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-17T08:51:17.068686604" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/markdup/tests/nextflow.config b/modules/nf-core/samtools/markdup/tests/nextflow.config new file mode 100644 index 00000000..1a2b52b9 --- /dev/null +++ b/modules/nf-core/samtools/markdup/tests/nextflow.config @@ -0,0 +1,14 @@ +process { + withName: SAMTOOLS_COLLATE { + ext.prefix = { "${meta.id}.collate" } + } + withName: SAMTOOLS_FIXMATE { + ext.prefix = { "${meta.id}.fixmate" } + } + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + } + withName: SAMTOOLS_MARKDUP { + ext.prefix = { "${meta.id}.markdup" } + } +} diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 00000000..3a8c0188 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } + +} diff --git a/modules/nf-core/seqtk/cutn/tests/main.nf.test b/modules/nf-core/seqtk/cutn/tests/main.nf.test new file mode 100644 index 00000000..46dfff1f --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/main.nf.test @@ -0,0 +1,57 @@ +nextflow_process { + + name "Test Process SEQTK_CUTN" + script "../main.nf" + process "SEQTK_CUTN" + + tag "modules" + tag "modules_nfcore" + tag "seqtk" + tag "seqtk/cutn" + + test("homo_21_cut") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.bed[0][1]).name + ).match("genome_cut") + } + ) + } + } + + test("homo_21_cut_stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap b/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap new file mode 100644 index 00000000..998beda5 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/main.nf.test.snap @@ -0,0 +1,70 @@ +{ + "genome_cut": { + "content": [ + "test.bed" + ], + "timestamp": "2024-02-22T16:02:14.744148" + }, + "homo_21_cut_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ] + } + ], + "timestamp": "2024-02-22T16:02:23.596389" + }, + "homo_21_cut": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,16cbba84e3a4bdbb52217afb5051f948" + ] + ], + "1": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ], + "bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bed:md5,16cbba84e3a4bdbb52217afb5051f948" + ] + ], + "versions": [ + "versions.yml:md5,3da8ed2738f3c093d1e62d796fd76428" + ] + } + ], + "timestamp": "2024-02-22T16:02:14.695205" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqtk/cutn/tests/tags.yml b/modules/nf-core/seqtk/cutn/tests/tags.yml new file mode 100644 index 00000000..13c64cc3 --- /dev/null +++ b/modules/nf-core/seqtk/cutn/tests/tags.yml @@ -0,0 +1,2 @@ +seqtk/cutn: + - "modules/nf-core/seqtk/cutn/**" diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test new file mode 100644 index 00000000..4d4130dc --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test @@ -0,0 +1,123 @@ +nextflow_process { + + name "Test Process TABIX_BGZIPTABIX" + script "modules/nf-core/tabix/bgziptabix/main.nf" + process "TABIX_BGZIPTABIX" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/bgziptabix" + + test("sarscov2_bed_tbi") { + config "./tabix_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'tbi_test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_tbi[0][1]).name + ).match("tbi_test") + } + ) + } + } + + test("sarscov2_bed_csi") { + config "./tabix_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'csi_test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_csi[0][1]).name + ).match("csi_test") + } + ) + } + + } + + test("sarscov2_bed_csi_stub") { + config "./tabix_csi.config" + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_csi[0][1]).name + ).match("csi_stub") + } + ) + } + + } + + test("sarscov2_bed_tbi_stub") { + config "./tabix_tbi.config" + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_tbi[0][1]).name + ).match("tbi_stub") + } + ) + } + + } + +} diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap new file mode 100644 index 00000000..fb87799b --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap @@ -0,0 +1,206 @@ +{ + "sarscov2_bed_tbi": { + "content": [ + { + "0": [ + [ + { + "id": "tbi_test" + }, + "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ], + "gz_csi": [ + + ], + "gz_tbi": [ + [ + { + "id": "tbi_test" + }, + "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" + ] + ], + "versions": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:16.053817543" + }, + "sarscov2_bed_csi": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "csi_test" + }, + "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" + ] + ], + "2": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ], + "gz_csi": [ + [ + { + "id": "csi_test" + }, + "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" + ] + ], + "gz_tbi": [ + + ], + "versions": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:27.667745444" + }, + "csi_test": { + "content": [ + "csi_test.bed.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:51:00.548801" + }, + "sarscov2_bed_tbi_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ], + "gz_csi": [ + + ], + "gz_tbi": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:45:18.533169949" + }, + "csi_stub": { + "content": [ + "test.bed.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:51:09.218454" + }, + "tbi_stub": { + "content": [ + "test.bed.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:45:18.550930179" + }, + "tbi_test": { + "content": [ + "tbi_test.bed.gz" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-02-19T14:50:51.579654" + }, + "sarscov2_bed_csi_stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ], + "gz_csi": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gz_tbi": [ + + ], + "versions": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:44:19.786135972" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config b/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config new file mode 100644 index 00000000..fb41a314 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIPTABIX { + ext.args2 = '-p vcf --csi' + } +} diff --git a/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config b/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config new file mode 100644 index 00000000..c1915dc4 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIPTABIX { + ext.args2 = '-p vcf' + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgziptabix/tests/tags.yml b/modules/nf-core/tabix/bgziptabix/tests/tags.yml new file mode 100644 index 00000000..5052b4d7 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/bgziptabix: + - "modules/nf-core/tabix/bgziptabix/**" diff --git a/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test b/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test new file mode 100644 index 00000000..bf53d7fa --- /dev/null +++ b/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test @@ -0,0 +1,59 @@ +nextflow_process { + + name "Test Process WINDOWMASKER_MKCOUNTS" + script "../main.nf" + process "WINDOWMASKER_MKCOUNTS" + + tag "modules" + tag "modules_nfcore" + tag "windowmasker" + tag "windowmasker/mkcounts" + + test("sarscov2_fasta") { + + when { + params { + // define parameters here. Example: + // outdir = "tests/results" + } + process { + """ + input[0] = [ + [id: "test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + test("sarscov2_fasta_stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [id: "test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ] + """ + } + } + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test.snap b/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test.snap new file mode 100644 index 00000000..cae2d306 --- /dev/null +++ b/modules/nf-core/windowmasker/mkcounts/tests/main.nf.test.snap @@ -0,0 +1,60 @@ +{ + "sarscov2_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.txt:md5,5f5d7e926fdf13b0c57651f962cc1253" + ] + ], + "1": [ + "versions.yml:md5,57ae356f69298e25eb5d070900865cf2" + ], + "counts": [ + [ + { + "id": "test" + }, + "test.txt:md5,5f5d7e926fdf13b0c57651f962cc1253" + ] + ], + "versions": [ + "versions.yml:md5,57ae356f69298e25eb5d070900865cf2" + ] + } + ], + "timestamp": "2024-02-15T13:29:58.837482" + }, + "sarscov2_fasta_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,57ae356f69298e25eb5d070900865cf2" + ], + "counts": [ + [ + { + "id": "test" + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,57ae356f69298e25eb5d070900865cf2" + ] + } + ], + "timestamp": "2024-02-15T13:30:07.618636" + } +} \ No newline at end of file diff --git a/modules/nf-core/windowmasker/mkcounts/tests/nextflow.config b/modules/nf-core/windowmasker/mkcounts/tests/nextflow.config new file mode 100644 index 00000000..65fc1910 --- /dev/null +++ b/modules/nf-core/windowmasker/mkcounts/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: WINDOWMASKER_MKCOUNTS { + ext.args = "" + } +} \ No newline at end of file diff --git a/modules/nf-core/windowmasker/mkcounts/tests/tags.yml b/modules/nf-core/windowmasker/mkcounts/tests/tags.yml new file mode 100644 index 00000000..95c67635 --- /dev/null +++ b/modules/nf-core/windowmasker/mkcounts/tests/tags.yml @@ -0,0 +1,2 @@ +windowmasker/mkcounts: + - "modules/nf-core/windowmasker/mkcounts/**" diff --git a/modules/nf-core/windowmasker/ustat/tests/main.nf.test b/modules/nf-core/windowmasker/ustat/tests/main.nf.test new file mode 100644 index 00000000..6e02c9c1 --- /dev/null +++ b/modules/nf-core/windowmasker/ustat/tests/main.nf.test @@ -0,0 +1,66 @@ +nextflow_process { + + name "Test Process WINDOWMASKER_USTAT" + script "../main.nf" + process "WINDOWMASKER_USTAT" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "windowmasker" + tag "windowmasker/ustat" + tag "windowmasker/mkcounts" + + + setup { + run("WINDOWMASKER_MKCOUNTS") { + script "../../mkcounts/main.nf" + process { + """ + input[0] = [ + [id: "test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ] + """ + } + } + } + + test("sarscov2_fasta") { + when { + process { + """ + input[0] = WINDOWMASKER_MKCOUNTS.out.counts + input[1] = [ + [id: "test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ] + """ + } + } + then { + assert process.success + assert snapshot(process.out).match() + } + } + + test("sarscov2_fasta_stub") { + when { + process { + """ + input[0] = WINDOWMASKER_MKCOUNTS.out.counts + input[1] = [ + [id: "test" ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ] + """ + } + } + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} diff --git a/modules/nf-core/windowmasker/ustat/tests/main.nf.test.snap b/modules/nf-core/windowmasker/ustat/tests/main.nf.test.snap new file mode 100644 index 00000000..79d3d82d --- /dev/null +++ b/modules/nf-core/windowmasker/ustat/tests/main.nf.test.snap @@ -0,0 +1,60 @@ +{ + "sarscov2_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.interval:md5,c91346601564ab88cbb0f913881d05e2" + ] + ], + "1": [ + "versions.yml:md5,d43f04bb181ac80da9ec79d9b49131cf" + ], + "intervals": [ + [ + { + "id": "test" + }, + "test.interval:md5,c91346601564ab88cbb0f913881d05e2" + ] + ], + "versions": [ + "versions.yml:md5,d43f04bb181ac80da9ec79d9b49131cf" + ] + } + ], + "timestamp": "2024-02-15T14:19:12.033774" + }, + "sarscov2_fasta_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.interval:md5,c91346601564ab88cbb0f913881d05e2" + ] + ], + "1": [ + "versions.yml:md5,d43f04bb181ac80da9ec79d9b49131cf" + ], + "intervals": [ + [ + { + "id": "test" + }, + "test.interval:md5,c91346601564ab88cbb0f913881d05e2" + ] + ], + "versions": [ + "versions.yml:md5,d43f04bb181ac80da9ec79d9b49131cf" + ] + } + ], + "timestamp": "2024-02-15T14:19:21.850526" + } +} \ No newline at end of file diff --git a/modules/nf-core/windowmasker/ustat/tests/nextflow.config b/modules/nf-core/windowmasker/ustat/tests/nextflow.config new file mode 100644 index 00000000..00b63c45 --- /dev/null +++ b/modules/nf-core/windowmasker/ustat/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'test_windowmasker_ustat:WINDOWMASKER_USTAT' { + ext.args = "-dust true -outfmt interval" + } +} \ No newline at end of file diff --git a/modules/nf-core/windowmasker/ustat/tests/tags.yml b/modules/nf-core/windowmasker/ustat/tests/tags.yml new file mode 100644 index 00000000..28c74ca9 --- /dev/null +++ b/modules/nf-core/windowmasker/ustat/tests/tags.yml @@ -0,0 +1,2 @@ +windowmasker/ustat: + - "modules/nf-core/windowmasker/ustat/**" From dc1e076da9c0d751fb62ca6c74051f935f8026dc Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 14:39:03 +0000 Subject: [PATCH 08/65] Updating all easy to update modules --- modules/nf-core/busco/busco/environment.yml | 5 + modules/nf-core/busco/busco/main.nf | 107 ++++++++++++++ modules/nf-core/busco/busco/meta.yml | 152 ++++++++++++++++++++ 3 files changed, 264 insertions(+) create mode 100644 modules/nf-core/busco/busco/environment.yml create mode 100644 modules/nf-core/busco/busco/main.nf create mode 100644 modules/nf-core/busco/busco/meta.yml diff --git a/modules/nf-core/busco/busco/environment.yml b/modules/nf-core/busco/busco/environment.yml new file mode 100644 index 00000000..5b918b45 --- /dev/null +++ b/modules/nf-core/busco/busco/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::busco=5.7.1 diff --git a/modules/nf-core/busco/busco/main.nf b/modules/nf-core/busco/busco/main.nf new file mode 100644 index 00000000..f7c1a662 --- /dev/null +++ b/modules/nf-core/busco/busco/main.nf @@ -0,0 +1,107 @@ +process BUSCO_BUSCO { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + + input: + tuple val(meta), path(fasta, stageAs:'tmp_input/*') + val mode // Required: One of genome, proteins, or transcriptome + val lineage // Required: lineage to check against, "auto" enables --auto-lineage instead + path busco_lineages_path // Recommended: path to busco lineages - downloads if not set + path config_file // Optional: busco configuration file + + output: + tuple val(meta), path("*-busco.batch_summary.txt") , emit: batch_summary + tuple val(meta), path("short_summary.*.txt") , emit: short_summaries_txt , optional: true + tuple val(meta), path("short_summary.*.json") , emit: short_summaries_json , optional: true + tuple val(meta), path("*-busco/*/run_*/full_table.tsv") , emit: full_table , optional: true + tuple val(meta), path("*-busco/*/run_*/missing_busco_list.tsv") , emit: missing_busco_list , optional: true + tuple val(meta), path("*-busco/*/run_*/single_copy_proteins.faa") , emit: single_copy_proteins , optional: true + tuple val(meta), path("*-busco/*/run_*/busco_sequences") , emit: seq_dir + tuple val(meta), path("*-busco/*/translated_proteins") , emit: translated_dir , optional: true + tuple val(meta), path("*-busco") , emit: busco_dir + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + if ( mode !in [ 'genome', 'proteins', 'transcriptome' ] ) { + error "Mode must be one of 'genome', 'proteins', or 'transcriptome'." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def busco_config = config_file ? "--config $config_file" : '' + def busco_lineage = lineage.equals('auto') ? '--auto-lineage' : "--lineage_dataset ${lineage}" + def busco_lineage_dir = busco_lineages_path ? "--download_path ${busco_lineages_path}" : '' + """ + # Nextflow changes the container --entrypoint to /bin/bash (container default entrypoint: /usr/local/env-execute) + # Check for container variable initialisation script and source it. + if [ -f "/usr/local/env-activate.sh" ]; then + set +u # Otherwise, errors out because of various unbound variables + . "/usr/local/env-activate.sh" + set -u + fi + + # If the augustus config directory is not writable, then copy to writeable area + if [ ! -w "\${AUGUSTUS_CONFIG_PATH}" ]; then + # Create writable tmp directory for augustus + AUG_CONF_DIR=\$( mktemp -d -p \$PWD ) + cp -r \$AUGUSTUS_CONFIG_PATH/* \$AUG_CONF_DIR + export AUGUSTUS_CONFIG_PATH=\$AUG_CONF_DIR + echo "New AUGUSTUS_CONFIG_PATH=\${AUGUSTUS_CONFIG_PATH}" + fi + + # Ensure the input is uncompressed + INPUT_SEQS=input_seqs + mkdir "\$INPUT_SEQS" + cd "\$INPUT_SEQS" + for FASTA in ../tmp_input/*; do + if [ "\${FASTA##*.}" == 'gz' ]; then + gzip -cdf "\$FASTA" > \$( basename "\$FASTA" .gz ) + else + ln -s "\$FASTA" . + fi + done + cd .. + + busco \\ + --cpu $task.cpus \\ + --in "\$INPUT_SEQS" \\ + --out ${prefix}-busco \\ + --mode $mode \\ + $busco_lineage \\ + $busco_lineage_dir \\ + $busco_config \\ + $args + + # clean up + rm -rf "\$INPUT_SEQS" + + # Move files to avoid staging/publishing issues + mv ${prefix}-busco/batch_summary.txt ${prefix}-busco.batch_summary.txt + mv ${prefix}-busco/*/short_summary.*.{json,txt} . || echo "Short summaries were not available: No genes were found." + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}-${lineage}" + def fasta_name = files(fasta).first().name - '.gz' + """ + touch ${prefix}-busco.batch_summary.txt + mkdir -p ${prefix}-busco/$fasta_name/run_${lineage}/busco_sequences + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + busco: \$( busco --version 2>&1 | sed 's/^BUSCO //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/busco/busco/meta.yml b/modules/nf-core/busco/busco/meta.yml new file mode 100644 index 00000000..7cb6d69c --- /dev/null +++ b/modules/nf-core/busco/busco/meta.yml @@ -0,0 +1,152 @@ +name: busco_busco +description: Benchmarking Universal Single Copy Orthologs +keywords: + - quality control + - genome + - transcriptome + - proteome +tools: + - busco: + description: BUSCO provides measures for quantitative assessment of genome assembly, + gene set, and transcriptome completeness based on evolutionarily informed expectations + of gene content from near-universal single-copy orthologs selected from OrthoDB. + homepage: https://busco.ezlab.org/ + documentation: https://busco.ezlab.org/busco_userguide.html + tool_dev_url: https://gitlab.com/ezlab/busco + doi: "10.1007/978-1-4939-9173-0_14" + licence: ["MIT"] + identifier: biotools:busco +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Nucleic or amino acid sequence file in FASTA format. + pattern: "*.{fasta,fna,fa,fasta.gz,fna.gz,fa.gz}" + - - mode: + type: string + description: The mode to run Busco in. One of genome, proteins, or transcriptome + pattern: "{genome,proteins,transcriptome}" + - - lineage: + type: string + description: The BUSCO lineage to use, or "auto" to automatically select lineage + - - busco_lineages_path: + type: directory + description: Path to local BUSCO lineages directory. + - - config_file: + type: file + description: Path to BUSCO config file. +output: + - batch_summary: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco.batch_summary.txt": + type: file + description: Summary of all sequence files analyzed + pattern: "*-busco.batch_summary.txt" + - short_summaries_txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - short_summary.*.txt: + type: file + description: Short Busco summary in plain text format + pattern: "short_summary.*.txt" + - short_summaries_json: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - short_summary.*.json: + type: file + description: Short Busco summary in JSON format + pattern: "short_summary.*.json" + - full_table: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco/*/run_*/full_table.tsv": + type: file + description: Full BUSCO results table + pattern: "full_table.tsv" + - missing_busco_list: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco/*/run_*/missing_busco_list.tsv": + type: file + description: List of missing BUSCOs + pattern: "missing_busco_list.tsv" + - single_copy_proteins: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco/*/run_*/single_copy_proteins.faa": + type: file + description: Fasta file of single copy proteins (transcriptome mode) + pattern: "single_copy_proteins.faa" + - seq_dir: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco/*/run_*/busco_sequences": + type: directory + description: BUSCO sequence directory + pattern: "busco_sequences" + - translated_dir: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco/*/translated_proteins": + type: directory + description: Six frame translations of each transcript made by the transcriptome + mode + pattern: "translated_dir" + - busco_dir: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-busco": + type: directory + description: BUSCO lineage specific output + pattern: "*-busco" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" +maintainers: + - "@priyanka-surana" + - "@charles-plessy" + - "@mahesh-panchal" + - "@muffato" + - "@jvhagey" + - "@gallvp" From 3c660bb86ee98bf5b4a1ea4db76f3b1f5750d597 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 14:39:35 +0000 Subject: [PATCH 09/65] Updating all easy to update modules --- .../nf-core/miniprot/index/environment.yml | 5 + modules/nf-core/pretextmap/environment.yml | 6 + modules/nf-core/pretextmap/tests/main.nf.test | 148 +++++++++++++++++ .../pretextmap/tests/main.nf.test.snap | 157 ++++++++++++++++++ modules/nf-core/pretextmap/tests/tags.yml | 2 + .../nf-core/pretextsnapshot/environment.yml | 5 + .../nf-core/ucsc/bedtobigbed/environment.yml | 5 + 7 files changed, 328 insertions(+) create mode 100644 modules/nf-core/miniprot/index/environment.yml create mode 100644 modules/nf-core/pretextmap/environment.yml create mode 100644 modules/nf-core/pretextmap/tests/main.nf.test create mode 100644 modules/nf-core/pretextmap/tests/main.nf.test.snap create mode 100644 modules/nf-core/pretextmap/tests/tags.yml create mode 100644 modules/nf-core/pretextsnapshot/environment.yml create mode 100644 modules/nf-core/ucsc/bedtobigbed/environment.yml diff --git a/modules/nf-core/miniprot/index/environment.yml b/modules/nf-core/miniprot/index/environment.yml new file mode 100644 index 00000000..7e258a04 --- /dev/null +++ b/modules/nf-core/miniprot/index/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::miniprot=0.11=he4a0461_2 diff --git a/modules/nf-core/pretextmap/environment.yml b/modules/nf-core/pretextmap/environment.yml new file mode 100644 index 00000000..bfbbee2b --- /dev/null +++ b/modules/nf-core/pretextmap/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pretextmap=0.1.9 + - bioconda::samtools=1.17 diff --git a/modules/nf-core/pretextmap/tests/main.nf.test b/modules/nf-core/pretextmap/tests/main.nf.test new file mode 100644 index 00000000..cd2c3919 --- /dev/null +++ b/modules/nf-core/pretextmap/tests/main.nf.test @@ -0,0 +1,148 @@ +nextflow_process { + + name "Test Process PRETEXTMAP" + script "../main.nf" + process "PRETEXTMAP" + + tag "modules" + tag "modules_nfcore" + tag "pretext" + tag "pretextmap" + + test("homo_cram_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_cram_map_nofai") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + [] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_bam_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mapped_pairs_map") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file("https://raw.githubusercontent.com/4dn-dcic/pairix/master/samples/test_4dn.pairs.gz", checkIfExists: true) + ] + + input[1] = [ + [], + [], + [] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_cram_map_stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end: false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ] + + input[1] = [ + [ id: 'test2', single_end: false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/pretextmap/tests/main.nf.test.snap b/modules/nf-core/pretextmap/tests/main.nf.test.snap new file mode 100644 index 00000000..48697af8 --- /dev/null +++ b/modules/nf-core/pretextmap/tests/main.nf.test.snap @@ -0,0 +1,157 @@ +{ + "homo_cram_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T10:53:43.322902" + }, + "homo_cram_map_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:07:44.32508" + }, + "homo_cram_map_nofai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T10:58:16.804287" + }, + "mapped_pairs_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,b47be7fd285a2de68643f73f85ba84f1" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,b47be7fd285a2de68643f73f85ba84f1" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:07:32.047007" + }, + "homo_bam_map": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "1": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ], + "pretext": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pretext:md5,ae0f18b472e39de970fdc1aebc0f3f8d" + ] + ], + "versions": [ + "versions.yml:md5,894afb81509c847f7d9a58885e086b5c" + ] + } + ], + "timestamp": "2024-03-21T11:02:50.120033" + } +} \ No newline at end of file diff --git a/modules/nf-core/pretextmap/tests/tags.yml b/modules/nf-core/pretextmap/tests/tags.yml new file mode 100644 index 00000000..70f7eefc --- /dev/null +++ b/modules/nf-core/pretextmap/tests/tags.yml @@ -0,0 +1,2 @@ +pretextmap: + - "modules/nf-core/pretextmap/**" diff --git a/modules/nf-core/pretextsnapshot/environment.yml b/modules/nf-core/pretextsnapshot/environment.yml new file mode 100644 index 00000000..ed721522 --- /dev/null +++ b/modules/nf-core/pretextsnapshot/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::pretextsnapshot=0.0.4 diff --git a/modules/nf-core/ucsc/bedtobigbed/environment.yml b/modules/nf-core/ucsc/bedtobigbed/environment.yml new file mode 100644 index 00000000..62670c4e --- /dev/null +++ b/modules/nf-core/ucsc/bedtobigbed/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::ucsc-bedtobigbed=447 From 32152a5366b4d3051ce3f74d0f8bbff738ce5691 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 16:09:39 +0000 Subject: [PATCH 10/65] Fixes to modules --- modules/nf-core/pretextsnapshot/main.nf | 3 ++- modules/nf-core/pretextsnapshot/pretextsnapshot.diff | 12 +----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/modules/nf-core/pretextsnapshot/main.nf b/modules/nf-core/pretextsnapshot/main.nf index 39d72c74..5524785d 100644 --- a/modules/nf-core/pretextsnapshot/main.nf +++ b/modules/nf-core/pretextsnapshot/main.nf @@ -4,7 +4,8 @@ process PRETEXTSNAPSHOT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'docker.io/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/pretextsnapshot:0.0.4--h7d875b9_0': + 'biocontainers/pretextsnapshot:0.0.4--h7d875b9_0' }" input: tuple val(meta), path(pretext_map) diff --git a/modules/nf-core/pretextsnapshot/pretextsnapshot.diff b/modules/nf-core/pretextsnapshot/pretextsnapshot.diff index edd414d5..4759c3ae 100644 --- a/modules/nf-core/pretextsnapshot/pretextsnapshot.diff +++ b/modules/nf-core/pretextsnapshot/pretextsnapshot.diff @@ -3,17 +3,7 @@ Changes in module 'nf-core/pretextsnapshot' Changes in 'pretextsnapshot/main.nf': --- modules/nf-core/pretextsnapshot/main.nf +++ modules/nf-core/pretextsnapshot/main.nf -@@ -4,8 +4,7 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/pretextsnapshot:0.0.4--h7d875b9_0': -- 'biocontainers/pretextsnapshot:0.0.4--h7d875b9_0' }" -+ 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'docker.io/ubuntu:20.04' }" - - input: - tuple val(meta), path(pretext_map) -@@ -18,18 +17,31 @@ +@@ -18,18 +18,31 @@ task.ext.when == null || task.ext.when script: From 1beeeb5f25ec97b611485cf141ab1f45b85cdf46 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 20 Nov 2024 16:26:49 +0000 Subject: [PATCH 11/65] linting --- modules.json | 150 +++++++++++++-------------------------------------- 1 file changed, 38 insertions(+), 112 deletions(-) diff --git a/modules.json b/modules.json index 36502544..1296f7df 100755 --- a/modules.json +++ b/modules.json @@ -8,266 +8,192 @@ "bedtools/bamtobed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/intersect": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/makewindows": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "busco/busco": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/getchromsizes": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gnu/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "pretextmap": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "seqtk/cutn": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedgraphtobigwig": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedtobigbed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/mkcounts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/ustat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -276,4 +202,4 @@ } } } -} \ No newline at end of file +} From ae7380c03b02de96c6c3aa2b0c60553ef4ce6324 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 12:53:06 +0000 Subject: [PATCH 12/65] Patches --- modules/nf-core/fastk/fastk/fastk-fastk.diff | 5 ++++- modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/fastk/fastk/fastk-fastk.diff b/modules/nf-core/fastk/fastk/fastk-fastk.diff index 0a0cba9e..56003656 100644 --- a/modules/nf-core/fastk/fastk/fastk-fastk.diff +++ b/modules/nf-core/fastk/fastk/fastk-fastk.diff @@ -1,4 +1,6 @@ Changes in module 'nf-core/fastk/fastk' +'modules/nf-core/fastk/fastk/meta.yml' is unchanged +Changes in 'fastk/fastk/main.nf': --- modules/nf-core/fastk/fastk/main.nf +++ modules/nf-core/fastk/fastk/main.nf @@ -3,7 +3,7 @@ @@ -6,9 +8,10 @@ Changes in module 'nf-core/fastk/fastk' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' -+ container 'quay.io/sanger-tol/fastk:1.0.1-c1' ++ container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: tuple val(meta), path(reads) +'modules/nf-core/fastk/fastk/environment.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff index 4ae0d7be..ad1afd83 100644 --- a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff +++ b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff @@ -1,4 +1,6 @@ Changes in module 'nf-core/merquryfk/merquryfk' +'modules/nf-core/merquryfk/merquryfk/meta.yml' is unchanged +Changes in 'merquryfk/merquryfk/main.nf': --- modules/nf-core/merquryfk/merquryfk/main.nf +++ modules/nf-core/merquryfk/merquryfk/main.nf @@ -3,7 +3,7 @@ @@ -6,9 +8,10 @@ Changes in module 'nf-core/merquryfk/merquryfk' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - container 'ghcr.io/nbisweden/fastk_genescopefk_merquryfk:1.2' -+ container 'quay.io/sanger-tol/fastk:1.0.1-c1' ++ container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly), path(haplotigs) +'modules/nf-core/merquryfk/merquryfk/environment.yml' is unchanged ************************************************************ From 4ad0c6562714bab53c0d2b151f4c8d7f3ec40ca1 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 12:55:46 +0000 Subject: [PATCH 13/65] Adding steps to skip BUSCO --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c379c507..d1984149 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,4 +72,4 @@ jobs: - name: Singularity - Run FULL pipeline with test data # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ./sanger-treeval/${{ steps.branch-names.outputs.current_branch }}/main.nf -profile test_github,singularity --outdir ./Sing-Full + nextflow run ./sanger-treeval/${{ steps.branch-names.outputs.current_branch }}/main.nf -profile test_github,singularity --outdir ./Sing-Full --steps busco From 160af01e83a47f1678b1674a789bcf3fb90c7951 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 13:46:55 +0000 Subject: [PATCH 14/65] Pinning BUSCO to V5.5 --- modules.json | 151 ++++++++++++++----- modules/nf-core/busco/busco/busco-busco.diff | 26 ++++ modules/nf-core/busco/busco/main.nf | 4 +- 3 files changed, 141 insertions(+), 40 deletions(-) create mode 100644 modules/nf-core/busco/busco/busco-busco.diff diff --git a/modules.json b/modules.json index 1296f7df..54fd8a8a 100755 --- a/modules.json +++ b/modules.json @@ -8,192 +8,267 @@ "bedtools/bamtobed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/intersect": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/makewindows": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "busco/busco": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/busco/busco/busco-busco.diff" }, "bwamem2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/getchromsizes": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gnu/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "miniprot/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "miniprot/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "pretextmap": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "seqtk/cutn": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/bedgraphtobigwig": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/bedtobigbed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "windowmasker/mkcounts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "windowmasker/ustat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -202,4 +277,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/busco/busco/busco-busco.diff b/modules/nf-core/busco/busco/busco-busco.diff new file mode 100644 index 00000000..ea0a471b --- /dev/null +++ b/modules/nf-core/busco/busco/busco-busco.diff @@ -0,0 +1,26 @@ +Changes in module 'nf-core/busco/busco' +'modules/nf-core/busco/busco/meta.yml' is unchanged +Changes in 'busco/busco/main.nf': +--- modules/nf-core/busco/busco/main.nf ++++ modules/nf-core/busco/busco/main.nf +@@ -4,8 +4,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': +- 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" ++ 'https://depot.galaxyproject.org/singularity/busco:5.5.0--pyhdfd78af_0': ++ 'biocontainers/busco:5.5.0--pyhdfd78af_0' }" + + input: + tuple val(meta), path(fasta, stageAs:'tmp_input/*') + +'modules/nf-core/busco/busco/environment.yml' is unchanged +'modules/nf-core/busco/busco/tests/old_test.yml' is unchanged +'modules/nf-core/busco/busco/tests/nextflow.augustus.config' is unchanged +'modules/nf-core/busco/busco/tests/main.nf.test' is unchanged +'modules/nf-core/busco/busco/tests/tags.yml' is unchanged +'modules/nf-core/busco/busco/tests/nextflow.config' is unchanged +'modules/nf-core/busco/busco/tests/main.nf.test.snap' is unchanged +'modules/nf-core/busco/busco/tests/nextflow.metaeuk.config' is unchanged +************************************************************ diff --git a/modules/nf-core/busco/busco/main.nf b/modules/nf-core/busco/busco/main.nf index f7c1a662..f5650847 100644 --- a/modules/nf-core/busco/busco/main.nf +++ b/modules/nf-core/busco/busco/main.nf @@ -4,8 +4,8 @@ process BUSCO_BUSCO { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': - 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/busco:5.5.0--pyhdfd78af_0': + 'biocontainers/busco:5.5.0--pyhdfd78af_0' }" input: tuple val(meta), path(fasta, stageAs:'tmp_input/*') From 55ed6d6d293600ad1ec48244d9a374d195a97bf7 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 13:47:15 +0000 Subject: [PATCH 15/65] Removing steps var --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1984149..c379c507 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,4 +72,4 @@ jobs: - name: Singularity - Run FULL pipeline with test data # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ./sanger-treeval/${{ steps.branch-names.outputs.current_branch }}/main.nf -profile test_github,singularity --outdir ./Sing-Full --steps busco + nextflow run ./sanger-treeval/${{ steps.branch-names.outputs.current_branch }}/main.nf -profile test_github,singularity --outdir ./Sing-Full From 0ada598675f400f0587b9f0390bcc6190e5fa6af Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 14:36:57 +0000 Subject: [PATCH 16/65] Linting --- modules.json | 150 +++++++++++++-------------------------------------- 1 file changed, 38 insertions(+), 112 deletions(-) diff --git a/modules.json b/modules.json index 54fd8a8a..adc156f3 100755 --- a/modules.json +++ b/modules.json @@ -8,267 +8,193 @@ "bedtools/bamtobed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/intersect": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/makewindows": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "busco/busco": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/busco/busco/busco-busco.diff" }, "bwamem2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/getchromsizes": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gnu/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "pretextmap": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "seqtk/cutn": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedgraphtobigwig": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedtobigbed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/mkcounts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/ustat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -277,4 +203,4 @@ } } } -} \ No newline at end of file +} From 9268b77c6faf11f2cd0ca17a11fa90aa6e4a21c5 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 21 Nov 2024 15:13:47 +0000 Subject: [PATCH 17/65] Minor updates --- CHANGELOG.md | 17 +++++++++++------ subworkflows/local/read_coverage.nf | 4 ++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b20fdd83..fd69b777 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,13 @@ Our 3rd release for sanger-tol/treeval. - Adds a JBrowse Only workflow (this will lead to an update to the FULL workflow which can now call JBROWSE_ONLY and RAPID). - Updates to containers (local modules) to remove Anaconda dependencies following policy changes. - Updates to modules to remove Anaconda dependencies following policy changes + - The majority of these updates only remove the `default` channel from the environment.yml - CONDA warnings for modules which cannot use CONDA. - Removable of a liberal use of spaces. - reformat_intersect was previously not outputing version data. - Adding arch specification to Pretext GitHub actions runner. Hopefully this will stop the spurious errors we see on there. - Addition of steps into schema. +- Adds *ktab as an output. ### Parameters @@ -32,8 +34,8 @@ Note, since the pipeline is using Nextflow DSL2, each process will be run with i | Module | Old Version | New Versions | | -------------------------------------- | ---------------- | ------------ | | bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | -| bedtools | 2.31.1 | | -| busco | 5.5.0 | | +| bedtools | 2.31.1 | - | +| busco* | 5.5.0 | - | | bwa-mem2 | 2.2.1 | | | cat | 2.3.4 | | | chunk_fasta ( pyfasta ) | 0.5.2-1 | | @@ -45,23 +47,26 @@ Note, since the pipeline is using Nextflow DSL2, each process will be run with i | gcc | 10.4.0 | | | find_telomere_windows ( java-jdk ) | 8.0.112 | | | generate_cram_csv ( samtools ) | 1.17 | | -| gnu-sort | 8.25 | | +| gnu-sort | 8.25 | 9.3 | | juicer_tools_pre ( java-jdk ) | 8.0.112 | | | perl | 5.26.2 | | | merquryfk | 1.0.1 | | | minimap2 + samtools | 2.24 + 1.14 | | +| minimap2_index | 2.24 | 2.28 | | miniprot | 0.11--he4a0461_2 | | | mummer | 3.23 | | | paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | -| pretextmap + samtools | 0.0.2 + 1.17 | | +| pretextmap + samtools | 0.0.2 + 1.17 | 0.1.9 + 1.17 | | python | 3.9 | - | | - pandas | 1.5.2 | - | | samtools | 1.18 | 1.21 | | selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | | seqtk | 1.4 | | | tabix | 1.11 | | -| ucsc | 377 | | -| windowmasker (blast) | 2.14.0 | | +| ucsc | 377 | 447 | +| windowmasker (blast) | 2.14.0 | 2.15.0 | + +* busco is currently pinned to v5.5.0 - Upgrading v5.7.1 would cause github actions to crash. Further investigation needed. ## [1.1.1] - Ancient Aurora (H1) - [2024-04-26] diff --git a/subworkflows/local/read_coverage.nf b/subworkflows/local/read_coverage.nf index 4da5b0d9..6f553160 100755 --- a/subworkflows/local/read_coverage.nf +++ b/subworkflows/local/read_coverage.nf @@ -132,7 +132,6 @@ workflow READ_COVERAGE { } .set { genomecov_input } - // // MODULE: Genome2Cov @@ -140,7 +139,8 @@ workflow READ_COVERAGE { BEDTOOLS_GENOMECOV( genomecov_input.input_tuple, genomecov_input.dot_genome, - genomecov_input.file_suffix + genomecov_input.file_suffix, + false ) ch_versions = ch_versions.mix(BEDTOOLS_GENOMECOV.out.versions) From 8356733303899d7156d6046beaf59562c167bfe5 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Thu, 21 Nov 2024 15:25:03 +0000 Subject: [PATCH 18/65] Resources review --- conf/base.config | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/conf/base.config b/conf/base.config index 93360fc4..2e71a801 100755 --- a/conf/base.config +++ b/conf/base.config @@ -88,6 +88,7 @@ process { withName:SAMTOOLS_MERGE { cpus = { check_max( 16 * 1, 'cpus' ) } memory = { check_max( 50.GB * task.attempt, 'memory') } + time = { check_max( 30.h * task.attempt, 'time') } } // RESOURCES: MEMORY INTENSIVE STEPS, SOFTWARE TO BE UPDATED TO COMBAT THIS @@ -163,7 +164,7 @@ process { } withName: CRAM_FILTER_ALIGN_BWAMEM2_FIXMATE_SORT { cpus = { check_max( 16 * 1 , 'cpus' ) } - memory = { check_max( 1.GB * ( reference.size() < 2e9 ? 50 : Math.ceil( ( reference.size() / 1e+9 ) * 20 ) * Math.ceil( task.attempt * 1 ) ) , 'memory') } + memory = { check_max( 1.GB * ( reference.size() < 2e9 ? 80 : Math.ceil( ( reference.size() / 1e+9 ) * 30 ) * Math.ceil( task.attempt * 1 ) ) , 'memory') } } withName: CRAM_FILTER_MINIMAP2_FILTER5END_FIXMATE_SORT { @@ -179,11 +180,13 @@ process { withName: PRETEXTMAP_STANDRD{ cpus = { check_max( 8 * 1, 'cpus' ) } memory = { check_max( 3.GB * task.attempt, 'memory' ) } + time = { check_max( 1.h * ( ( fasta.size() < 4e9 ? 24 : 48 ) * Math.ceil( task.attempt * 1 ) ), 'time' ) } } withName: PRETEXTMAP_HIGHRES { cpus = { check_max( 6 * task.attempt, 'cpus' ) } memory = { check_max( 20.GB * Math.ceil( task.attempt * 2.6 ), 'memory' ) } + time = { check_max( 1.h * ( ( fasta.size() < 4e9 ? 24 : 48 ) * Math.ceil( task.attempt * 1 ) ), 'time' ) } } withName: PRETEXT_GRAPH { @@ -207,7 +210,8 @@ process { // add a cpus 16 if bam.size() >= 50GB withName: BAMTOBED_SORT { cpus = { check_max( 12 * 1, 'cpus' ) } - memory = { check_max( 3.GB * Math.ceil( bam.size() / 1e+9 ) * task.attempt, 'memory' ) } + memory = { check_max( 1.GB * ( ( bam.size() < 150e9 ? Math.ceil( bam.size() / 1e+9 ) : Math.ceil( bam.size() / 4e+9 ) ) * Math.ceil( task.attempt * 1 ) ), 'memory' ) } + time = { check_max( 30.h * task.attempt, 'time' ) } } withName: SAMTOOLS_MARKDUP { @@ -217,7 +221,7 @@ process { withName: COOLER_CLOAD { cpus = { check_max( 16 * 1, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } + memory = { check_max( 20.GB * task.attempt, 'memory' ) } } withName: MERQURYFK_MERQURYFK { @@ -278,6 +282,7 @@ process { withName: GET_PAIRED_CONTACT_BED { cpus = { check_max( ${ file.size() > 1e11 ? 12 : 6 } , 'cpus' ) } memory = { check_max( 1.GB * Math.ceil( file.size() / 2e+9 ) * task.attempt , 'memory' ) } + time = { check_max( 30.h * task.attempt, 'time' ) } } // @@ -308,4 +313,10 @@ process { withName: BEDTOOLS_INTERSECT { memory = { check_max( 6.GB * (task.attempt * task.attempt), 'memory' ) } } + + withName: GENERATE_CRAM_CSV { + cpus = { check_max( 6 , 'cpus' ) } + memory = { check_max( 30.GB * task.attempt , 'memory' ) } + time = { check_max( 10.h * task.attempt , 'time' ) } + } } From 0ecff8de8ad7421a799ebab8a65194114a848935 Mon Sep 17 00:00:00 2001 From: yumisims Date: Thu, 21 Nov 2024 17:19:58 +0000 Subject: [PATCH 19/65] add binfile output and update pretext_graph --- conf/modules.config | 9 +++++++++ modules/local/pretext_graph.nf | 2 +- nextflow.config | 1 + subworkflows/local/hic_mapping.nf | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 34b9d8bd..2ce39f58 100755 --- a/conf/modules.config +++ b/conf/modules.config @@ -344,6 +344,15 @@ process { ext.prefix = { "${meta.id}_hr" } } + + withName: YAHS { + publishDir = [ + path: { "${params.outdir}/hic_files/alignment_bin" }, + mode: params.publish_dir_mode + ] + } + + withName: "SNAPSHOT_SRES" { ext.args = { "--sequences '=full' --resolution 1440" } ext.prefix = { "${meta.id}_normal" } diff --git a/modules/local/pretext_graph.nf b/modules/local/pretext_graph.nf index 9a1d3ff2..81d0376a 100644 --- a/modules/local/pretext_graph.nf +++ b/modules/local/pretext_graph.nf @@ -2,7 +2,7 @@ process PRETEXT_GRAPH { tag "$meta.id" label 'process_single' - container "quay.io/sanger-tol/pretext:0.0.2-yy5-c3" + container "quay.io/biocontainers/pretextgraph:0.0.7--h4ac6f70_0" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { diff --git a/nextflow.config b/nextflow.config index 0b8e5d63..64ea209f 100755 --- a/nextflow.config +++ b/nextflow.config @@ -27,6 +27,7 @@ params { validate_params = true show_hidden_params = false schema_ignore_params = 'genomes' + binfile = false // Config options custom_config_version = 'master' diff --git a/subworkflows/local/hic_mapping.nf b/subworkflows/local/hic_mapping.nf index aed1f9bb..14d7cac3 100755 --- a/subworkflows/local/hic_mapping.nf +++ b/subworkflows/local/hic_mapping.nf @@ -22,6 +22,7 @@ include { HIC_BAMTOBED as HIC_BAMTOBED_COOLER } from '../../subworkf include { HIC_BAMTOBED as HIC_BAMTOBED_JUICER } from '../../subworkflows/local/hic_bamtobed' include { HIC_MINIMAP2 } from '../../subworkflows/local/hic_minimap2' include { HIC_BWAMEM2 } from '../../subworkflows/local/hic_bwamem2' +include { YAHS } from '../../modules/nf-core/yahs/main' workflow HIC_MAPPING { take: @@ -124,6 +125,24 @@ workflow HIC_MAPPING { ) } .set {pretext_input} + + if ( params.binfile == true ) { + + // + // LOGIC: MAKE YAHS INPUT + // + ref_yahs.map { meta, ref -> ref }.set{ch_ref} + reference_index.map { meta, fai -> fai }.set{ch_fai} + + // + // MODULE: RUN YAHS TO GENERATE ALIGNMENT BIN FILE + // + YAHS ( + mergedbam, + ch_ref, + ch_fai + ) + } // // MODULE: GENERATE PRETEXT MAP FROM MAPPED BAM FOR LOW RES From 26a41a864a99d057859dea8ccb55266e2088b055 Mon Sep 17 00:00:00 2001 From: yumisims Date: Thu, 21 Nov 2024 17:21:56 +0000 Subject: [PATCH 20/65] add binfile output and update pretext_graph --- modules.json | 5 ++ modules/nf-core/yahs/environment.yml | 5 ++ modules/nf-core/yahs/main.nf | 51 +++++++++++++ modules/nf-core/yahs/meta.yml | 78 ++++++++++++++++++++ modules/nf-core/yahs/tests/main.nf.test | 54 ++++++++++++++ modules/nf-core/yahs/tests/main.nf.test.snap | 37 ++++++++++ modules/nf-core/yahs/tests/nextflow.config | 6 ++ 7 files changed, 236 insertions(+) create mode 100644 modules/nf-core/yahs/environment.yml create mode 100644 modules/nf-core/yahs/main.nf create mode 100644 modules/nf-core/yahs/meta.yml create mode 100644 modules/nf-core/yahs/tests/main.nf.test create mode 100644 modules/nf-core/yahs/tests/main.nf.test.snap create mode 100644 modules/nf-core/yahs/tests/nextflow.config diff --git a/modules.json b/modules.json index adc156f3..c315d878 100755 --- a/modules.json +++ b/modules.json @@ -195,6 +195,11 @@ "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] + }, + "yahs": { + "branch": "master", + "git_sha": "d3a3d04073af68437f07e0fb9b88aa6172c3f678", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/yahs/environment.yml b/modules/nf-core/yahs/environment.yml new file mode 100644 index 00000000..cb2acec8 --- /dev/null +++ b/modules/nf-core/yahs/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::yahs=1.2a.2 diff --git a/modules/nf-core/yahs/main.nf b/modules/nf-core/yahs/main.nf new file mode 100644 index 00000000..6475fd91 --- /dev/null +++ b/modules/nf-core/yahs/main.nf @@ -0,0 +1,51 @@ +process YAHS { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/yahs:1.2--he4a0461_1': + 'biocontainers/yahs:1.2--he4a0461_1' }" + + input: + tuple val(meta), path(hic_map) + path fasta + path fai + + output: + tuple val(meta), path("*scaffolds_final.fa") , emit: scaffolds_fasta, optional: true + tuple val(meta), path("*scaffolds_final.agp"), emit: scaffolds_agp, optional: true + tuple val(meta), path("*bin") , emit: binary + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + yahs $args \\ + -o $prefix \\ + $fasta \\ + $hic_map + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + yahs: \$(yahs --version 2>&1) + END_VERSIONS + """ + + stub: + """ + touch ${prefix}_scaffold_final.fa + touch ${prefix}_scaffolds_final.agp + touch ${prefix}.bin + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + yahs: \$(yahs --version 2>&1) + END_VERSIONS + """ +} diff --git a/modules/nf-core/yahs/meta.yml b/modules/nf-core/yahs/meta.yml new file mode 100644 index 00000000..38869045 --- /dev/null +++ b/modules/nf-core/yahs/meta.yml @@ -0,0 +1,78 @@ +name: "yahs" +description: Performs assembly scaffolding using YaHS +keywords: + - scaffolding + - assembly + - yahs + - hic +tools: + - "yahs": + description: "YaHS, yet another Hi-C scaffolding tool." + homepage: "https://github.com/c-zhou/yahs" + documentation: "https://github.com/c-zhou/yahs" + tool_dev_url: "https://github.com/c-zhou/yahs" + doi: "10.1093/bioinformatics/btac808" + licence: ["MIT"] + identifier: biotools:yahs +input: + # Only when we have meta + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - hic_map: + type: file + description: BED file containing coordinates of read alignments + pattern: "*.{bed,bam,bin}" + - - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" + - - fai: + type: file + description: index of the reference file + pattern: "*.{fai}" +output: + #Only when we have meta + - scaffolds_fasta: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*scaffolds_final.fa": + type: file + description: FASTA file with resulting contigs + pattern: "*scaffolds_final.fa" + - scaffolds_agp: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*scaffolds_final.agp": + type: file + description: AGP file containing contigs placing coordinates + pattern: "*scaffolds_final.agp" + - binary: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*bin": + type: file + description: BIN file with alignment results of Hi-C reads to the contigs in + internal YaHS binary format + pattern: "*bin" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@ksenia-krasheninnikova" +maintainers: + - "@ksenia-krasheninnikova" + - "@yy5" diff --git a/modules/nf-core/yahs/tests/main.nf.test b/modules/nf-core/yahs/tests/main.nf.test new file mode 100644 index 00000000..ee53a110 --- /dev/null +++ b/modules/nf-core/yahs/tests/main.nf.test @@ -0,0 +1,54 @@ + +nextflow_process { + + name "Test Process YAHS" + script "../main.nf" + process "YAHS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "yahs" + tag "samtools/view" + + setup { + run("SAMTOOLS_VIEW") { + script "../../samtools/view" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + [] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = [] + """ + } + } + } + + test("homo_sapiens-bam-fasta-fai") { + + when { + process { + """ + input[0] = SAMTOOLS_VIEW.out.bam + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/yahs/tests/main.nf.test.snap b/modules/nf-core/yahs/tests/main.nf.test.snap new file mode 100644 index 00000000..c62caa91 --- /dev/null +++ b/modules/nf-core/yahs/tests/main.nf.test.snap @@ -0,0 +1,37 @@ +{ + "homo_sapiens-bam-fasta-fai": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "binary": [ + + ], + "scaffolds_agp": [ + + ], + "scaffolds_fasta": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-26T22:35:24.103271222" + } +} \ No newline at end of file diff --git a/modules/nf-core/yahs/tests/nextflow.config b/modules/nf-core/yahs/tests/nextflow.config new file mode 100644 index 00000000..1691f241 --- /dev/null +++ b/modules/nf-core/yahs/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: 'test_yahs:YAHS' { + ext.prefix = { "${meta.id}" } + ext.args = '--no-contig-ec' + } +} From cc96248aa883c81e1201544ff016c7edbd609126 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 22 Nov 2024 13:22:27 +0000 Subject: [PATCH 21/65] Updating last of NF-core modules --- modules.json | 15 +- .../bedtools/genomecov/environment.yml | 2 - modules/nf-core/bedtools/genomecov/main.nf | 13 +- modules/nf-core/bedtools/genomecov/meta.yml | 72 +-- .../bedtools/genomecov/tests/main.nf.test | 92 +++- .../genomecov/tests/main.nf.test.snap | 131 ++++- .../nf-core/bedtools/genomecov/tests/tags.yml | 2 - modules/nf-core/bedtools/map/environment.yml | 2 - modules/nf-core/bedtools/map/meta.yml | 70 +-- .../nf-core/bedtools/map/tests/main.nf.test | 12 +- modules/nf-core/cooler/cload/environment.yml | 2 - modules/nf-core/cooler/cload/meta.yml | 68 +-- .../nf-core/cooler/zoomify/environment.yml | 2 - modules/nf-core/cooler/zoomify/meta.yml | 45 +- modules/nf-core/fastk/fastk/environment.yml | 5 +- .../merquryfk/merquryfk/environment.yml | 5 +- .../nf-core/minimap2/align/environment.yml | 8 + modules/nf-core/minimap2/align/main.nf | 53 +- modules/nf-core/minimap2/align/meta.yml | 112 +++-- .../nf-core/minimap2/align/tests/main.nf.test | 441 ++++++++++++++++ .../minimap2/align/tests/main.nf.test.snap | 476 ++++++++++++++++++ modules/nf-core/minimap2/align/tests/tags.yml | 2 + modules/nf-core/mummer/environment.yml | 5 + modules/nf-core/mummer/main.nf | 6 +- modules/nf-core/mummer/meta.yml | 60 +-- modules/nf-core/mummer/mummer.diff | 14 - modules/nf-core/mummer/tests/main.nf.test | 58 +++ .../nf-core/mummer/tests/main.nf.test.snap | 68 +++ subworkflows/local/read_coverage.nf | 4 +- subworkflows/local/synteny.nf | 4 +- 30 files changed, 1563 insertions(+), 286 deletions(-) delete mode 100644 modules/nf-core/bedtools/genomecov/tests/tags.yml create mode 100644 modules/nf-core/minimap2/align/environment.yml create mode 100644 modules/nf-core/minimap2/align/tests/main.nf.test create mode 100644 modules/nf-core/minimap2/align/tests/main.nf.test.snap create mode 100644 modules/nf-core/minimap2/align/tests/tags.yml create mode 100644 modules/nf-core/mummer/environment.yml delete mode 100644 modules/nf-core/mummer/mummer.diff create mode 100644 modules/nf-core/mummer/tests/main.nf.test create mode 100644 modules/nf-core/mummer/tests/main.nf.test.snap diff --git a/modules.json b/modules.json index 1296f7df..ed38c68e 100755 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", + "git_sha": "bfa8975eefb8df3e480a44ac9e594f23f52b2963", "installed_by": ["modules"] }, "bedtools/intersect": { @@ -27,7 +27,7 @@ }, "bedtools/map": { "branch": "master", - "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedtools/merge": { @@ -57,12 +57,12 @@ }, "cooler/cload": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { @@ -93,7 +93,7 @@ }, "minimap2/align": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, @@ -114,9 +114,8 @@ }, "mummer": { "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"], - "patch": "modules/nf-core/mummer/mummer.diff" + "git_sha": "a15872dde4c4affaac2dfee6c3c65fadab4719bd", + "installed_by": ["modules"] }, "paftools/sam2paf": { "branch": "master", diff --git a/modules/nf-core/bedtools/genomecov/environment.yml b/modules/nf-core/bedtools/genomecov/environment.yml index 8fbe20c3..5683bc05 100644 --- a/modules/nf-core/bedtools/genomecov/environment.yml +++ b/modules/nf-core/bedtools/genomecov/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_genomecov channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/genomecov/main.nf b/modules/nf-core/bedtools/genomecov/main.nf index 7a4d9c45..35e2ab14 100644 --- a/modules/nf-core/bedtools/genomecov/main.nf +++ b/modules/nf-core/bedtools/genomecov/main.nf @@ -4,13 +4,14 @@ process BEDTOOLS_GENOMECOV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bedtools:2.31.1--hf5e1c6e_0' : - 'biocontainers/bedtools:2.31.1--hf5e1c6e_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6397750e9730a3fbcc5b4c43f14bd141c64c723fd7dad80e47921a68a7c3cd21/data': + 'community.wave.seqera.io/library/bedtools_coreutils:a623c13f66d5262b' }" input: tuple val(meta), path(intervals), val(scale) path sizes val extension + val sort output: tuple val(meta), path("*.${extension}"), emit: genomecov @@ -20,12 +21,16 @@ process BEDTOOLS_GENOMECOV { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def args_list = args.tokenize() args += (scale > 0 && scale != 1) ? " -scale $scale" : "" if (!args_list.contains('-bg') && (scale > 0 && scale != 1)) { args += " -bg" } + // Sorts output file by chromosome and position using additional options for performance and consistency + // See https://www.biostars.org/p/66927/ for further details + def buffer = task.memory ? "--buffer-size=${task.memory.toGiga().intdiv(2)}G" : '' + def sort_cmd = sort ? "| LC_ALL=C sort --parallel=$task.cpus $buffer -k1,1 -k2,2n" : '' def prefix = task.ext.prefix ?: "${meta.id}" if (intervals.name =~ /\.bam/) { @@ -34,6 +39,7 @@ process BEDTOOLS_GENOMECOV { genomecov \\ -ibam $intervals \\ $args \\ + $sort_cmd \\ > ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml @@ -48,6 +54,7 @@ process BEDTOOLS_GENOMECOV { -i $intervals \\ -g $sizes \\ $args \\ + $sort_cmd \\ > ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/bedtools/genomecov/meta.yml b/modules/nf-core/bedtools/genomecov/meta.yml index 2b2385e3..41b1f8f4 100644 --- a/modules/nf-core/bedtools/genomecov/meta.yml +++ b/modules/nf-core/bedtools/genomecov/meta.yml @@ -1,5 +1,6 @@ name: bedtools_genomecov -description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) summaries of feature coverage (e.g., aligned sequences) for a given genome. +description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) + summaries of feature coverage (e.g., aligned sequences) for a given genome. keywords: - bed - bam @@ -12,39 +13,50 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/genomecov.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bam|bed|gff|vcf}" - - scale: - type: integer - description: Number containing the scale factor for the output. Set to 1 to disable. Setting to a value other than 1 will also get the -bg bedgraph output format as this is required for this command switch - - sizes: - type: file - description: Tab-delimited table of chromosome names in the first column and chromosome sizes in the second column - - extension: - type: string - description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", ".tab", etc.) It is set arbitrarily by the user and corresponds to the file format which depends on arguments. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - scale: + type: integer + description: Number containing the scale factor for the output. Set to 1 to + disable. Setting to a value other than 1 will also get the -bg bedgraph output + format as this is required for this command switch + - - sizes: + type: file + description: Tab-delimited table of chromosome names in the first column and + chromosome sizes in the second column + - - extension: + type: string + description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", + ".tab", etc.) It is set arbitrarily by the user and corresponds to the file + format which depends on arguments. + - - sort: + type: boolean + description: Sort the output output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - genomecov: - type: file - description: Computed genome coverage file - pattern: "*.${extension}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: Computed genome coverage file + pattern: "*.${extension}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test b/modules/nf-core/bedtools/genomecov/tests/main.nf.test index 21e69aed..16a03492 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test @@ -9,19 +9,20 @@ nextflow_process { tag "bedtools" tag "bedtools/genomecov" - test("sarscov2 - no scale") { + test("sarscov2 - no scale") { when { process { - """ + """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), 1 ] // sizes input[1] = [] // extension input[2] = "txt" + input[3] = true """ } } @@ -29,25 +30,25 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("no_scale") } + { assert snapshot(process.out).match() } ) } - } test("sarscov2 - dummy sizes") { when { process { - """ + """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), 0.5 ] // sizes input[1] = file('dummy_chromosome_sizes') // extension input[2] = 'txt' + input[3] = false """ } } @@ -55,25 +56,25 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("dummy_sizes") } + { assert snapshot(process.out).match() } ) } - } test("sarscov2 - scale") { when { process { - """ + """ input[0] = [ [ id:'test'], - file(params.test_data['sarscov2']['genome']['baits_bed'], checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/baits.bed", checkIfExists: true), 0.5 ] // sizes - input[1] = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true) // extension input[2] = 'txt' + input[3] = false """ } } @@ -81,27 +82,55 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("scale") } + { assert snapshot(process.out).match() } ) } - } - test("stub") { + test("sarscov2 - no scale - stub") { options "-stub" when { process { - """ + """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), 1 ] // sizes input[1] = [] // extension + input[2] = "txt" + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - dummy sizes - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file('dummy_chromosome_sizes') + // extension input[2] = 'txt' + input[3] = false """ } } @@ -109,10 +138,37 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.genomecov[0][1]).name).match("stub") } + { assert snapshot(process.out).match() } ) } + } + + test("sarscov2 - scale - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/baits.bed", checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true) + // extension + input[2] = 'txt' + input[3] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } } } diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap index 8f9191e4..da6dbe87 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "dummy_sizes": { + "sarscov2 - dummy sizes": { "content": [ { "0": [ @@ -26,9 +26,13 @@ ] } ], - "timestamp": "2023-12-05T17:35:58.35232" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:33.898146" }, - "no_scale": { + "sarscov2 - no scale - stub": { "content": [ { "0": [ @@ -36,7 +40,7 @@ { "id": "test" }, - "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -47,7 +51,7 @@ { "id": "test" }, - "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -55,15 +59,46 @@ ] } ], - "timestamp": "2023-12-05T17:35:51.142496" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:52.483371" }, - "stub": { + "sarscov2 - scale": { "content": [ - "test.coverage.txt" + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } ], - "timestamp": "2023-12-05T17:36:13.084709" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:43.69501" }, - "scale": { + "sarscov2 - scale - stub": { "content": [ { "0": [ @@ -71,7 +106,7 @@ { "id": "test" }, - "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -82,7 +117,73 @@ { "id": "test" }, - "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:00:09.930036" + }, + "sarscov2 - no scale": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:25.448817" + }, + "sarscov2 - dummy sizes - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -90,6 +191,10 @@ ] } ], - "timestamp": "2023-12-05T17:36:05.962006" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:00:01.086433" } } \ No newline at end of file diff --git a/modules/nf-core/bedtools/genomecov/tests/tags.yml b/modules/nf-core/bedtools/genomecov/tests/tags.yml deleted file mode 100644 index 55fce478..00000000 --- a/modules/nf-core/bedtools/genomecov/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -bedtools/genomecov: - - "modules/nf-core/bedtools/genomecov/**" diff --git a/modules/nf-core/bedtools/map/environment.yml b/modules/nf-core/bedtools/map/environment.yml index f61ee028..5683bc05 100644 --- a/modules/nf-core/bedtools/map/environment.yml +++ b/modules/nf-core/bedtools/map/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_map channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/map/meta.yml b/modules/nf-core/bedtools/map/meta.yml index 0267f6ff..4e56bb94 100644 --- a/modules/nf-core/bedtools/map/meta.yml +++ b/modules/nf-core/bedtools/map/meta.yml @@ -12,43 +12,47 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/map.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals1: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bed|gff|vcf}" - - intervals2: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bed|gff|vcf}" - - meta2: - type: map - description: | - Groovy Map containing reference chromosome sizes - e.g. [ id:'test' ] - - chrom_sizes: - type: file - description: Chromosome sizes file - pattern: "*{.sizes,.txt}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals1: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bed|gff|vcf}" + - intervals2: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bed|gff|vcf}" + - - meta2: + type: map + description: | + Groovy Map containing reference chromosome sizes + e.g. [ id:'test' ] + - chrom_sizes: + type: file + description: Chromosome sizes file + pattern: "*{.sizes,.txt}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - mapped: - type: file - description: File containing the description of overlaps found between the features in A and the features in B, with statistics - pattern: "*.${extension}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: File containing the description of overlaps found between the features + in A and the features in B, with statistics + pattern: "*.${extension}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ekushele" maintainers: diff --git a/modules/nf-core/bedtools/map/tests/main.nf.test b/modules/nf-core/bedtools/map/tests/main.nf.test index 4adc0a21..e46cf743 100644 --- a/modules/nf-core/bedtools/map/tests/main.nf.test +++ b/modules/nf-core/bedtools/map/tests/main.nf.test @@ -18,8 +18,8 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test2_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test2.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -42,8 +42,8 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] input[1] = [[],[]] """ @@ -67,8 +67,8 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['test2_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test2.bed', checkIfExists: true) ] input[1] = [[],[]] """ diff --git a/modules/nf-core/cooler/cload/environment.yml b/modules/nf-core/cooler/cload/environment.yml index 03abee73..f8165ca9 100644 --- a/modules/nf-core/cooler/cload/environment.yml +++ b/modules/nf-core/cooler/cload/environment.yml @@ -1,7 +1,5 @@ -name: cooler_cload channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cooler=0.9.2 diff --git a/modules/nf-core/cooler/cload/meta.yml b/modules/nf-core/cooler/cload/meta.yml index fa5474ae..1bb9f748 100644 --- a/modules/nf-core/cooler/cload/meta.yml +++ b/modules/nf-core/cooler/cload/meta.yml @@ -13,41 +13,45 @@ tools: tool_dev_url: https://github.com/open2c/cooler doi: "10.1093/bioinformatics/btz540" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - pairs: - type: file - description: Path to contacts (i.e. read pairs) file. - - index: - type: file - description: Path to index file of the contacts. - - cool_bin: - type: integer - description: Bins size in bp - - chromsizes: - type: file - description: Path to a chromsizes file. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pairs: + type: file + description: Path to contacts (i.e. read pairs) file. + - index: + type: file + description: Path to index file of the contacts. + - cool_bin: + type: integer + description: Bins size in bp + - - chromsizes: + type: file + description: Path to a chromsizes file. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - version: - type: file - description: File containing software version - pattern: "versions.yml" - cool: - type: file - description: Output COOL file path - pattern: "*.cool" - - cool_bin: - type: integer - description: Bins size in bp + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cool": + type: file + description: Output COOL file path + pattern: "*.cool" + - cool_bin: + type: file + description: Output COOL file path + pattern: "*.cool" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jianhong" - "@muffato" diff --git a/modules/nf-core/cooler/zoomify/environment.yml b/modules/nf-core/cooler/zoomify/environment.yml index 2288f376..f8165ca9 100644 --- a/modules/nf-core/cooler/zoomify/environment.yml +++ b/modules/nf-core/cooler/zoomify/environment.yml @@ -1,7 +1,5 @@ -name: cooler_zoomify channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cooler=0.9.2 diff --git a/modules/nf-core/cooler/zoomify/meta.yml b/modules/nf-core/cooler/zoomify/meta.yml index d87aaf29..3f928781 100644 --- a/modules/nf-core/cooler/zoomify/meta.yml +++ b/modules/nf-core/cooler/zoomify/meta.yml @@ -12,30 +12,33 @@ tools: tool_dev_url: https://github.com/open2c/cooler doi: "10.1093/bioinformatics/btz540" licence: ["BSD-3-clause"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cool: - type: file - description: Path to COOL file - pattern: "*.{cool,mcool}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cool: + type: file + description: Path to COOL file + pattern: "*.{cool,mcool}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - mcool: - type: file - description: Output mcool file - pattern: "*.mcool" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mcool": + type: file + description: Output mcool file + pattern: "*.mcool" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jianhong" maintainers: diff --git a/modules/nf-core/fastk/fastk/environment.yml b/modules/nf-core/fastk/fastk/environment.yml index 54c932fe..19ab079a 100644 --- a/modules/nf-core/fastk/fastk/environment.yml +++ b/modules/nf-core/fastk/fastk/environment.yml @@ -1,5 +1,4 @@ name: fastk_fastk channels: - - conda-forge - - bioconda - - defaults + - conda-forge + - bioconda diff --git a/modules/nf-core/merquryfk/merquryfk/environment.yml b/modules/nf-core/merquryfk/merquryfk/environment.yml index 44a5ee9b..50d352bf 100644 --- a/modules/nf-core/merquryfk/merquryfk/environment.yml +++ b/modules/nf-core/merquryfk/merquryfk/environment.yml @@ -1,5 +1,4 @@ name: merquryfk_merquryfk channels: - - conda-forge - - bioconda - - defaults + - conda-forge + - bioconda diff --git a/modules/nf-core/minimap2/align/environment.yml b/modules/nf-core/minimap2/align/environment.yml new file mode 100644 index 00000000..dc6476b7 --- /dev/null +++ b/modules/nf-core/minimap2/align/environment.yml @@ -0,0 +1,8 @@ +channels: + - conda-forge + - bioconda + +dependencies: + - bioconda::htslib=1.20 + - bioconda::minimap2=2.28 + - bioconda::samtools=1.20 diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf index d7057674..c14d377d 100644 --- a/modules/nf-core/minimap2/align/main.nf +++ b/modules/nf-core/minimap2/align/main.nf @@ -1,43 +1,55 @@ process MINIMAP2_ALIGN { tag "$meta.id" - label 'process_medium' + label 'process_high' // Note: the versions here need to match the versions used in the mulled container below and minimap2/index - conda "bioconda::minimap2=2.24 bioconda::samtools=1.14" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:1679e915ddb9d6b4abda91880c4b48857d471bd8-0' : - 'biocontainers/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:1679e915ddb9d6b4abda91880c4b48857d471bd8-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:3161f532a5ea6f1dec9be5667c9efc2afdac6104-0' : + 'biocontainers/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:3161f532a5ea6f1dec9be5667c9efc2afdac6104-0' }" input: tuple val(meta), path(reads) - path reference + tuple val(meta2), path(reference) val bam_format + val bam_index_extension val cigar_paf_format val cigar_bam - val bed_format + val bed_bool + output: - tuple val(meta), path("*.paf"), optional: true, emit: paf - tuple val(meta), path("*.bam"), optional: true, emit: bam - tuple val(meta), path("*.bed"), optional: true, emit: bed - path "versions.yml" , emit: versions + tuple val(meta), path("*.paf") , optional: true, emit: paf + tuple val(meta), path("*.bam") , optional: true, emit: bam + tuple val(meta), path("*.bam.${bam_index_extension}"), optional: true, emit: index + tuple val(meta), path("*.bed") , optional: true, emit: bed + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args3 = task.ext.args3 ?: '' + def args4 = task.ext.args4 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def bam_index = bam_index_extension ? "${prefix}.bam##idx##${prefix}.bam.${bam_index_extension} --write-index" : "${prefix}.bam" def bam_output = reference.size() > 2.5e9 && bam_format ? "-a | samtools view -b -T ${reference} - > ${prefix}.bam" : reference.size() < 2.5e9 && bam_format ? "-a | samtools view -@ ${task.cpus} -b -h -o ${prefix}.bam" : bed_format ? "| paftools.js splice2bed - > ${prefix}.bed " : "-o ${prefix}.paf" def cigar_paf = cigar_paf_format && !bam_format ? "-c" : '' def set_cigar_bam = cigar_bam && bam_format ? "-L" : '' + def bam_input = "${reads.extension}".matches('sam|bam|cram') + def samtools_reset_fastq = bam_input ? "samtools reset --threads ${task.cpus-1} $args3 $reads | samtools fastq --threads ${task.cpus-1} $args4 |" : '' + def query = bam_input ? "-" : reads + def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) """ + $samtools_reset_fastq \\ minimap2 \\ $args \\ -t $task.cpus \\ - "${reference ?: reads}" \\ - "$reads" \\ + $target \\ + $query \\ $cigar_paf \\ $set_cigar_bam \\ $bam_output @@ -46,23 +58,24 @@ process MINIMAP2_ALIGN { cat <<-END_VERSIONS > versions.yml "${task.process}": minimap2: \$(minimap2 --version 2>&1) + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def bam_output = reference.size() > 2.5e9 && bam_format ? "-a | samtools view -b -T ${reference} - > ${prefix}.bam" : reference.size() < 2.5e9 && bam_format ? "-a | samtools view -@ ${task.cpus} -b -h -o ${prefix}.bam" : "-o ${prefix}.paf" - def cigar_paf = cigar_paf_format && !bam_format ? "-c" : '' - def set_cigar_bam = cigar_bam && bam_format ? "-L" : '' - def extension = bam_format ? "bam" : bed_format ? "bed" : "paf" + def output_file = bam_format ? "${prefix}.bam" : "${prefix}.paf" + def bam_index = bam_index_extension ? "touch ${prefix}.bam.${bam_index_extension}" : "" + def bam_input = "${reads.extension}".matches('sam|bam|cram') + def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) + """ - touch ${prefix}.${extension} + touch $output_file + ${bam_index} cat <<-END_VERSIONS > versions.yml "${task.process}": minimap2: \$(minimap2 --version 2>&1) END_VERSIONS """ - } - diff --git a/modules/nf-core/minimap2/align/meta.yml b/modules/nf-core/minimap2/align/meta.yml index 991b39a0..a4cfc891 100644 --- a/modules/nf-core/minimap2/align/meta.yml +++ b/modules/nf-core/minimap2/align/meta.yml @@ -14,52 +14,86 @@ tools: homepage: https://github.com/lh3/minimap2 documentation: https://github.com/lh3/minimap2#uguide licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FASTA or FASTQ files of size 1 and 2 for single-end - and paired-end data, respectively. - - reference: - type: file - description: | - Reference database in FASTA format. - - bam_format: - type: boolean - description: Specify that output should be in BAM format - - cigar_paf_format: - type: boolean - description: Specify that output CIGAR should be in PAF format - - cigar_bam: - type: boolean - description: | - Write CIGAR with >65535 ops at the CG tag. This is recommended when - doing XYZ (https://github.com/lh3/minimap2#working-with-65535-cigar-operations) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FASTA or FASTQ files of size 1 and 2 for single-end + and paired-end data, respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test_ref'] + - reference: + type: file + description: | + Reference database in FASTA format. + - - bam_format: + type: boolean + description: Specify that output should be in BAM format + - - bam_index_extension: + type: string + description: BAM alignment index extension (e.g. "bai") + - - cigar_paf_format: + type: boolean + description: Specify that output CIGAR should be in PAF format + - - cigar_bam: + type: boolean + description: | + Write CIGAR with >65535 ops at the CG tag. This is recommended when + doing XYZ (https://github.com/lh3/minimap2#working-with-65535-cigar-operations) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - paf: - type: file - description: Alignment in PAF format - pattern: "*.paf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.paf": + type: file + description: Alignment in PAF format + pattern: "*.paf" - bam: - type: file - description: Alignment in BAM format - pattern: "*.bam" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Alignment in BAM format + pattern: "*.bam" + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam.${bam_index_extension}": + type: file + description: BAM alignment index + pattern: "*.bam.*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@heuermh" - "@sofstam" - "@sateeshperi" - "@jfy133" + - "@fellen31" +maintainers: + - "@heuermh" + - "@sofstam" + - "@sateeshperi" + - "@jfy133" + - "@fellen31" diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test b/modules/nf-core/minimap2/align/tests/main.nf.test new file mode 100644 index 00000000..4072c171 --- /dev/null +++ b/modules/nf-core/minimap2/align/tests/main.nf.test @@ -0,0 +1,441 @@ +nextflow_process { + + name "Test Process MINIMAP2_ALIGN" + script "../main.nf" + process "MINIMAP2_ALIGN" + + tag "modules" + tag "modules_nfcore" + tag "minimap2" + tag "minimap2/align" + + test("sarscov2 - fastq, fasta, true, [], false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, fasta, true, 'bai', false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = 'bai' + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + file(process.out.index[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], fasta, true, false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, [], true, false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + ] + input[1] = [ + [ id:'test_ref' ], // meta map + [] + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - bam, fasta, true, [], false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - bam, fasta, true, 'bai', false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = 'bai' + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getHeader(), + bam(process.out.bam[0][1]).getReadsMD5(), + file(process.out.index[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - bam, [], true, false, false") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + [] + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.failed } + ) + } + + } + + test("sarscov2 - fastq, fasta, true, [], false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - fastq, fasta, true, 'bai', false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = 'bai' + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - fastq, fasta, false, [], false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = false + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam, fasta, true, [], false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam, fasta, true, 'bai', false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = true + input[3] = 'bai' + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam, [], true, false, false - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test3.single_end.markduplicates.sorted.bam', checkIfExists: true) + ] + input[1] = [ + [ id:'test_ref' ], // meta map + [] + ] + input[2] = true + input[3] = [] + input[4] = false + input[5] = false + """ + } + } + + then { + assertAll( + { assert process.failed } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test.snap b/modules/nf-core/minimap2/align/tests/main.nf.test.snap new file mode 100644 index 00000000..12264a85 --- /dev/null +++ b/modules/nf-core/minimap2/align/tests/main.nf.test.snap @@ -0,0 +1,476 @@ +{ + "sarscov2 - bam, fasta, true, 'bai', false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:MT192765.1\tLN:29829", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + ], + "5d426b9a5f5b2c54f1d7f1e4c238ae94", + "test.bam.bai", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-25T09:03:00.827260362" + }, + "sarscov2 - bam, fasta, true, 'bai', false, false - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "paf": [ + + ], + "versions": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:21:37.92353539" + }, + "sarscov2 - fastq, fasta, true, 'bai', false, false - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "paf": [ + + ], + "versions": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-03T11:29:44.669021368" + }, + "sarscov2 - fastq, fasta, false, [], false, false - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ], + "bam": [ + + ], + "index": [ + + ], + "paf": [ + [ + { + "id": "test", + "single_end": true + }, + "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-03T11:15:52.738781039" + }, + "sarscov2 - fastq, fasta, true, [], false, false - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + + ], + "paf": [ + + ], + "versions": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-03T11:15:23.033808223" + }, + "sarscov2 - [fastq1, fastq2], fasta, true, false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:MT192765.1\tLN:29829", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz test_2.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + ], + "1bc392244f228bf52cf0b5a8f6a654c9", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:18:18.964586894" + }, + "sarscov2 - fastq, fasta, true, [], false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:MT192765.1\tLN:29829", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + ], + "f194745c0ccfcb2a9c0aee094a08750", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:17:48.667488325" + }, + "sarscov2 - fastq, fasta, true, 'bai', false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:MT192765.1\tLN:29829", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + ], + "f194745c0ccfcb2a9c0aee094a08750", + "test.bam.bai", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:18:02.517416733" + }, + "sarscov2 - bam, fasta, true, [], false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:MT192765.1\tLN:29829", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + ], + "5d426b9a5f5b2c54f1d7f1e4c238ae94", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-25T09:02:49.64829488" + }, + "sarscov2 - bam, fasta, true, [], false, false - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "index": [ + + ], + "paf": [ + + ], + "versions": [ + "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:21:22.162291795" + }, + "sarscov2 - fastq, [], true, false, false": { + "content": [ + [ + "@HD\tVN:1.6\tSO:coordinate", + "@SQ\tSN:ERR5069949.2151832\tLN:150", + "@SQ\tSN:ERR5069949.576388\tLN:77", + "@SQ\tSN:ERR5069949.501486\tLN:146", + "@SQ\tSN:ERR5069949.1331889\tLN:132", + "@SQ\tSN:ERR5069949.2161340\tLN:80", + "@SQ\tSN:ERR5069949.973930\tLN:79", + "@SQ\tSN:ERR5069949.2417063\tLN:150", + "@SQ\tSN:ERR5069949.376959\tLN:151", + "@SQ\tSN:ERR5069949.1088785\tLN:149", + "@SQ\tSN:ERR5069949.1066259\tLN:147", + "@SQ\tSN:ERR5069949.2832676\tLN:139", + "@SQ\tSN:ERR5069949.2953930\tLN:151", + "@SQ\tSN:ERR5069949.324865\tLN:151", + "@SQ\tSN:ERR5069949.2185111\tLN:150", + "@SQ\tSN:ERR5069949.937422\tLN:151", + "@SQ\tSN:ERR5069949.2431709\tLN:150", + "@SQ\tSN:ERR5069949.1246538\tLN:148", + "@SQ\tSN:ERR5069949.1189252\tLN:98", + "@SQ\tSN:ERR5069949.2216307\tLN:147", + "@SQ\tSN:ERR5069949.3273002\tLN:148", + "@SQ\tSN:ERR5069949.3277445\tLN:151", + "@SQ\tSN:ERR5069949.3022231\tLN:147", + "@SQ\tSN:ERR5069949.184542\tLN:151", + "@SQ\tSN:ERR5069949.540529\tLN:149", + "@SQ\tSN:ERR5069949.686090\tLN:150", + "@SQ\tSN:ERR5069949.2787556\tLN:106", + "@SQ\tSN:ERR5069949.2650879\tLN:150", + "@SQ\tSN:ERR5069949.2064910\tLN:149", + "@SQ\tSN:ERR5069949.2328704\tLN:150", + "@SQ\tSN:ERR5069949.1067032\tLN:150", + "@SQ\tSN:ERR5069949.3338256\tLN:151", + "@SQ\tSN:ERR5069949.1412839\tLN:147", + "@SQ\tSN:ERR5069949.1538968\tLN:150", + "@SQ\tSN:ERR5069949.147998\tLN:94", + "@SQ\tSN:ERR5069949.366975\tLN:106", + "@SQ\tSN:ERR5069949.1372331\tLN:151", + "@SQ\tSN:ERR5069949.1709367\tLN:129", + "@SQ\tSN:ERR5069949.2388984\tLN:150", + "@SQ\tSN:ERR5069949.1132353\tLN:150", + "@SQ\tSN:ERR5069949.1151736\tLN:151", + "@SQ\tSN:ERR5069949.479807\tLN:150", + "@SQ\tSN:ERR5069949.2176303\tLN:151", + "@SQ\tSN:ERR5069949.2772897\tLN:151", + "@SQ\tSN:ERR5069949.1020777\tLN:122", + "@SQ\tSN:ERR5069949.465452\tLN:151", + "@SQ\tSN:ERR5069949.1704586\tLN:149", + "@SQ\tSN:ERR5069949.1258508\tLN:151", + "@SQ\tSN:ERR5069949.986441\tLN:119", + "@SQ\tSN:ERR5069949.2674295\tLN:148", + "@SQ\tSN:ERR5069949.885966\tLN:79", + "@SQ\tSN:ERR5069949.2342766\tLN:151", + "@SQ\tSN:ERR5069949.3122970\tLN:127", + "@SQ\tSN:ERR5069949.3279513\tLN:72", + "@SQ\tSN:ERR5069949.309410\tLN:151", + "@SQ\tSN:ERR5069949.532979\tLN:149", + "@SQ\tSN:ERR5069949.2888794\tLN:151", + "@SQ\tSN:ERR5069949.2205229\tLN:150", + "@SQ\tSN:ERR5069949.786562\tLN:151", + "@SQ\tSN:ERR5069949.919671\tLN:151", + "@SQ\tSN:ERR5069949.1328186\tLN:151", + "@SQ\tSN:ERR5069949.870926\tLN:149", + "@SQ\tSN:ERR5069949.2257580\tLN:151", + "@SQ\tSN:ERR5069949.3249622\tLN:77", + "@SQ\tSN:ERR5069949.611123\tLN:125", + "@SQ\tSN:ERR5069949.651338\tLN:142", + "@SQ\tSN:ERR5069949.169513\tLN:92", + "@SQ\tSN:ERR5069949.155944\tLN:150", + "@SQ\tSN:ERR5069949.2033605\tLN:150", + "@SQ\tSN:ERR5069949.2730382\tLN:142", + "@SQ\tSN:ERR5069949.2125592\tLN:150", + "@SQ\tSN:ERR5069949.1062611\tLN:151", + "@SQ\tSN:ERR5069949.1778133\tLN:151", + "@SQ\tSN:ERR5069949.3057020\tLN:95", + "@SQ\tSN:ERR5069949.2972968\tLN:141", + "@SQ\tSN:ERR5069949.2734474\tLN:149", + "@SQ\tSN:ERR5069949.856527\tLN:151", + "@SQ\tSN:ERR5069949.2098070\tLN:151", + "@SQ\tSN:ERR5069949.1552198\tLN:150", + "@SQ\tSN:ERR5069949.2385514\tLN:150", + "@SQ\tSN:ERR5069949.2270078\tLN:151", + "@SQ\tSN:ERR5069949.114870\tLN:150", + "@SQ\tSN:ERR5069949.2668880\tLN:147", + "@SQ\tSN:ERR5069949.257821\tLN:139", + "@SQ\tSN:ERR5069949.2243023\tLN:150", + "@SQ\tSN:ERR5069949.2605155\tLN:146", + "@SQ\tSN:ERR5069949.1340552\tLN:151", + "@SQ\tSN:ERR5069949.1561137\tLN:150", + "@SQ\tSN:ERR5069949.2361683\tLN:149", + "@SQ\tSN:ERR5069949.2521353\tLN:150", + "@SQ\tSN:ERR5069949.1261808\tLN:149", + "@SQ\tSN:ERR5069949.2734873\tLN:98", + "@SQ\tSN:ERR5069949.3017828\tLN:107", + "@SQ\tSN:ERR5069949.573706\tLN:150", + "@SQ\tSN:ERR5069949.1980512\tLN:151", + "@SQ\tSN:ERR5069949.1014693\tLN:150", + "@SQ\tSN:ERR5069949.3184655\tLN:150", + "@SQ\tSN:ERR5069949.29668\tLN:89", + "@SQ\tSN:ERR5069949.3258358\tLN:151", + "@SQ\tSN:ERR5069949.1476386\tLN:151", + "@SQ\tSN:ERR5069949.2415814\tLN:150", + "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a test_1.fastq.gz test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + ], + "16c1c651f8ec67383bcdee3c55aed94f", + [ + "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-23T11:18:34.246998277" + } +} \ No newline at end of file diff --git a/modules/nf-core/minimap2/align/tests/tags.yml b/modules/nf-core/minimap2/align/tests/tags.yml new file mode 100644 index 00000000..39dba374 --- /dev/null +++ b/modules/nf-core/minimap2/align/tests/tags.yml @@ -0,0 +1,2 @@ +minimap2/align: + - "modules/nf-core/minimap2/align/**" diff --git a/modules/nf-core/mummer/environment.yml b/modules/nf-core/mummer/environment.yml new file mode 100644 index 00000000..643eff0f --- /dev/null +++ b/modules/nf-core/mummer/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mummer=3.23 diff --git a/modules/nf-core/mummer/main.nf b/modules/nf-core/mummer/main.nf index 37d8e2b0..17b05dd5 100644 --- a/modules/nf-core/mummer/main.nf +++ b/modules/nf-core/mummer/main.nf @@ -3,13 +3,13 @@ process MUMMER { label 'process_low' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - conda "bioconda::mummer=3.23" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mummer:3.23--pl5262h1b792b2_12' : 'biocontainers/mummer:3.23--pl5262h1b792b2_12' }" input: - tuple val(meta), path(ref, stageAs: 'ref.fasta'), path(query, stageAs: 'query.fasta') // Staging removes the ability to deal with zipped files here + tuple val(meta), path(ref), path(query) output: tuple val(meta), path("*.coords"), emit: coords @@ -50,7 +50,7 @@ process MUMMER { def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = '3.23' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ - touch ${prefx}.coords + touch ${prefix}.coords cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mummer/meta.yml b/modules/nf-core/mummer/meta.yml index f03d483c..3a4be42f 100644 --- a/modules/nf-core/mummer/meta.yml +++ b/modules/nf-core/mummer/meta.yml @@ -12,37 +12,41 @@ tools: tool_dev_url: http://mummer.sourceforge.net/ doi: 10.1186/gb-2004-5-2-r12 licence: ["The Artistic License"] - + identifier: biotools:mummer input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ref: - type: file - description: FASTA file of the reference sequence - pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz}" - - query: - type: file - description: FASTA file of the query sequence - pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ref: + type: file + description: FASTA file of the reference sequence + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz}" + - query: + type: file + description: FASTA file of the query sequence + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - coords: - type: file - description: File containing coordinates of matches between reference and query sequence - pattern: "*.coords" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.coords": + type: file + description: File containing coordinates of matches between reference and query + sequence + pattern: "*.coords" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@mjcipriano" - "@sateeshperi" +maintainers: + - "@mjcipriano" + - "@sateeshperi" diff --git a/modules/nf-core/mummer/mummer.diff b/modules/nf-core/mummer/mummer.diff deleted file mode 100644 index a0391dd0..00000000 --- a/modules/nf-core/mummer/mummer.diff +++ /dev/null @@ -1,14 +0,0 @@ -Changes in module 'nf-core/mummer' ---- modules/nf-core/mummer/main.nf -+++ modules/nf-core/mummer/main.nf -@@ -9,7 +9,7 @@ - 'biocontainers/mummer:3.23--pl5262h1b792b2_12' }" - - input: -- tuple val(meta), path(ref), path(query) -+ tuple val(meta), path(ref, stageAs: 'ref.fasta'), path(query, stageAs: 'query.fasta') // Staging removes the ability to deal with zipped files here - - output: - tuple val(meta), path("*.coords"), emit: coords - -************************************************************ diff --git a/modules/nf-core/mummer/tests/main.nf.test b/modules/nf-core/mummer/tests/main.nf.test new file mode 100644 index 00000000..b079d209 --- /dev/null +++ b/modules/nf-core/mummer/tests/main.nf.test @@ -0,0 +1,58 @@ +nextflow_process { + + name "Test Process MUMMER" + script "../main.nf" + process "MUMMER" + + tag "modules" + tag "modules_nfcore" + tag "mummer" + + test("sarscov2 - bam") { + + when { + process { + """ + + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/transcriptome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/transcriptome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/mummer/tests/main.nf.test.snap b/modules/nf-core/mummer/tests/main.nf.test.snap new file mode 100644 index 00000000..fea2282a --- /dev/null +++ b/modules/nf-core/mummer/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coords:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,c36e386e2de805cf815ba20359fca81c" + ], + "coords": [ + [ + { + "id": "test" + }, + "test.coords:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,c36e386e2de805cf815ba20359fca81c" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-12T06:08:50.368788562" + }, + "sarscov2 - bam": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coords:md5,6084fe43c7cb2eca8b96d674560bdefc" + ] + ], + "1": [ + "versions.yml:md5,c36e386e2de805cf815ba20359fca81c" + ], + "coords": [ + [ + { + "id": "test" + }, + "test.coords:md5,6084fe43c7cb2eca8b96d674560bdefc" + ] + ], + "versions": [ + "versions.yml:md5,c36e386e2de805cf815ba20359fca81c" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.0" + }, + "timestamp": "2024-11-12T06:08:40.932078101" + } +} \ No newline at end of file diff --git a/subworkflows/local/read_coverage.nf b/subworkflows/local/read_coverage.nf index 6f553160..37d1f753 100755 --- a/subworkflows/local/read_coverage.nf +++ b/subworkflows/local/read_coverage.nf @@ -66,8 +66,9 @@ workflow READ_COVERAGE { pre_minimap_input .multiMap { meta, reads_path, ref, bam_output, cigar_paf, cigar_bam, bed_output, reads_type -> read_tuple : tuple( meta, reads_path) - ref : ref + ref : tuple( meta, ref) bool_bam_ouput : bam_output + val_bam_index : "bai" bool_cigar_paf : cigar_paf bool_cigar_bam : cigar_bam bool_bed_output : bed_output @@ -81,6 +82,7 @@ workflow READ_COVERAGE { minimap_input.read_tuple, minimap_input.ref, minimap_input.bool_bam_ouput, + minimap_input.val_bam_index, minimap_input.bool_cigar_paf, minimap_input.bool_cigar_bam, minimap_input.bool_bed_output diff --git a/subworkflows/local/synteny.nf b/subworkflows/local/synteny.nf index 04b43cf4..f18ac0a0 100755 --- a/subworkflows/local/synteny.nf +++ b/subworkflows/local/synteny.nf @@ -26,8 +26,9 @@ workflow SYNTENY { .combine(reference_tuple) .multiMap{syntenic_ref, meta, ref -> syntenic_tuple : tuple(meta, syntenic_ref) - reference_fa : ref + reference_fa : tuple(meta, ref) bool_bam_output : false + val_bam_index : "bai" bool_cigar_paf : true bool_cigar_bam : false bool_bedfile : false @@ -42,6 +43,7 @@ workflow SYNTENY { mm_input.syntenic_tuple, mm_input.reference_fa, mm_input.bool_bam_output, + mm_input.val_bam_index, mm_input.bool_cigar_paf, mm_input.bool_cigar_bam, mm_input.bool_bedfile, From b31d536b825591d1bef5eb0e1a20b01f6a0dbf6b Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 22 Nov 2024 14:20:40 +0000 Subject: [PATCH 22/65] Updates --- modules/nf-core/minimap2/align/main.nf | 2 +- subworkflows/local/nuc_alignments.nf | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf index c14d377d..4faab880 100644 --- a/modules/nf-core/minimap2/align/main.nf +++ b/modules/nf-core/minimap2/align/main.nf @@ -35,7 +35,7 @@ process MINIMAP2_ALIGN { def args4 = task.ext.args4 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def bam_index = bam_index_extension ? "${prefix}.bam##idx##${prefix}.bam.${bam_index_extension} --write-index" : "${prefix}.bam" - def bam_output = reference.size() > 2.5e9 && bam_format ? "-a | samtools view -b -T ${reference} - > ${prefix}.bam" : reference.size() < 2.5e9 && bam_format ? "-a | samtools view -@ ${task.cpus} -b -h -o ${prefix}.bam" : bed_format ? "| paftools.js splice2bed - > ${prefix}.bed " : "-o ${prefix}.paf" + def bam_output = reference.size() > 2.5e9 && bam_format ? "-a | samtools view -b -T ${reference} - > ${prefix}.bam" : reference.size() < 2.5e9 && bam_format ? "-a | samtools view -@ ${task.cpus} -b -h -o ${prefix}.bam" : bed_bool ? "| paftools.js splice2bed - > ${prefix}.bed " : "-o ${prefix}.paf" def cigar_paf = cigar_paf_format && !bam_format ? "-c" : '' def set_cigar_bam = cigar_bam && bam_format ? "-L" : '' def bam_input = "${reads.extension}".matches('sam|bam|cram') diff --git a/subworkflows/local/nuc_alignments.nf b/subworkflows/local/nuc_alignments.nf index e918b643..1aa0a4da 100755 --- a/subworkflows/local/nuc_alignments.nf +++ b/subworkflows/local/nuc_alignments.nf @@ -55,8 +55,9 @@ workflow NUC_ALIGNMENTS { } .multiMap {meta, nuc_file, reference, bool_1, bool_2, bool_3, bool_4 -> nuc : tuple(meta, nuc_file) - ref : reference + ref : tuple(meta, reference) bool_bam_output : bool_1 + val_bam_output : "bai" bool_cigar_paf : bool_2 bool_cigar_bam : bool_3 bool_bedfile : bool_4 @@ -71,6 +72,7 @@ workflow NUC_ALIGNMENTS { formatted_input.nuc, formatted_input.ref, formatted_input.bool_bam_output, + formatted_input.val_bam_output, formatted_input.bool_cigar_paf, formatted_input.bool_cigar_bam, formatted_input.bool_bedfile From 60a064234d41ce05743831e66b49828631565892 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 22 Nov 2024 15:52:27 +0000 Subject: [PATCH 23/65] Updates --- modules/nf-core/busco/busco/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/busco/busco/main.nf b/modules/nf-core/busco/busco/main.nf index f5650847..f7c1a662 100644 --- a/modules/nf-core/busco/busco/main.nf +++ b/modules/nf-core/busco/busco/main.nf @@ -4,8 +4,8 @@ process BUSCO_BUSCO { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/busco:5.5.0--pyhdfd78af_0': - 'biocontainers/busco:5.5.0--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': + 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" input: tuple val(meta), path(fasta, stageAs:'tmp_input/*') From f2a9c5b0a393ece348c6d56169f10ff38047b9c6 Mon Sep 17 00:00:00 2001 From: yumisims Date: Mon, 25 Nov 2024 13:10:45 +0000 Subject: [PATCH 24/65] update containter --- modules/local/pretext_graph.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/pretext_graph.nf b/modules/local/pretext_graph.nf index 81d0376a..60527482 100644 --- a/modules/local/pretext_graph.nf +++ b/modules/local/pretext_graph.nf @@ -2,7 +2,7 @@ process PRETEXT_GRAPH { tag "$meta.id" label 'process_single' - container "quay.io/biocontainers/pretextgraph:0.0.7--h4ac6f70_0" + container "quay.io/sanger-tol/pretext:0.0.3-yy5-c1" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { From 0da07eecace087f8b0a3064a052f83c11e86fc79 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 25 Nov 2024 13:20:25 +0000 Subject: [PATCH 25/65] Update to modules and changelogs to remove Anaconda --- CHANGELOG.md | 2 +- CITATIONS.md | 4 +-- README.md | 2 +- modules/local/pretext_graph.nf | 2 +- modules/nf-core/busco/busco/busco-busco.diff | 26 -------------------- modules/nf-core/pretextmap/main.nf | 2 +- 6 files changed, 6 insertions(+), 32 deletions(-) delete mode 100644 modules/nf-core/busco/busco/busco-busco.diff diff --git a/CHANGELOG.md b/CHANGELOG.md index fd69b777..bc4f3052 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,7 +56,7 @@ Note, since the pipeline is using Nextflow DSL2, each process will be run with i | miniprot | 0.11--he4a0461_2 | | | mummer | 3.23 | | | paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | -| pretextmap + samtools | 0.0.2 + 1.17 | 0.1.9 + 1.17 | +| pretextmap + samtools | 0.0.2 + 1.17 | 0.0.3 + 1.17 | | python | 3.9 | - | | - pandas | 1.5.2 | - | | samtools | 1.18 | 1.21 | diff --git a/CITATIONS.md b/CITATIONS.md index 7db8de50..2c7295da 100755 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -112,9 +112,9 @@ ## Software packaging/containerisation tools -- [Anaconda](https://anaconda.com) +- [Conda](https://conda.org/) - > Anaconda Software Distribution. 2016. Computer software. Vers. 2-2.4.0. Anaconda, Web. + > conda contributors. conda: A system-level, binary package and environment manager running on all major operating systems and platforms. Computer software. https://github.com/conda/conda - [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) diff --git a/README.md b/README.md index ada31f21..a1a95647 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Cite with Zenodo](https://zenodo.org/badge/509096312.svg)](https://zenodo.org/doi/10.5281/zenodo.10047653) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A522.10.1-23aa62.svg)](https://www.nextflow.io/) -[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) +[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=conda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Nextflow Tower](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Nextflow%20Tower-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/sanger-tol/treeval) diff --git a/modules/local/pretext_graph.nf b/modules/local/pretext_graph.nf index 9a1d3ff2..60527482 100644 --- a/modules/local/pretext_graph.nf +++ b/modules/local/pretext_graph.nf @@ -2,7 +2,7 @@ process PRETEXT_GRAPH { tag "$meta.id" label 'process_single' - container "quay.io/sanger-tol/pretext:0.0.2-yy5-c3" + container "quay.io/sanger-tol/pretext:0.0.3-yy5-c1" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { diff --git a/modules/nf-core/busco/busco/busco-busco.diff b/modules/nf-core/busco/busco/busco-busco.diff deleted file mode 100644 index ea0a471b..00000000 --- a/modules/nf-core/busco/busco/busco-busco.diff +++ /dev/null @@ -1,26 +0,0 @@ -Changes in module 'nf-core/busco/busco' -'modules/nf-core/busco/busco/meta.yml' is unchanged -Changes in 'busco/busco/main.nf': ---- modules/nf-core/busco/busco/main.nf -+++ modules/nf-core/busco/busco/main.nf -@@ -4,8 +4,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/busco:5.7.1--pyhdfd78af_0': -- 'biocontainers/busco:5.7.1--pyhdfd78af_0' }" -+ 'https://depot.galaxyproject.org/singularity/busco:5.5.0--pyhdfd78af_0': -+ 'biocontainers/busco:5.5.0--pyhdfd78af_0' }" - - input: - tuple val(meta), path(fasta, stageAs:'tmp_input/*') - -'modules/nf-core/busco/busco/environment.yml' is unchanged -'modules/nf-core/busco/busco/tests/old_test.yml' is unchanged -'modules/nf-core/busco/busco/tests/nextflow.augustus.config' is unchanged -'modules/nf-core/busco/busco/tests/main.nf.test' is unchanged -'modules/nf-core/busco/busco/tests/tags.yml' is unchanged -'modules/nf-core/busco/busco/tests/nextflow.config' is unchanged -'modules/nf-core/busco/busco/tests/main.nf.test.snap' is unchanged -'modules/nf-core/busco/busco/tests/nextflow.metaeuk.config' is unchanged -************************************************************ diff --git a/modules/nf-core/pretextmap/main.nf b/modules/nf-core/pretextmap/main.nf index 95824c45..cbcaf68c 100644 --- a/modules/nf-core/pretextmap/main.nf +++ b/modules/nf-core/pretextmap/main.nf @@ -4,7 +4,7 @@ process PRETEXTMAP { label 'process_single' conda "${moduleDir}/environment.yml" - container "quay.io/sanger-tol/pretext:0.0.2-yy5-c4" + container "quay.io/sanger-tol/pretext:0.0.3-yy5-c1" input: tuple val(meta), path(input) From 057252e870528c639b953f3935f4963bd2d4098a Mon Sep 17 00:00:00 2001 From: yumisims Date: Mon, 25 Nov 2024 13:20:32 +0000 Subject: [PATCH 26/65] added bin file param --- nextflow_schema.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index f8921bc3..b6f8b669 100755 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -35,6 +35,14 @@ "default": false, "fa_icon": "fas fa-check" }, + "binfile": { + "type": "boolean", + "format": "boolean", + "description": "If false then turn off bin file generation", + "default": false, + "fa_icon": "fas fa-check" + }, + "steps": { "type": "string", "description": "A csv list of steps to skip", From d768e47a12f9cf040972d8debe4365d845c17cd8 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 25 Nov 2024 13:26:40 +0000 Subject: [PATCH 27/65] PRETTIER --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc4f3052..4c188317 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ Our 3rd release for sanger-tol/treeval. - reformat_intersect was previously not outputing version data. - Adding arch specification to Pretext GitHub actions runner. Hopefully this will stop the spurious errors we see on there. - Addition of steps into schema. -- Adds *ktab as an output. +- Adds \*ktab as an output. ### Parameters @@ -35,7 +35,7 @@ Note, since the pipeline is using Nextflow DSL2, each process will be run with i | -------------------------------------- | ---------------- | ------------ | | bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | | bedtools | 2.31.1 | - | -| busco* | 5.5.0 | - | +| busco\* | 5.5.0 | - | | bwa-mem2 | 2.2.1 | | | cat | 2.3.4 | | | chunk_fasta ( pyfasta ) | 0.5.2-1 | | @@ -66,7 +66,7 @@ Note, since the pipeline is using Nextflow DSL2, each process will be run with i | ucsc | 377 | 447 | | windowmasker (blast) | 2.14.0 | 2.15.0 | -* busco is currently pinned to v5.5.0 - Upgrading v5.7.1 would cause github actions to crash. Further investigation needed. +- busco is currently pinned to v5.5.0 - Upgrading v5.7.1 would cause github actions to crash. Further investigation needed. ## [1.1.1] - Ancient Aurora (H1) - [2024-04-26] From 52ba726993ba267639fd8dda2fb384ca236ce6a1 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 25 Nov 2024 13:28:32 +0000 Subject: [PATCH 28/65] PRETTIER --- modules/nf-core/fastk/fastk/environment.yml | 4 ++-- modules/nf-core/merquryfk/merquryfk/environment.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/nf-core/fastk/fastk/environment.yml b/modules/nf-core/fastk/fastk/environment.yml index 19ab079a..690a3f7a 100644 --- a/modules/nf-core/fastk/fastk/environment.yml +++ b/modules/nf-core/fastk/fastk/environment.yml @@ -1,4 +1,4 @@ name: fastk_fastk channels: - - conda-forge - - bioconda + - conda-forge + - bioconda diff --git a/modules/nf-core/merquryfk/merquryfk/environment.yml b/modules/nf-core/merquryfk/merquryfk/environment.yml index 50d352bf..fa6cb1a0 100644 --- a/modules/nf-core/merquryfk/merquryfk/environment.yml +++ b/modules/nf-core/merquryfk/merquryfk/environment.yml @@ -1,4 +1,4 @@ name: merquryfk_merquryfk channels: - - conda-forge - - bioconda + - conda-forge + - bioconda From f080b9783bae2c1f00148bf1ee759037594fa73e Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 26 Nov 2024 09:57:25 +0000 Subject: [PATCH 29/65] Update modules.config for BUSCO_BUSCO --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 34b9d8bd..d9dd20f1 100755 --- a/conf/modules.config +++ b/conf/modules.config @@ -316,7 +316,7 @@ process { } withName: "BUSCO_BUSCO" { - ext.args = "--offline" + ext.args = "--offline --metaeuk" } From 504323416a84a9f9320a9a87b2240f5df638c39f Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 26 Nov 2024 12:30:34 +0000 Subject: [PATCH 30/65] New module replaces chunkfasta --- modules/local/seqkit/split/main.nf | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 modules/local/seqkit/split/main.nf diff --git a/modules/local/seqkit/split/main.nf b/modules/local/seqkit/split/main.nf new file mode 100755 index 00000000..fa0dfdbf --- /dev/null +++ b/modules/local/seqkit/split/main.nf @@ -0,0 +1,43 @@ +process SEQKIT_SPLIT { + tag "${meta.id}" + label 'process_low' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqkit:2.9.0--h9ee0642_0' : + 'biocontainers/seqkit:2.9.0--h9ee0642_0' }" + + input: + tuple val(meta), path(fasta) + val(number_of_chunks) + + output: + tuple val(meta), path('*.fa'), emit: fasta + path "versions.yml", emit: versions + + script: + // This should be abstracted outside of the container to + // stop it spinning up in the first place, + // however dsl2 can't do comparisons with channels which makes it harder + """ + if [ $number_of_chunks -le 1 ]; then + mv input.fasta ${meta.id}_whole.fa + else + seqkit split ${fasta} -p $number_of_chunks -O ./ + fi + + cat <<-END_VERSIONS > versions.yml + "${task.proce ss}": + seqkit: \$(seqkit version | sed -e "s/seqkit v//g") + END_VERSIONS + """ + + stub: + """ + touch ${prefix}.fa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | sed -e "s/seqkit v//g") + END_VERSIONS + """ +} From 286c1eab20721cd5bb87204d08973e3dbcde464b Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 26 Nov 2024 12:30:57 +0000 Subject: [PATCH 31/65] Updates to changelog and removing CHUNKFASTA, replaced with seqkit --- CHANGELOG.md | 72 ++++++++++++++++++---------------- modules/local/chunkfasta.nf | 48 ----------------------- subworkflows/local/selfcomp.nf | 13 +++--- 3 files changed, 44 insertions(+), 89 deletions(-) delete mode 100755 modules/local/chunkfasta.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c188317..6be0c8b6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ Our 3rd release for sanger-tol/treeval. - Adding arch specification to Pretext GitHub actions runner. Hopefully this will stop the spurious errors we see on there. - Addition of steps into schema. - Adds \*ktab as an output. +- Updated singularity containers +- Added `--metaeuk` to BUSCO_BUSCO, default was causing pipeline errors on Actions -- Needs more investigation. +- Replaced Pyfasta split (depreciated 6 years ago) with Seqkit split which is frequently updated and very fast. ### Parameters @@ -31,40 +34,41 @@ Our 3rd release for sanger-tol/treeval. Note, since the pipeline is using Nextflow DSL2, each process will be run with its own Biocontainer. This means that on occasion it is entirely possible for the pipeline to be using different versions of the same tool. However, the overall software dependency changes compared to the last release have been listed below for reference. -| Module | Old Version | New Versions | -| -------------------------------------- | ---------------- | ------------ | -| bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | -| bedtools | 2.31.1 | - | -| busco\* | 5.5.0 | - | -| bwa-mem2 | 2.2.1 | | -| cat | 2.3.4 | | -| chunk_fasta ( pyfasta ) | 0.5.2-1 | | -| cooler | 0.9.2 | | -| cram_filter_align_bwamem2_fixmate_sort | - | | -| ^ ( samtools + bwamem2 ) ^ | 1.17 + 2.2.1 | | -| coreutils | 9.1 | | -| fastk | 1.0.1 | | -| gcc | 10.4.0 | | -| find_telomere_windows ( java-jdk ) | 8.0.112 | | -| generate_cram_csv ( samtools ) | 1.17 | | -| gnu-sort | 8.25 | 9.3 | -| juicer_tools_pre ( java-jdk ) | 8.0.112 | | -| perl | 5.26.2 | | -| merquryfk | 1.0.1 | | -| minimap2 + samtools | 2.24 + 1.14 | | -| minimap2_index | 2.24 | 2.28 | -| miniprot | 0.11--he4a0461_2 | | -| mummer | 3.23 | | -| paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | -| pretextmap + samtools | 0.0.2 + 1.17 | 0.0.3 + 1.17 | -| python | 3.9 | - | -| - pandas | 1.5.2 | - | -| samtools | 1.18 | 1.21 | -| selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | -| seqtk | 1.4 | | -| tabix | 1.11 | | -| ucsc | 377 | 447 | -| windowmasker (blast) | 2.14.0 | 2.15.0 | +| Module | Old Version | New Versions | +| -------------------------------------- | ---------------- | ----------------- | +| bamtobed_sort ( bedtools + samtools ) | 2.31.0 + 1.17 | | +| bedtools | 2.31.1 | - | +| busco\* | 5.5.0 | - | +| bwa-mem2 | 2.2.1 | | +| cat | 2.3.4 | | +| chunk_fasta ( pyfasta ) | 0.5.2-1 | REMOVED | +| cooler | 0.9.2 | | +| cram_filter_align_bwamem2_fixmate_sort | - | | +| ^ ( samtools + bwamem2 ) ^ | 1.17 + 2.2.1 | | +| coreutils | 9.1 | | +| fastk | 1.0.1 | | +| gcc | 10.4.0 | | +| find_telomere_windows ( java-jdk ) | 8.0.112 | | +| generate_cram_csv ( samtools ) | 1.17 | | +| gnu-sort | 8.25 | 9.3 | +| juicer_tools_pre ( java-jdk ) | 8.0.112 | | +| perl | 5.26.2 | | +| merquryfk | 1.0.1 | | +| minimap2 + samtools | 2.24 + 1.14 | | +| minimap2_index | 2.24 | 2.28 | +| miniprot | 0.11--he4a0461_2 | | +| mummer | 3.23 | | +| paftools ( minimap2 + samtools ) | 2.24 + 1.14 | | +| pretextmap + samtools | 0.0.2 + 1.17 | 0.0.3 + 1.17 | +| python | 3.9 | - | +| - pandas | 1.5.2 | - | +| samtools | 1.18 | 1.21 | +| selfcomp_splitfasta ( perl-bioperl ) | 1.7.8-1 | | +| seqtk | 1.4 | | +| seqkit | ADDED | 2.9.0--h9ee0642_0 | +| tabix | 1.11 | | +| ucsc | 377 | 447 | +| windowmasker (blast) | 2.14.0 | 2.15.0 | - busco is currently pinned to v5.5.0 - Upgrading v5.7.1 would cause github actions to crash. Further investigation needed. diff --git a/modules/local/chunkfasta.nf b/modules/local/chunkfasta.nf deleted file mode 100755 index 0400df24..00000000 --- a/modules/local/chunkfasta.nf +++ /dev/null @@ -1,48 +0,0 @@ -process CHUNKFASTA { - tag "${meta.id}" - label 'process_low' - - conda "conda-forge::pyfasta=0.5.2-1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/pyfasta:0.5.2--py_1' : - 'biocontainers/pyfasta:0.5.2--py_1' }" - - input: - tuple val(meta), path('input.fasta') - val(number_of_chunks) - - output: - tuple val(meta), path('*.fasta'), emit: fasta - path "versions.yml" , emit: versions - - script: - def VERSION = '0.5.2' // Tool does not report version - // This should be abstracted outside of the container to - // stop it spinning up in the first place, - // however dsl2 can't do comparisons with channels which makes it harder - """ - if [ $number_of_chunks -le 1 ]; then - mv input.fasta ${meta.id}_whole.fasta - else - pyfasta split -n $number_of_chunks input.fasta - fi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - pyfasta: $VERSION - END_VERSIONS - """ - - stub: - def VERSION = '0.5.2' // Tool does not report version - """ - touch ${meta.id}.fa - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - pyfasta: $VERSION - END_VERSIONS - """ -} diff --git a/subworkflows/local/selfcomp.nf b/subworkflows/local/selfcomp.nf index 9d1e0e95..8e702635 100755 --- a/subworkflows/local/selfcomp.nf +++ b/subworkflows/local/selfcomp.nf @@ -12,7 +12,7 @@ include { BEDTOOLS_SORT } from '../../modules/nf-core/bedtools/ include { SELFCOMP_SPLITFASTA } from '../../modules/local/selfcomp_splitfasta' include { SELFCOMP_MUMMER2BED } from '../../modules/local/selfcomp_mummer2bed' include { SELFCOMP_MAPIDS } from '../../modules/local/selfcomp_mapids' -include { CHUNKFASTA } from '../../modules/local/chunkfasta' +include { SEQKIT_SPLIT } from '../../modules/local/seqkit/split/main' include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' include { SELFCOMP_ALIGNMENTBLOCKS } from '../../modules/local/selfcomp_alignmentblocks' include { CONCATBLOCKS } from '../../modules/local/concatblocks' @@ -57,28 +57,28 @@ workflow SELFCOMP { // MODULE: SPLIT REFERENCE FILE INTO 1GB CHUNKS // THIS IS THE QUERY, AND REFERENCE IF GENOME.size() > 1GB // - CHUNKFASTA( + SEQKIT_SPLIT( SELFCOMP_SPLITFASTA.out.fa, chunk_number ) - ch_versions = ch_versions.mix(CHUNKFASTA.out.versions) + ch_versions = ch_versions.mix(SEQKIT_SPLIT.out.versions) // // LOGIC: STRIP META FROM QUERY, AND COMBINE WITH REFERENCE FILE // THIS LEAVES US WITH n=( REFERENCE + QUERY) IF GENOME.SIZE() < 1GB // OR n=((REFERENCE / 1E9) * (REFENCE / 1E9)) IF GENOME.SIZE() > 1GB // - CHUNKFASTA.out.fasta + SEQKIT_SPLIT.out.fasta .map{meta, query -> query } - .collect() // Collect any output from CHUNKFASTA + .collect() // Collect any output from SEQKIT_SPLIT .map {it -> tuple( [ len: it.size() ], // Calc length of list it ) } - .set {len_ch} // tap out to preserve length of CHUNKFASTA list + .set {len_ch} // tap out to preserve length of SEQKIT_SPLIT list len_ch // tap swapped with set as tap stops pipeline completion .map {meta, files -> @@ -216,4 +216,3 @@ workflow SELFCOMP { ch_bigbed = UCSC_BEDTOBIGBED.out.bigbed versions = ch_versions.ifEmpty(null) } - From b268f62ce96365b3b811a610fcb0c12579e44615 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 26 Nov 2024 12:39:07 +0000 Subject: [PATCH 32/65] Random Space --- modules/local/seqkit/split/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/seqkit/split/main.nf b/modules/local/seqkit/split/main.nf index fa0dfdbf..e23dc29c 100755 --- a/modules/local/seqkit/split/main.nf +++ b/modules/local/seqkit/split/main.nf @@ -26,7 +26,7 @@ process SEQKIT_SPLIT { fi cat <<-END_VERSIONS > versions.yml - "${task.proce ss}": + "${task.process}": seqkit: \$(seqkit version | sed -e "s/seqkit v//g") END_VERSIONS """ From 8cf822c3417986bcb55cc2eb917bdbb2d29ad079 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 26 Nov 2024 12:58:01 +0000 Subject: [PATCH 33/65] Re-add the assignment --- modules/local/seqkit/split/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/seqkit/split/main.nf b/modules/local/seqkit/split/main.nf index e23dc29c..d9266738 100755 --- a/modules/local/seqkit/split/main.nf +++ b/modules/local/seqkit/split/main.nf @@ -7,7 +7,7 @@ process SEQKIT_SPLIT { 'biocontainers/seqkit:2.9.0--h9ee0642_0' }" input: - tuple val(meta), path(fasta) + tuple val(meta), path('input.fasta') val(number_of_chunks) output: @@ -22,7 +22,7 @@ process SEQKIT_SPLIT { if [ $number_of_chunks -le 1 ]; then mv input.fasta ${meta.id}_whole.fa else - seqkit split ${fasta} -p $number_of_chunks -O ./ + seqkit split input.fasta -p $number_of_chunks -O ./ fi cat <<-END_VERSIONS > versions.yml From 370c8dcb70bd6e4cd442668bc37b4251e508301b Mon Sep 17 00:00:00 2001 From: William Eagles Date: Tue, 26 Nov 2024 16:31:05 +0000 Subject: [PATCH 34/65] Modify geneset/synteny .yaml to parse lists of absolute paths. --- .../github_testing/TreeValTinyFullTest.yaml | 10 ++++------ assets/local_testing/nxOscDF5033-BGA.yaml | 8 ++++---- assets/local_testing/nxOscDF5033.yaml | 14 +++++++------ assets/local_testing/nxOscSUBSET.yaml | 7 ++----- subworkflows/local/gene_alignment.nf | 8 ++------ subworkflows/local/synteny.nf | 20 ++++++++++++------- subworkflows/local/yaml_input.nf | 15 +++++++------- workflows/treeval.nf | 6 ++---- workflows/treeval_rapid.nf | 2 ++ workflows/treeval_rapid_tol.nf | 2 ++ 10 files changed, 46 insertions(+), 46 deletions(-) diff --git a/assets/github_testing/TreeValTinyFullTest.yaml b/assets/github_testing/TreeValTinyFullTest.yaml index c7ade25e..14223379 100755 --- a/assets/github_testing/TreeValTinyFullTest.yaml +++ b/assets/github_testing/TreeValTinyFullTest.yaml @@ -19,10 +19,8 @@ kmer_profile: kmer_length: 31 dir: /home/runner/work/treeval/treeval/TreeValTinyData/ alignment: - data_dir: /home/runner/work/treeval/treeval/TreeValTinyData/gene_alignment_data/ - common_name: "" # For future implementation (adding bee, wasp, ant etc) - geneset_id: "LaetiporusSulphureus.gfLaeSulp1" - #Path should end up looking like "{data_dir}{classT}/{common_name}/csv_data/{geneset}-data.csv" + genesets: + - /home/runner/work/treeval/treeval/TreeValTinyData/gene_alignment_data/nematode/csv_data/LaetiporusSulphureus.gfLaeSulp1-data.csv self_comp: motif_len: 0 mummer_chunk: 10 @@ -31,8 +29,8 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_path: /home/runner/work/treeval/treeval/treeval/TreeValTinyData/synteny - synteny_genomes: "LaetiporusSulphureus" + synteny_genomes: + - /home/runner/work/treeval/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /home/runner/work/treeval/treeval/TreeValTinyData/busco/subset/ lineage: fungi_odb10 diff --git a/assets/local_testing/nxOscDF5033-BGA.yaml b/assets/local_testing/nxOscDF5033-BGA.yaml index 3338674d..73de9088 100755 --- a/assets/local_testing/nxOscDF5033-BGA.yaml +++ b/assets/local_testing/nxOscDF5033-BGA.yaml @@ -11,8 +11,8 @@ assem_reads: hic: /workspace/treeval-curation/Oscheius_DF5033/hic-arima2/ supplementary: path # Not currently in use alignment: - data_dir: /workspace/treeval-curation/gene_alignment_data/ - geneset: "OscheiusTipulae.ASM1342590v1,CaenorhabditisElegans.WBcel235,Gae_host.Gae" + genesets: + - /lustre/scratch123/tol/resources/treeval/gene_alignment_data/nematode/csv_data/OscheiusTipulae.ASM1342590v1-data.csv self_comp: motif_len: 0 mummer_chunk: 10 @@ -21,8 +21,8 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_path: /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/ - synteny_genomes: "LaetiporusSulphureus" + synteny_genomes: + - /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /workspace/treeval-curation/busco/v5 lineage: nematoda_odb10 diff --git a/assets/local_testing/nxOscDF5033.yaml b/assets/local_testing/nxOscDF5033.yaml index 92e0a899..4433c0c1 100755 --- a/assets/local_testing/nxOscDF5033.yaml +++ b/assets/local_testing/nxOscDF5033.yaml @@ -19,10 +19,10 @@ kmer_profile: kmer_length: 31 dir: /lustre/scratch123/tol/resources/treeval/treeval-testdata/TreeValSmallData/Oscheius_DF5033/genomic_data/nxOscSpes1/pacbio/ alignment: - data_dir: /lustre/scratch123/tol/resources/treeval/gene_alignment_data/ - common_name: "" # For future implementation (adding bee, wasp, ant etc) - geneset_id: "OscheiusTipulae.ASM1342590v1,CaenorhabditisElegans.WBcel235,Gae_host.Gae" - #Path should end up looking like "{data_dir}{classT}/{common_name}/csv_data/{geneset}-data.csv" + genesets: + - /lustre/scratch123/tol/resources/treeval/gene_alignment_data/nematode/csv_data/OscheiusTipulae.ASM1342590v1-data.csv + - /lustre/scratch123/tol/resources/treeval/gene_alignment_data/nematode/csv_data/CaenorhabditisElegans.WBcel235-data.csv + - /lustre/scratch123/tol/resources/treeval/gene_alignment_data/nematode/csv_data/Gae_host.Gae-data.csv self_comp: motif_len: 0 mummer_chunk: 10 @@ -31,8 +31,10 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_path: /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/ - synteny_genomes: "" + synteny_genomes: + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bCucCan1.fasta + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bGalGal1.fasta + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bTaeGut2.fasta busco: lineages_path: /lustre/scratch123/tol/resources/busco/v5 lineage: nematoda_odb10 diff --git a/assets/local_testing/nxOscSUBSET.yaml b/assets/local_testing/nxOscSUBSET.yaml index 604f09dc..06c36037 100755 --- a/assets/local_testing/nxOscSUBSET.yaml +++ b/assets/local_testing/nxOscSUBSET.yaml @@ -19,10 +19,8 @@ kmer_profile: kmer_length: 31 dir: /lustre/scratch123/tol/resources/treeval/treeval-testdata/TreeValSmallData/Oscheius_DF5033/genomic_data/nxOscSpes1/pacbio/ alignment: - data_dir: /lustre/scratch123/tol/resources/treeval/gene_alignment_data/ - common_name: "" # For future implementation (adding bee, wasp, ant etc) - geneset_id: "Gae_host.Gae" - #Path should end up looking like "{data_dir}{classT}/{common_name}/csv_data/{geneset}-data.csv" + genesets: + - /lustre/scratch123/tol/resources/treeval/gene_alignment_data/nematode/csv_data/OscheiusTipulae.ASM1342590v1-data.csv self_comp: motif_len: 0 mummer_chunk: 10 @@ -31,7 +29,6 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_path: /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/ synteny_genomes: "" busco: lineages_path: /lustre/scratch123/tol/resources/busco/v5 diff --git a/subworkflows/local/gene_alignment.nf b/subworkflows/local/gene_alignment.nf index 243c2f43..d3c30e54 100755 --- a/subworkflows/local/gene_alignment.nf +++ b/subworkflows/local/gene_alignment.nf @@ -18,9 +18,7 @@ workflow GENE_ALIGNMENT { dot_genome // Channel: [ val(meta), path(file) ] reference_tuple // Channel: [ val(meta), path(file) ] reference_index // Channel: [ val(meta), path(file) ] - alignment_datadir // Channel: val(geneset_dir) alignment_genesets // Channel: val(geneset_id) - alignment_common // Channel: val(common_name) // Not yet in use intron_size // Channel: val(50k) as_files // Channel: [ val(meta), path(file) ] @@ -50,11 +48,9 @@ workflow GENE_ALIGNMENT { // SUBWORKFLOW // ch_data - .combine(alignment_datadir) - .combine(assembly_class) .map { - ch_org, data_dir, classT -> - file("${data_dir}${classT}/csv_data/${ch_org}-data.csv") + geneset_path -> + file(geneset_path) } .splitCsv(header: true, sep:',') .map(row -> diff --git a/subworkflows/local/synteny.nf b/subworkflows/local/synteny.nf index 04b43cf4..b8caa4a3 100755 --- a/subworkflows/local/synteny.nf +++ b/subworkflows/local/synteny.nf @@ -8,24 +8,30 @@ include { MINIMAP2_ALIGN } from '../../modules/nf-core/minimap2/align/mai workflow SYNTENY { take: reference_tuple // Channel: tuple [ val(meta), path(file) ] - synteny_path // Channel: val(meta) + synteny_paths // Channel: val(meta) main: ch_versions = Channel.empty() + ch_data = synteny_paths + .splitCsv() + .flatten() + // // LOGIC: PULL SYNTENIC GENOMES FROM DIRECTORY STRUCTURE // AND PARSE INTO CHANNEL PER GENOME // - reference_tuple - .combine(synteny_path) - .map{meta, reference, dir_path -> - file("${dir_path}${meta.class}/*.fasta") + ch_data + .map{synteny_path -> + file(synteny_path) } - .flatten() .combine(reference_tuple) .multiMap{syntenic_ref, meta, ref -> - syntenic_tuple : tuple(meta, syntenic_ref) + syntenic_tuple : tuple([ id: syntenic_ref.toString().split('/')[-1].split('.fasta')[0], + class: meta.class, + project_type: meta.project_type + ], + syntenic_ref) reference_fa : ref bool_bam_output : false bool_cigar_paf : true diff --git a/subworkflows/local/yaml_input.nf b/subworkflows/local/yaml_input.nf index a734a728..b8fc454e 100755 --- a/subworkflows/local/yaml_input.nf +++ b/subworkflows/local/yaml_input.nf @@ -83,9 +83,7 @@ workflow YAML_INPUT { .alignment .combine(workflow_id) .multiMap{ data, id -> - data_dir: (id == "FULL" || id == "JBROWSE" ? data.data_dir : "") - common_name: (id == "FULL" || id == "JBROWSE" ? data.common_name : "") - geneset_id: (id == "FULL" || id == "JBROWSE" ? data.geneset_id : "") + genesets: (id == "FULL" || id == "JBROWSE" ? data.genesets : "") } .set{alignment_data} @@ -102,7 +100,7 @@ workflow YAML_INPUT { .synteny .combine(workflow_id) .multiMap{ data, id -> - synteny_genome: (id == "FULL" || id == "JBROWSE" ? data.synteny_genome_path: "") + synteny_genomes: (id == "FULL" || id == "JBROWSE" ? data.synteny_genomes: "") } .set{synteny_data} @@ -226,14 +224,15 @@ workflow YAML_INPUT { hic_reads_ch = hic_ch supp_reads_ch = supplement_ch - align_data_dir = alignment_data.data_dir - align_geneset = alignment_data.geneset_id - align_common = alignment_data.common_name + // align_data_dir = alignment_data.data_dir + // align_geneset = alignment_data.geneset_id + // align_common = alignment_data.common_name + align_genesets = alignment_data.genesets motif_len = selfcomp_data.motif_len mummer_chunk = selfcomp_data.mummer_chunk - synteny_path = synteny_data.synteny_genome + synteny_paths = synteny_data.synteny_genomes intron_size = intron_size.size diff --git a/workflows/treeval.nf b/workflows/treeval.nf index 8dc903bc..fe060ad3 100755 --- a/workflows/treeval.nf +++ b/workflows/treeval.nf @@ -150,9 +150,7 @@ workflow TREEVAL { GENERATE_GENOME.out.dot_genome, YAML_INPUT.out.reference_ch, GENERATE_GENOME.out.ref_index, - YAML_INPUT.out.align_data_dir, - YAML_INPUT.out.align_geneset, - YAML_INPUT.out.align_common, + YAML_INPUT.out.align_genesets, YAML_INPUT.out.intron_size, gene_alignment_asfiles ) @@ -202,7 +200,7 @@ workflow TREEVAL { if ( !exclude_workflow_steps.contains("synteny")) { SYNTENY ( YAML_INPUT.out.reference_ch, - YAML_INPUT.out.synteny_path + YAML_INPUT.out.synteny_paths ) ch_versions = ch_versions.mix( SYNTENY.out.versions ) } diff --git a/workflows/treeval_rapid.nf b/workflows/treeval_rapid.nf index 0771a72d..bb736f26 100755 --- a/workflows/treeval_rapid.nf +++ b/workflows/treeval_rapid.nf @@ -121,6 +121,7 @@ workflow TREEVAL_RAPID { GENERATE_GENOME.out.dot_genome, YAML_INPUT.out.read_ch ) + coverage_report = READ_COVERAGE.out.ch_reporting ch_versions = ch_versions.mix( READ_COVERAGE.out.versions ) } else { coverage_report = [] @@ -142,6 +143,7 @@ workflow TREEVAL_RAPID { REPEAT_DENSITY.out.repeat_density, params.entry ) + hic_report = HIC_MAPPING.out.ch_reporting ch_versions = ch_versions.mix( HIC_MAPPING.out.versions ) } else { hic_report = [] diff --git a/workflows/treeval_rapid_tol.nf b/workflows/treeval_rapid_tol.nf index 4929fd16..8e10fcc6 100755 --- a/workflows/treeval_rapid_tol.nf +++ b/workflows/treeval_rapid_tol.nf @@ -120,6 +120,7 @@ workflow TREEVAL_RAPID_TOL { GENERATE_GENOME.out.dot_genome, YAML_INPUT.out.read_ch ) + coverage_report = READ_COVERAGE.out.ch_reporting ch_versions = ch_versions.mix( READ_COVERAGE.out.versions ) } else { coverage_report = [] @@ -153,6 +154,7 @@ workflow TREEVAL_RAPID_TOL { REPEAT_DENSITY.out.repeat_density, params.entry ) + hic_report = HIC_MAPPING.out.ch_reporting ch_versions = ch_versions.mix( HIC_MAPPING.out.versions ) } else { hic_report = [] From a9fa618ecaac735f0df34d8a530fe3ace45627a8 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Wed, 27 Nov 2024 11:12:58 +0000 Subject: [PATCH 35/65] Update usage documentation for synteny and gene alignment --- docs/usage.md | 145 ++++++-------------------------------------------- 1 file changed, 16 insertions(+), 129 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 50d3db59..1634cba6 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -8,7 +8,7 @@ The TreeVal pipeline has a few requirements before being able to run: -- The `gene_alignment_data` (this refers to the alignment.data_dir and alignment.geneset data noted in the yaml, which we will explain later) and `synteny_data` follow a particular directory structure. +- The `gene_alignment_data` requires a specific .csv format. - HiC CRAM files must be pre-indexed in the same location as the CRAM file, e.g., `samtools index {cram file}`. A check and automated indexing of the cram file will be added in the future. @@ -16,7 +16,7 @@ The TreeVal pipeline has a few requirements before being able to run: ## Prior to running TreeVal -:warning: Please ensure you read the following sections on Directory Structure (`gene_alignment_data`, `synteny`, scripts), HiC data prep and Pacbio data prep. Without these you may not be able to successfully run the TreeVal pipeline. If nothing is clear then please leave an issue report. +:warning: Please ensure you read the following sections on Directory Structure (`gene_alignment_data` and scripts), HiC data prep and Pacbio data prep. Without these you may not be able to successfully run the TreeVal pipeline. If nothing is clear then please leave an issue report. We now also support ( and encourage ) using the nf-co2footprint plugin (on Nextflow versions >= 23.07) which generates statistics on how much energy your pipeline uses as well as the amount of Co2 it helps produce. As it is pre-release, you will need to compile this plugin your self and store it in your `$NXF_HOME/plugins` directory, which you can find with `echo $NXF_HOME`. We have included the relevant config file `co2footprint.config` in this repo. The plugin can be used be including `-plugins nf-co2footprint@{VERSION} -c co2footprint.config` in your nextflow command. Please head to the website to find out more [NF-CO2FOOTPRINT](https://nextflow-io.github.io/nf-co2footprint/contributing/setup/). @@ -44,110 +44,18 @@ You should now be able to run the pipeline as you see fit. -### Directory Structure -
- Details - -The working example found below in the Gene alignment and synteny sections (below), will cover setting up the `synteny` and `gene_alignment_data` directories as well as downloading some example data. - -These two sub-workflows, for now, need the use of the variables `defined_class`, `synteny_genome_path`, `data_dir` and `geneset`. These variables are found inside the yaml ( this is the file that will tell TreeVal what and where everything is ). Currently, we don't use `common_name`, e.g., `bee`, `wasp`, `moth`, etc. However, we hope to make use of it in the future as our `gene_alignment_data` "database" grows and requires a higher degree of organisation. - -First, you should set up a directory in our recommended structure: - -``` -treeval-resources -│ -├─ gene_alignment_data/ -│ ├─ { defined_class } -│ ├─ csv_data -│ │ └─ { Organism.Accession }-data.csv # Generated by our scripts -│ ├─ { Organism } # Here and below is generated by our scripts -│ ├─ { Organism.Accession } -│ ├─ cdna -│ │ └─ { Chunked fasta files } -│ ├─ rna -│ │ └─ { Chunked fasta files } -│ ├─ cds -│ │ └─ { Chunked fasta files } -│ └─ peps -│ └─ { Chunked fasta files } -│ -├─ gene_alignment_prep/ -│ ├─ scripts/ # We supply these in this repo -│ ├─ raw_fasta/ # Storing your fasta downloaded from NCBI or Ensembl -│ └─ treeval-datasets.tsv # Organism, common_name, clade, family, group, link_to_data, notes -│ -├─ synteny/ -│ └─ {defined_class} -│ -├─ treeval_yaml/ # Storage folder for you yaml files, it's useful to keep them -│ -└─ treeval_stats/ # Storage for you treeval output stats file whether for upload to our repo -``` - -The above naming will be further explained - -`defined_class` can be your own system of classification, as long as it is consistent. At Sanger we use the below, we advise you do too. Again, the value that is entered into the yaml (the file we will use to tell TreeVal where everything is), is used to find `gene_alignment_data` as well as syntenic genomes. - -![defined_class](../docs/images/Sanger-classT.png) - -
- -### Synteny - -
- Details - -For synteny you should store the full genomic fasta file, of any high quality genome you want to be compared against, in teh above created directory. - -For bird we recommend the Golden Eagle ( _Aquila chrysaetos_ ) and the Zebrafinch (_Taeniopygia guttata_), which can be downloaded from NCBI. Rename, these files to something more human readable, and drop them into the `synteny/bird/` folder. Any TreeVal run you now perform where the `defined_class` is bird will run a syntenic alignment against all genomes in that folder. It would be best to keep this to around three unless needed. Again, this is something we could expand on with the `common_name` field if requested in the future. - -
- -### Gene Alignment and Synteny Data and Directories +### Gene Alignment and Synteny Data
Details -Seeing as this can be quite a complicated to set up, here's a walk through. -#### Step 1 - Set up the directories - -Lets set up the directory structure as if we want to run it on a bird genome. - -``` -mkdir -p gene_alignment_prep/scripts/ +#### Step 1 -- Preparing Synteny data -cp treeval/bin/treeval-dataprep/* gene_alignment_prep/scripts/ +For synteny you should provide the full genomic fasta file, of any high quality genome you want to be compared against. -mkdir -p gene_alignment_prep/raw_fasta/ - -mkdir -p gene_alignment_data/bird/csv_data/ - -mkdir -p synteny/bird/ -``` - -The naming of the bird folder here is important, keep this in mind. - -So now we have this structure: - -``` -~/treeval-resources - │ - ├─ synteny/ - │ └─ bird/ - │ - ├─ gene_alignment_data/ - │ └─ bird/ - │ └─ csv_data/ - │ - └─ gene_alignment_prep/ - ├─ scripts/ - └─ raw_fasta/ -``` - -#### Step 2 - Download some data +For bird we recommend the Golden Eagle ( _Aquila chrysaetos_ ) and the Zebrafinch (_Taeniopygia guttata_), which can be downloaded from NCBI. Now, let's download our syntenic alignment data. I think the Zebrafinch (_Taeniopygia guttata_) would be good against the Chicken (_Gallus gallus_). @@ -163,6 +71,8 @@ This leaves us with a file called `bTaeGut1_4.fasta` the genomic assembly of `bT Now lets move into the `raw_data` folder and download some data, this may take some time. +#### Step 1 -- Preparing Gene alignment data + ``` cd ../../gene_alignment_prep/raw_data/ @@ -276,40 +186,19 @@ This is all useful for the pipeline which generates job ids based on the org col #### Step 4 -- Understand where we are at -So we have now generated the directory structure for `gene_alignment_data`. So now let's use what we know to fill out the yaml. +Now let's use what we know to fill out the yaml. The yaml is a file that we need in order to tell the pipeline where everything is, an example can be found [here](https://raw.githubusercontent.com/sanger-tol/treeval/dev/assets/local_testing/nxOscDF5033.yaml). -Here we can see a number of fields that need to be filled out, the easiest being `synteny_genome_path` and `data_dir`. These refer to the directories we made earlier so we can replace them as such: - -```yaml -alignment: - data_dir: /FULL/PATH/TO/treeval-resources/gene_alignment_data/ - -synteny_genome_path: /FULL/PATH/TO/treeval-resources/synteny -``` - -I said earlier that the the fact we called a folder `bird` was important, this is because it now becomes our `defined_class`: - -```yaml -defined_class: bird -``` - -During pipeline execution, this is appended onto the end of `data_dir` and `synteny_genome_path` in order to find the correct files to use. So now all of the files inside `/FULL/PATH/TO/treeval-resources/synteny/bird/ ` will be used for syntenic alignments. Likewise with our `alignment.data_dir`, TreeVal will turn this into `/FULL/PATH/TO/treeval-resources/gene_alignment_data/bird/` and then appends `csv_data/`. - -In Step 3, we generated some files which will be living in our `/FULL/PATH/TO/treeval-resources/gene_alignment_data/bird/csv_data/` folder and look like `GallusGallus.GRCg7b-data.csv`. These (minus the `-data.csv`) will be what we enter into the `geneset` field in the yaml. The `common_name` is a field we don't currently use. - ```yaml alignment: - data_dir: /FULL/PATH/TO/treeval-resources/gene_alignment_data/ - common_name: "" # For future implementation (adding bee, wasp, ant etc) - geneset: "GallusGallus.GRCg7b" + genesets: + - /FULL/PATH/TO/-data.csv +synteny: + synteny_genomes: + - /FULL/PATH/TO/.fasta ``` -However, what is cool about this field (geneset) is that you can add as many as you want. So say you have the `alignment.data_dir` for the Finch saved as `TaeniopygiaGuttata.bTaeGut1_4`. The geneset field becomes: `geneset: "GallusGallus.GRCg7b,TaeniopygiaGuttata.bTaeGut1_4"` - -Hopefully this explains things a bit better and you understand how this sticks together! -
### HiC data Preparation @@ -445,9 +334,7 @@ The following is an example YAML file we have used during production: [nxOscDF50 - `hic_cram`: path (ending with `/`) to folder containing cram files. - `hic_aligner`: choice between `bwamam2` and `minimap2` - `alignment` - - `data_dir`: Gene alignment data path (ending with `/`). - - `common_name`: For future implementation (adding bee, wasp, ant etc) - - `geneset_id`: a csv list of geneset data to be used + - `genesets`: List of Gene alignment data .csv file paths. - `kmer_profile`: - `kmer_length`: length of kmer to be used in plotting - `dir`: directory containing old plot to be regenerated if applicable @@ -455,7 +342,7 @@ The following is an example YAML file we have used during production: [nxOscDF50 - `motif_len`: Length of motif to be used in self complementary sequence finding - `mummer_chunk`: Size of chunks used by MUMMER module. - `synteny` - - `synteny_genome_path`: Path to syntenic genomes grouped by clade. + - `synteny_genomes`: List of paths to syntenic genomes grouped by clade. - `outdir`: Will be required in future development. - `intron:` - `size`: base pair size of introns default is 50k From 7f6693fb7921b535f0c6d8d728542c1ad7894baa Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 27 Nov 2024 12:20:01 +0000 Subject: [PATCH 36/65] Nematode to fungi --- assets/github_testing/TreeValTinyFullTest.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/github_testing/TreeValTinyFullTest.yaml b/assets/github_testing/TreeValTinyFullTest.yaml index 14223379..ba956609 100755 --- a/assets/github_testing/TreeValTinyFullTest.yaml +++ b/assets/github_testing/TreeValTinyFullTest.yaml @@ -20,7 +20,7 @@ kmer_profile: dir: /home/runner/work/treeval/treeval/TreeValTinyData/ alignment: genesets: - - /home/runner/work/treeval/treeval/TreeValTinyData/gene_alignment_data/nematode/csv_data/LaetiporusSulphureus.gfLaeSulp1-data.csv + - /home/runner/work/treeval/treeval/TreeValTinyData/gene_alignment_data/fungi/csv_data/LaetiporusSulphureus.gfLaeSulp1-data.csv self_comp: motif_len: 0 mummer_chunk: 10 @@ -29,7 +29,7 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: + synteny_genomes: - /home/runner/work/treeval/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /home/runner/work/treeval/treeval/TreeValTinyData/busco/subset/ From 46652852420ec0be2d64071494f4767aa730590d Mon Sep 17 00:00:00 2001 From: William Eagles Date: Thu, 28 Nov 2024 09:20:25 +0000 Subject: [PATCH 37/65] Remove -M parameter from FastK to resolve segfault issue. --- modules/nf-core/fastk/fastk/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nf-core/fastk/fastk/main.nf b/modules/nf-core/fastk/fastk/main.nf index 67c2dc7a..fe0effd0 100755 --- a/modules/nf-core/fastk/fastk/main.nf +++ b/modules/nf-core/fastk/fastk/main.nf @@ -29,7 +29,6 @@ process FASTK_FASTK { FastK \\ $args \\ -T$task.cpus \\ - -M${task.memory.toGiga()} \\ -N${prefix}_fk \\ $reads From 8043217280a418c203d92278cd49a26b8814b818 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Thu, 28 Nov 2024 09:40:25 +0000 Subject: [PATCH 38/65] Prettier --- assets/local_testing/nxOscDF5033-BGA.yaml | 2 +- docs/usage.md | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/assets/local_testing/nxOscDF5033-BGA.yaml b/assets/local_testing/nxOscDF5033-BGA.yaml index 73de9088..26b5d87d 100755 --- a/assets/local_testing/nxOscDF5033-BGA.yaml +++ b/assets/local_testing/nxOscDF5033-BGA.yaml @@ -21,7 +21,7 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: + synteny_genomes: - /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /workspace/treeval-curation/busco/v5 diff --git a/docs/usage.md b/docs/usage.md index 1634cba6..342c0b9e 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -44,18 +44,16 @@ You should now be able to run the pipeline as you see fit. - ### Gene Alignment and Synteny Data
Details - #### Step 1 -- Preparing Synteny data For synteny you should provide the full genomic fasta file, of any high quality genome you want to be compared against. -For bird we recommend the Golden Eagle ( _Aquila chrysaetos_ ) and the Zebrafinch (_Taeniopygia guttata_), which can be downloaded from NCBI. +For bird we recommend the Golden Eagle ( _Aquila chrysaetos_ ) and the Zebrafinch (_Taeniopygia guttata_), which can be downloaded from NCBI. Now, let's download our syntenic alignment data. I think the Zebrafinch (_Taeniopygia guttata_) would be good against the Chicken (_Gallus gallus_). @@ -192,10 +190,10 @@ The yaml is a file that we need in order to tell the pipeline where everything i ```yaml alignment: - genesets: + genesets: - /FULL/PATH/TO/-data.csv synteny: - synteny_genomes: + synteny_genomes: - /FULL/PATH/TO/.fasta ``` From 439b9ecc9ad9334108015b60c697841425ad3b01 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Thu, 28 Nov 2024 11:41:07 +0000 Subject: [PATCH 39/65] Generate module path for fastk --- modules.json | 151 ++++++++++++++----- modules/nf-core/fastk/fastk/fastk-fastk.diff | 11 +- 2 files changed, 121 insertions(+), 41 deletions(-) diff --git a/modules.json b/modules.json index adc156f3..4d6de45a 100755 --- a/modules.json +++ b/modules.json @@ -8,193 +8,268 @@ "bedtools/bamtobed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/intersect": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/makewindows": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bedtools/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "busco/busco": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/busco/busco/busco-busco.diff" }, "bwamem2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/getchromsizes": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/fastk/fastk/fastk-fastk.diff" }, "gnu/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "miniprot/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "miniprot/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "pretextmap": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "seqtk/cutn": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/bedgraphtobigwig": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/bedtobigbed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "windowmasker/mkcounts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "windowmasker/ustat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -203,4 +278,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastk/fastk/fastk-fastk.diff b/modules/nf-core/fastk/fastk/fastk-fastk.diff index 56003656..c74973c8 100644 --- a/modules/nf-core/fastk/fastk/fastk-fastk.diff +++ b/modules/nf-core/fastk/fastk/fastk-fastk.diff @@ -1,6 +1,4 @@ Changes in module 'nf-core/fastk/fastk' -'modules/nf-core/fastk/fastk/meta.yml' is unchanged -Changes in 'fastk/fastk/main.nf': --- modules/nf-core/fastk/fastk/main.nf +++ modules/nf-core/fastk/fastk/main.nf @@ -3,7 +3,7 @@ @@ -12,6 +10,13 @@ Changes in 'fastk/fastk/main.nf': input: tuple val(meta), path(reads) +@@ -29,7 +29,6 @@ + FastK \\ + $args \\ + -T$task.cpus \\ +- -M${task.memory.toGiga()} \\ + -N${prefix}_fk \\ + $reads + -'modules/nf-core/fastk/fastk/environment.yml' is unchanged ************************************************************ From e81d671f7943eda05cf5f0d21881349e81a4e278 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Thu, 28 Nov 2024 11:53:04 +0000 Subject: [PATCH 40/65] Prettier --- modules.json | 150 +++++++++++++-------------------------------------- 1 file changed, 38 insertions(+), 112 deletions(-) diff --git a/modules.json b/modules.json index 4d6de45a..4e3d7bc3 100755 --- a/modules.json +++ b/modules.json @@ -8,268 +8,194 @@ "bedtools/bamtobed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/genomecov": { "branch": "master", "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/intersect": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/makewindows": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/map": { "branch": "master", "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/merge": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bedtools/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "busco/busco": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/busco/busco/busco-busco.diff" }, "bwamem2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/cload": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/getchromsizes": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/custom/getchromsizes/custom-getchromsizes.diff" }, "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/fastk/fastk/fastk-fastk.diff" }, "gnu/sort": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "merquryfk/merquryfk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "minimap2/align": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "miniprot/index": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mummer": { "branch": "master", "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "pretextmap": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextmap/pretextmap.diff" }, "pretextsnapshot": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/pretextsnapshot/pretextsnapshot.diff" }, "samtools/faidx": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/markdup": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "669eb24fd82a9d3cb18ad0e73673ecb26827f683", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "seqtk/cutn": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedgraphtobigwig": { "branch": "master", "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/bedtobigbed": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/mkcounts": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "windowmasker/ustat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -278,4 +204,4 @@ } } } -} \ No newline at end of file +} From 441c3e718778cbee73880355ecfab927fd06f3a1 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 28 Nov 2024 16:55:16 +0000 Subject: [PATCH 41/65] Updates --- modules/nf-core/merquryfk/merquryfk/main.nf | 56 ++- .../merquryfk/merquryfk-merquryfk.diff | 12 +- modules/nf-core/merquryfk/merquryfk/meta.yml | 287 +++++++---- .../merquryfk/merquryfk/tests/main.nf.test | 170 +++++++ .../merquryfk/tests/main.nf.test.snap | 454 ++++++++++++++++++ .../merquryfk/merquryfk/tests/nextflow.config | 8 + .../merquryfk/tests/nextflow.pdf.config | 9 + .../merquryfk/tests/nextflow.png.config | 9 + .../merquryfk/tests/nextflow.trio.config | 9 + .../merquryfk/merquryfk/tests/tags.yml | 2 + 10 files changed, 902 insertions(+), 114 deletions(-) mode change 100755 => 100644 modules/nf-core/merquryfk/merquryfk/main.nf create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/main.nf.test create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/nextflow.config create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config create mode 100644 modules/nf-core/merquryfk/merquryfk/tests/tags.yml diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf old mode 100755 new mode 100644 index 221a1aa2..2fa68386 --- a/modules/nf-core/merquryfk/merquryfk/main.nf +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -6,26 +6,26 @@ process MERQURYFK_MERQURYFK { container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: - tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly), path(haplotigs) + tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) output: - tuple val(meta), path("${prefix}.completeness.stats") , emit: stats - tuple val(meta), path("${prefix}.*_only.bed") , emit: bed - tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv - tuple val(meta), path("${prefix}.*.spectra-cn.fl.png"), emit: spectra_cn_fl_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.fl.pdf"), emit: spectra_cn_fl_pdf, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.ln.png"), emit: spectra_cn_ln_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.ln.pdf"), emit: spectra_cn_ln_pdf, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.st.png"), emit: spectra_cn_st_png, optional: true - tuple val(meta), path("${prefix}.*.spectra-cn.st.pdf"), emit: spectra_cn_st_pdf, optional: true - tuple val(meta), path("${prefix}.qv") , emit: qv - tuple val(meta), path("${prefix}.spectra-asm.fl.png") , emit: spectra_asm_fl_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.fl.pdf") , emit: spectra_asm_fl_pdf, optional: true - tuple val(meta), path("${prefix}.spectra-asm.ln.png") , emit: spectra_asm_ln_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.ln.pdf") , emit: spectra_asm_ln_pdf, optional: true - tuple val(meta), path("${prefix}.spectra-asm.st.png") , emit: spectra_asm_st_png, optional: true - tuple val(meta), path("${prefix}.spectra-asm.st.pdf") , emit: spectra_asm_st_pdf, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}.completeness.stats") , emit: stats + tuple val(meta), path("${prefix}.*_only.bed") , emit: bed + tuple val(meta), path("${prefix}.*.qv") , emit: assembly_qv + tuple val(meta), path("${prefix}.*.spectra-cn.fl.{png,pdf}") , emit: spectra_cn_fl, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.ln.{png,pdf}") , emit: spectra_cn_ln, optional: true + tuple val(meta), path("${prefix}.*.spectra-cn.st.{png,pdf}") , emit: spectra_cn_st, optional: true + tuple val(meta), path("${prefix}.qv") , emit: qv + tuple val(meta), path("${prefix}.spectra-asm.fl.{png,pdf}") , emit: spectra_asm_fl, optional: true + tuple val(meta), path("${prefix}.spectra-asm.ln.{png,pdf}") , emit: spectra_asm_ln, optional: true + tuple val(meta), path("${prefix}.spectra-asm.st.{png,pdf}") , emit: spectra_asm_st, optional: true + tuple val(meta), path("${prefix}.phased_block.bed") , emit: phased_block_bed, optional: true + tuple val(meta), path("${prefix}.phased_block.stats") , emit: phased_block_stats, optional: true + tuple val(meta), path("${prefix}.continuity.N.{pdf,png}") , emit: continuity_N, optional: true + tuple val(meta), path("${prefix}.block.N.{pdf,png}") , emit: block_N, optional: true + tuple val(meta), path("${prefix}.block.blob.{pdf,png}") , emit: block_blob, optional: true + tuple val(meta), path("${prefix}.hapmers.blob.{pdf,png}") , emit: hapmers_blob, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -37,6 +37,8 @@ process MERQURYFK_MERQURYFK { } def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" + def mat_ktab = matktab ? "${matktab.find{ it.toString().endsWith(".ktab") }}" : '' + def pat_ktab = patktab ? "${patktab.find{ it.toString().endsWith(".ktab") }}" : '' def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ @@ -44,6 +46,8 @@ process MERQURYFK_MERQURYFK { $args \\ -T$task.cpus \\ ${fastk_ktab.find{ it.toString().endsWith(".ktab") }} \\ + ${mat_ktab} \\ + ${pat_ktab} \\ $assembly \\ $haplotigs \\ $prefix @@ -55,4 +59,20 @@ process MERQURYFK_MERQURYFK { r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) END_VERSIONS """ + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def MERQURY_VERSION = '8ae344092df5dcaf83cfb7f90f662597a9b1fc61' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + touch ${prefix}.completeness.stats + touch ${prefix}.qv + touch ${prefix}._.qv + touch ${prefix}._only.bed + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + merquryfk: $MERQURY_VERSION + r: \$( R --version | sed '1!d; s/.*version //; s/ .*//' ) + END_VERSIONS + """ } diff --git a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff index ad1afd83..06934666 100644 --- a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff +++ b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff @@ -1,9 +1,7 @@ Changes in module 'nf-core/merquryfk/merquryfk' -'modules/nf-core/merquryfk/merquryfk/meta.yml' is unchanged -Changes in 'merquryfk/merquryfk/main.nf': --- modules/nf-core/merquryfk/merquryfk/main.nf +++ modules/nf-core/merquryfk/merquryfk/main.nf -@@ -3,7 +3,7 @@ +@@ -3,12 +3,10 @@ label 'process_medium' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. @@ -11,7 +9,11 @@ Changes in 'merquryfk/merquryfk/main.nf': + container 'quay.io/sanger-tol/fastk:1.0.2-c1' input: - tuple val(meta), path(fastk_hist), path(fastk_ktab), path(assembly), path(haplotigs) + tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) +- path matktab //optional +- path patktab //optional + + output: + tuple val(meta), path("${prefix}.completeness.stats") , emit: stats -'modules/nf-core/merquryfk/merquryfk/environment.yml' is unchanged ************************************************************ diff --git a/modules/nf-core/merquryfk/merquryfk/meta.yml b/modules/nf-core/merquryfk/merquryfk/meta.yml index 7d4af796..82bfbec4 100644 --- a/modules/nf-core/merquryfk/merquryfk/meta.yml +++ b/modules/nf-core/merquryfk/merquryfk/meta.yml @@ -9,104 +9,209 @@ tools: description: "FastK based version of Merqury" homepage: "https://github.com/thegenemyers/MERQURY.FK" tool_dev_url: "https://github.com/thegenemyers/MERQURY.FK" - licence: "https://github.com/thegenemyers/MERQURY.FK/blob/main/LICENSE" + licence: ["https://github.com/thegenemyers/MERQURY.FK/blob/main/LICENSE"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fastk_hist: - type: file - description: A histogram files from the program FastK - pattern: "*.hist" - - fastk_ktab: - type: file - description: Histogram ktab files from the program FastK (option -t) - pattern: "*.ktab*" - - assembly: - type: file - description: Genome (primary) assembly files (fasta format) - pattern: ".fasta" - - haplotigs: - type: file - description: Assembly haplotigs (fasta format) - pattern: ".fasta" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastk_hist: + type: file + description: A histogram files from the program FastK + pattern: "*.hist" + - fastk_ktab: + type: file + description: Histogram ktab files from the program FastK (option -t) + pattern: "*.ktab*" + - assembly: + type: file + description: Genome (primary) assembly files (fasta format) + pattern: ".fasta" + - haplotigs: + type: file + description: Assembly haplotigs (fasta format) + pattern: ".fasta" + - - matktab: + type: file + description: trio maternal histogram ktab files from the program FastK (option + -t) + pattern: "*.ktab*" + - - patktab: + type: file + description: trio paternal histogram ktab files from the program FastK (option + -t) + pattern: "*.ktab*" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - stats: - type: file - description: Assembly statistics file - pattern: "*.completeness.stats" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.completeness.stats: + type: file + description: Assembly statistics file + pattern: "*.completeness.stats" - bed: - type: file - description: Assembly only kmer positions not supported by reads in bed format - pattern: "*_only.bed" - - spectra_cn_fl_png: - type: file - description: "Unstacked copy number spectra filled plot in PNG format" - pattern: "*.spectra-cn.fl.png" - - spectra_cn_ln_png: - type: file - description: "Unstacked copy number spectra line plot in PNG format" - pattern: "*.spectra-cn.ln.png" - - spectra_cn_st_png: - type: file - description: "Stacked copy number spectra line plot in PNG format" - pattern: "*.spectra-cn.st.png" - - spectra_asm_fl_png: - type: file - description: "Unstacked assembly spectra filled plot in PNG format" - pattern: "*.spectra-asm.fl.png" - - spectra_asm_ln_png: - type: file - description: "Unstacked assembly spectra line plot in PNG format" - pattern: "*.spectra-asm.ln.png" - - spectra_asm_st_png: - type: file - description: "Stacked assembly spectra line plot in PNG format" - pattern: "*.spectra-asm.st.png" - - spectra_cn_fl_pdf: - type: file - description: "Unstacked copy number spectra filled plot in PDF format" - pattern: "*.spectra-cn.fl.pdf" - - spectra_cn_ln_pdf: - type: file - description: "Unstacked copy number spectra line plot in PDF format" - pattern: "*.spectra-cn.ln.pdf" - - spectra_cn_st_pdf: - type: file - description: "Stacked copy number spectra line plot in PDF format" - pattern: "*.spectra-cn.st.pdf" - - spectra_asm_fl_pdf: - type: file - description: "Unstacked assembly spectra filled plot in PDF format" - pattern: "*.spectra-asm.fl.pdf" - - spectra_asm_ln_pdf: - type: file - description: "Unstacked assembly spectra line plot in PDF format" - pattern: "*.spectra-asm.ln.pdf" - - spectra_asm_st_pdf: - type: file - description: "Stacked assembly spectra line plot in PDF format" - pattern: "*.spectra-asm.st.pdf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*_only.bed: + type: file + description: Assembly only kmer positions not supported by reads in bed format + pattern: "*_only.bed" - assembly_qv: - type: file - description: "error and qv table for each scaffold of the assembly" - pattern: "*.qv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.qv: + type: file + description: "error and qv table for each scaffold of the assembly" + pattern: "*.qv" + - spectra_cn_fl: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.fl.{png,pdf}: + type: file + description: "Unstacked copy number spectra filled plot in PNG or PDF format" + pattern: "*.spectra-cn.fl.{png,pdf}" + - spectra_cn_ln: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.ln.{png,pdf}: + type: file + description: "Unstacked copy number spectra line plot in PNG or PDF format" + pattern: "*.spectra-cn.ln.{png,pdf}" + - spectra_cn_st: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.*.spectra-cn.st.{png,pdf}: + type: file + description: "Stacked copy number spectra line plot in PNG or PDF format" + pattern: "*.spectra-cn.st.{png,pdf}" - qv: - type: file - description: "error and qv of each assembly as a whole" - pattern: "*.qv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.qv: + type: file + description: "error and qv of each assembly as a whole" + pattern: "*.qv" + - spectra_asm_fl: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.fl.{png,pdf}: + type: file + description: "Unstacked assembly spectra filled plot in PNG or PDF format" + pattern: "*.spectra-asm.fl.{png,pdf}" + - spectra_asm_ln: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.ln.{png,pdf}: + type: file + description: "Unstacked assembly spectra line plot in PNG or PDF format" + pattern: "*.spectra-asm.ln.{png,pdf}" + - spectra_asm_st: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.spectra-asm.st.{png,pdf}: + type: file + description: "Stacked assembly spectra line plot in PNG or PDF format" + pattern: "*.spectra-asm.st.{png,pdf}" + - phased_block_bed: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.phased_block.bed: + type: file + description: Assembly kmer positions seperated by block in bed format + pattern: "*.phased.block.bed" + - phased_block_stats: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.phased_block.stats: + type: file + description: phased assembly statistics file + pattern: "*.phased.block.stats" + - continuity_N: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.continuity.N.{pdf,png}: + type: file + description: "Stacked assembly N continuity plot in PNG or PDF format" + pattern: "*.continuity.N.{png,pdf}" + - block_N: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.block.N.{pdf,png}: + type: file + description: "Stacked assembly N continuity by block plot in PNG or PDF format" + pattern: "*.block.N.{png,pdf}" + - block_blob: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.block.blob.{pdf,png}: + type: file + description: "Stacked assembly block plot in PNG or PDF format" + pattern: "*.block.blob.{png,pdf}" + - hapmers_blob: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.hapmers.blob.{pdf,png}: + type: file + description: "Stacked assembly hapmers block plot in PNG or PDF format" + pattern: "*.hapmers.blob.{png,pdf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@mahesh-panchal" + - "@yumisims" maintainers: - "@mahesh-panchal" + - "@yumisims" diff --git a/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test new file mode 100644 index 00000000..c46843c6 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test @@ -0,0 +1,170 @@ +nextflow_process { + + name "Test Process MERQURYFK" + script "../main.nf" + process "MERQURYFK_MERQURYFK" + + tag "modules" + tag "modules_nfcore" + tag "merquryfk" + tag "merquryfk/merquryfk" + tag "fastk" + tag "fastk/fastk" + + setup { + run("FASTK_FASTK") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + run("FASTK_FASTK", alias: "FASTK_MAT") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + ] + """ + } + } + + run("FASTK_FASTK", alias: "FASTK_PAT") { + script "../../../fastk/fastk" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + ] + """ + } + } + } + + test("homo_sapiens - Illumina - png") { + config "./nextflow.png.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - pdf") { + config "./nextflow.pdf.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - trio") { + config "./nextflow.trio.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = FASTK_MAT.out.ktab + input[2] = FASTK_PAT.out.ktab + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - Illumina - stub") { + options "-stub" + config "./nextflow.pdf.config" + when { + process { + """ + assembly = [ + [ id:'test', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + haplotigs = [ + [ id:'test', single_end:true ], [] + ] + input[0] = FASTK_FASTK.out.hist.join(FASTK_FASTK.out.ktab).join(Channel.from(assembly)).join(Channel.from(haplotigs)) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + + +} \ No newline at end of file diff --git a/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap new file mode 100644 index 00000000..f7ce47f0 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap @@ -0,0 +1,454 @@ +{ + "homo_sapiens - Illumina - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:52.240373868" + }, + "homo_sapiens - Illumina - pdf": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:19.530675341" + }, + "homo_sapiens - Illumina - png": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:21:57.682723412" + }, + "homo_sapiens - Illumina - trio": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + + ], + "13": [ + + ], + "14": [ + + ], + "15": [ + + ], + "16": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "assembly_qv": [ + + ], + "bed": [ + + ], + "block_N": [ + + ], + "block_blob": [ + + ], + "continuity_N": [ + + ], + "hapmers_blob": [ + + ], + "phased_block_bed": [ + + ], + "phased_block_stats": [ + + ], + "qv": [ + + ], + "spectra_asm_fl": [ + + ], + "spectra_asm_ln": [ + + ], + "spectra_asm_st": [ + + ], + "spectra_cn_fl": [ + + ], + "spectra_cn_ln": [ + + ], + "spectra_cn_st": [ + + ], + "stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T15:22:40.060937299" + } +} \ No newline at end of file diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config new file mode 100644 index 00000000..ba1eebc9 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config new file mode 100644 index 00000000..52beeaa3 --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs -pdf' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config new file mode 100644 index 00000000..47c3d63e --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config new file mode 100644 index 00000000..47c3d63e --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config @@ -0,0 +1,9 @@ +process { + withName: 'FASTK_.*' { + ext.args = '-t' + publishDir = [ enabled: false ] + } + withName: 'MERQURYFK_MERQURYFK' { + ext.args = '-lfs' + } +} diff --git a/modules/nf-core/merquryfk/merquryfk/tests/tags.yml b/modules/nf-core/merquryfk/merquryfk/tests/tags.yml new file mode 100644 index 00000000..7dcac99b --- /dev/null +++ b/modules/nf-core/merquryfk/merquryfk/tests/tags.yml @@ -0,0 +1,2 @@ +merquryfk/merquryfk: + - "modules/nf-core/merquryfk/merquryfk/**" From a002b54b366c663a8da1a91c15b8b0519808c931 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 28 Nov 2024 17:01:09 +0000 Subject: [PATCH 42/65] Re-add --- .../nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff index 06934666..0253057f 100644 --- a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff +++ b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff @@ -1,4 +1,6 @@ Changes in module 'nf-core/merquryfk/merquryfk' +'modules/nf-core/merquryfk/merquryfk/meta.yml' is unchanged +Changes in 'merquryfk/merquryfk/main.nf': --- modules/nf-core/merquryfk/merquryfk/main.nf +++ modules/nf-core/merquryfk/merquryfk/main.nf @@ -3,12 +3,10 @@ @@ -16,4 +18,11 @@ Changes in module 'nf-core/merquryfk/merquryfk' output: tuple val(meta), path("${prefix}.completeness.stats") , emit: stats +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.trio.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.png.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/main.nf.test' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/tags.yml' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/nextflow.pdf.config' is unchanged +'modules/nf-core/merquryfk/merquryfk/tests/main.nf.test.snap' is unchanged ************************************************************ From bca19394bc91541cc5c4c020e0d05eed330dd54a Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 28 Nov 2024 17:16:32 +0000 Subject: [PATCH 43/65] merqury fix --- modules.json | 23 +++++++++++-------- .../merquryfk/merquryfk/environment.yml | 4 ---- modules/nf-core/merquryfk/merquryfk/main.nf | 2 ++ .../merquryfk/merquryfk-merquryfk.diff | 5 ++-- subworkflows/local/kmer.nf | 2 +- 5 files changed, 19 insertions(+), 17 deletions(-) mode change 100755 => 100644 modules.json delete mode 100644 modules/nf-core/merquryfk/merquryfk/environment.yml diff --git a/modules.json b/modules.json old mode 100755 new mode 100644 index 4f33d8f8..60db7771 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "bfa8975eefb8df3e480a44ac9e594f23f52b2963", + "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", "installed_by": ["modules"] }, "bedtools/intersect": { @@ -27,7 +27,7 @@ }, "bedtools/map": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", "installed_by": ["modules"] }, "bedtools/merge": { @@ -58,12 +58,12 @@ }, "cooler/cload": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { @@ -80,7 +80,8 @@ "fastk/fastk": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/fastk/fastk/fastk-fastk.diff" }, "gnu/sort": { "branch": "master", @@ -89,12 +90,13 @@ }, "merquryfk/merquryfk": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"], + "patch": "modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff" }, "minimap2/align": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, @@ -115,8 +117,9 @@ }, "mummer": { "branch": "master", - "git_sha": "a15872dde4c4affaac2dfee6c3c65fadab4719bd", - "installed_by": ["modules"] + "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", + "installed_by": ["modules"], + "patch": "modules/nf-core/mummer/mummer.diff" }, "paftools/sam2paf": { "branch": "master", diff --git a/modules/nf-core/merquryfk/merquryfk/environment.yml b/modules/nf-core/merquryfk/merquryfk/environment.yml deleted file mode 100644 index fa6cb1a0..00000000 --- a/modules/nf-core/merquryfk/merquryfk/environment.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: merquryfk_merquryfk -channels: - - conda-forge - - bioconda diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf index 2fa68386..8f95ba4a 100644 --- a/modules/nf-core/merquryfk/merquryfk/main.nf +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -7,6 +7,8 @@ process MERQURYFK_MERQURYFK { input: tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) + path matktab //optional + path patktab output: tuple val(meta), path("${prefix}.completeness.stats") , emit: stats diff --git a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff index 0253057f..dfa35f41 100644 --- a/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff +++ b/modules/nf-core/merquryfk/merquryfk/merquryfk-merquryfk.diff @@ -3,7 +3,7 @@ Changes in module 'nf-core/merquryfk/merquryfk' Changes in 'merquryfk/merquryfk/main.nf': --- modules/nf-core/merquryfk/merquryfk/main.nf +++ modules/nf-core/merquryfk/merquryfk/main.nf -@@ -3,12 +3,10 @@ +@@ -3,12 +3,12 @@ label 'process_medium' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. @@ -12,8 +12,9 @@ Changes in 'merquryfk/merquryfk/main.nf': input: tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) -- path matktab //optional + path matktab //optional - path patktab //optional ++ path patktab output: tuple val(meta), path("${prefix}.completeness.stats") , emit: stats diff --git a/subworkflows/local/kmer.nf b/subworkflows/local/kmer.nf index 9ef7278c..0c58cd52 100755 --- a/subworkflows/local/kmer.nf +++ b/subworkflows/local/kmer.nf @@ -66,7 +66,7 @@ workflow KMER { // // MODULE: USE KMER HISTOGRAM TO PRODUCE SPECTRA GRAPH // - MERQURYFK_MERQURYFK (ch_merq) + MERQURYFK_MERQURYFK (ch_merq, [], []) ch_versions = ch_versions.mix( MERQURYFK_MERQURYFK.out.versions.first() ) emit: From ba1a458b8ce253456900835cd6e88165bd4ccde6 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 29 Nov 2024 13:42:44 +0000 Subject: [PATCH 44/65] Fudging the hash --- modules.json | 8 ++++---- modules/nf-core/merquryfk/merquryfk/main.nf | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules.json b/modules.json index 60db7771..5868d274 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedtools/intersect": { @@ -27,7 +27,7 @@ }, "bedtools/map": { "branch": "master", - "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedtools/merge": { @@ -58,12 +58,12 @@ }, "cooler/cload": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { diff --git a/modules/nf-core/merquryfk/merquryfk/main.nf b/modules/nf-core/merquryfk/merquryfk/main.nf index 8f95ba4a..0cb1c63b 100644 --- a/modules/nf-core/merquryfk/merquryfk/main.nf +++ b/modules/nf-core/merquryfk/merquryfk/main.nf @@ -8,7 +8,7 @@ process MERQURYFK_MERQURYFK { input: tuple val(meta), path(fastk_hist),path(fastk_ktab),path(assembly),path(haplotigs) path matktab //optional - path patktab + path patktab //optional output: tuple val(meta), path("${prefix}.completeness.stats") , emit: stats From d99fe23c58b9c97297f71894ac2f1f3d5001b3aa Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 29 Nov 2024 13:45:34 +0000 Subject: [PATCH 45/65] Fudging the hash --- modules.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index 5868d274..829da65b 100644 --- a/modules.json +++ b/modules.json @@ -96,7 +96,7 @@ }, "minimap2/align": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, @@ -117,7 +117,7 @@ }, "mummer": { "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/mummer/mummer.diff" }, From b4b88dfb89f4ec469c6cb8756cba3092ff76a1f1 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 29 Nov 2024 15:49:09 +0000 Subject: [PATCH 46/65] Update modules again --- modules.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 829da65b..d5fa2f77 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "bfa8975eefb8df3e480a44ac9e594f23f52b2963", "installed_by": ["modules"] }, "bedtools/intersect": { @@ -117,9 +117,8 @@ }, "mummer": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], - "patch": "modules/nf-core/mummer/mummer.diff" + "git_sha": "a15872dde4c4affaac2dfee6c3c65fadab4719bd", + "installed_by": ["modules"] }, "paftools/sam2paf": { "branch": "master", From 163ffd6343fe0b7217fcb315aa9e353cacd2ea98 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 29 Nov 2024 16:02:24 +0000 Subject: [PATCH 47/65] Updates to Synteny to reflect Minimap2 update --- subworkflows/local/synteny.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/synteny.nf b/subworkflows/local/synteny.nf index 455c8bd1..1c7642bc 100755 --- a/subworkflows/local/synteny.nf +++ b/subworkflows/local/synteny.nf @@ -27,12 +27,12 @@ workflow SYNTENY { } .combine(reference_tuple) .multiMap{syntenic_ref, meta, ref -> - syntenic_tuple : tuple([ id: syntenic_ref.toString().split('/')[-1].split('.fasta')[0], - class: meta.class, + syntenic_tuple : tuple([ id: syntenic_ref.toString().split('/')[-1].split('.fasta')[0], + class: meta.class, project_type: meta.project_type - ], + ], syntenic_ref) - reference_fa : ref + reference_fa : tuple( meta, ref) bool_bam_output : false val_bam_index : "bai" bool_cigar_paf : true From 9b78df145b08271cc7e87b7789018b1e61966a79 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Mon, 2 Dec 2024 16:53:23 +0000 Subject: [PATCH 48/65] Update yahs --- modules.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules.json b/modules.json index 4e3d7bc3..a429b3b6 100755 --- a/modules.json +++ b/modules.json @@ -196,6 +196,11 @@ "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] + }, + "yahs": { + "branch": "master", + "git_sha": "d3a3d04073af68437f07e0fb9b88aa6172c3f678", + "installed_by": ["modules"] } } }, From b084e7cf02e225be5c78725f0b8eae7394071293 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Wed, 4 Dec 2024 13:02:33 +0000 Subject: [PATCH 49/65] Change to YAML_INPUT --- assets/local_testing/nxOscSUBSET.yaml | 3 ++- subworkflows/local/read_coverage.nf | 3 +++ subworkflows/local/yaml_input.nf | 12 +++--------- workflows/treeval.nf | 1 + 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/assets/local_testing/nxOscSUBSET.yaml b/assets/local_testing/nxOscSUBSET.yaml index 06c36037..6c3fbd49 100755 --- a/assets/local_testing/nxOscSUBSET.yaml +++ b/assets/local_testing/nxOscSUBSET.yaml @@ -29,7 +29,8 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: "" + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bCucCan1.fasta + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bGalGal1.fasta busco: lineages_path: /lustre/scratch123/tol/resources/busco/v5 lineage: nematoda_odb10 diff --git a/subworkflows/local/read_coverage.nf b/subworkflows/local/read_coverage.nf index 37d1f753..2eb61ec5 100755 --- a/subworkflows/local/read_coverage.nf +++ b/subworkflows/local/read_coverage.nf @@ -111,6 +111,9 @@ workflow READ_COVERAGE { ) ch_versions = ch_versions.mix( CAT_CAT.out.versions ) + // + // MODULE: SORT THE MERGED BED FILE INTO CHROMOSOME-LOCATION ORDER + // GNU_SORT_BED( CAT_CAT.out.file_out ) diff --git a/subworkflows/local/yaml_input.nf b/subworkflows/local/yaml_input.nf index b8fc454e..2fe38c8c 100755 --- a/subworkflows/local/yaml_input.nf +++ b/subworkflows/local/yaml_input.nf @@ -39,6 +39,8 @@ workflow YAML_INPUT { } .set{ group } + group.synteny.view{"INPUT: $it"} + // // LOGIC: PARSES THE SECOND LEVEL OF YAML VALUES PER ABOVE OUTPUT CHANNEL // @@ -96,14 +98,6 @@ workflow YAML_INPUT { } .set{selfcomp_data} - group - .synteny - .combine(workflow_id) - .multiMap{ data, id -> - synteny_genomes: (id == "FULL" || id == "JBROWSE" ? data.synteny_genomes: "") - } - .set{synteny_data} - group .intron .combine(workflow_id) @@ -232,7 +226,7 @@ workflow YAML_INPUT { motif_len = selfcomp_data.motif_len mummer_chunk = selfcomp_data.mummer_chunk - synteny_paths = synteny_data.synteny_genomes + synteny_paths = group.synteny intron_size = intron_size.size diff --git a/workflows/treeval.nf b/workflows/treeval.nf index fe060ad3..a9906d0f 100755 --- a/workflows/treeval.nf +++ b/workflows/treeval.nf @@ -198,6 +198,7 @@ workflow TREEVAL { // and generated a file of syntenic blocks. // if ( !exclude_workflow_steps.contains("synteny")) { + YAML_INPUT.out.synteny_paths.view {"SYNTENY_MAIN: $it"} SYNTENY ( YAML_INPUT.out.reference_ch, YAML_INPUT.out.synteny_paths From e7e36d119b1ef780d643998eaaacf06e45274912 Mon Sep 17 00:00:00 2001 From: William Eagles Date: Wed, 4 Dec 2024 14:20:58 +0000 Subject: [PATCH 50/65] lint fix --- .github/PULL_REQUEST_TEMPLATE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md old mode 100644 new mode 100755 From c1e52e803a474abec74ae0f3e14f094485223253 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 5 Dec 2024 14:52:14 +0000 Subject: [PATCH 51/65] Change SETUP from 1 to 2.14 --- .github/workflows/ci.yml | 2 +- conf/base.config | 6 ------ subworkflows/local/yaml_input.nf | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c379c507..270afb6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: uses: tj-actions/branch-names@v8 - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2.14 with: version: "${{ matrix.NXF_VER }}" diff --git a/conf/base.config b/conf/base.config index 38013674..1acb9d18 100755 --- a/conf/base.config +++ b/conf/base.config @@ -248,12 +248,6 @@ process { memory = { check_max( 100.GB * task.attempt, 'memory' ) } } - withName: FKUTILS_FKPROF { - cpus = { check_max( 25 * task.attempt, 'cpus' ) } - memory = { check_max( 1.GB * ( reference.size() < 2e9 ? 50 : Math.ceil( ( reference.size() / 1e+9 ) * 20 ) * Math.ceil( task.attempt * 1 ) ), 'memory' ) } - time = { check_max( 36.h * task.attempt, 'time' ) } - } - // // GENERAL MODULE LIMITS // Based on reports from SummaryStats diff --git a/subworkflows/local/yaml_input.nf b/subworkflows/local/yaml_input.nf index 2fe38c8c..566a8ddd 100755 --- a/subworkflows/local/yaml_input.nf +++ b/subworkflows/local/yaml_input.nf @@ -226,7 +226,7 @@ workflow YAML_INPUT { motif_len = selfcomp_data.motif_len mummer_chunk = selfcomp_data.mummer_chunk - synteny_paths = group.synteny + synteny_paths = group.synteny intron_size = intron_size.size From 10212a80f1f2ed4f6be0e069becf3c16cf2b62b7 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Thu, 5 Dec 2024 14:53:15 +0000 Subject: [PATCH 52/65] Change SETUP from 1 to 2.14 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 270afb6c..1912eaea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: uses: tj-actions/branch-names@v8 - name: Install Nextflow - uses: nf-core/setup-nextflow@v2.14 + uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" From 781615eac17df3134afd1fc52dbd6c58aeef03e7 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Fri, 6 Dec 2024 09:21:46 +0000 Subject: [PATCH 53/65] Bump BAM2BED SORT to 2Gb as base --- assets/local_testing/nxOscDF5033.yaml | 2 -- conf/base.config | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/local_testing/nxOscDF5033.yaml b/assets/local_testing/nxOscDF5033.yaml index 4433c0c1..6adb8c24 100755 --- a/assets/local_testing/nxOscDF5033.yaml +++ b/assets/local_testing/nxOscDF5033.yaml @@ -33,8 +33,6 @@ telomere: synteny: synteny_genomes: - /lustre/scratch123/tol/resources/treeval/synteny/bird/bCucCan1.fasta - - /lustre/scratch123/tol/resources/treeval/synteny/bird/bGalGal1.fasta - - /lustre/scratch123/tol/resources/treeval/synteny/bird/bTaeGut2.fasta busco: lineages_path: /lustre/scratch123/tol/resources/busco/v5 lineage: nematoda_odb10 diff --git a/conf/base.config b/conf/base.config index 1acb9d18..a057a3a5 100755 --- a/conf/base.config +++ b/conf/base.config @@ -210,7 +210,7 @@ process { // add a cpus 16 if bam.size() >= 50GB withName: BAMTOBED_SORT { cpus = { check_max( 12 * 1, 'cpus' ) } - memory = { check_max( 1.GB * ( ( bam.size() < 150e9 ? Math.ceil( bam.size() / 1e+9 ) : Math.ceil( bam.size() / 4e+9 ) ) * Math.ceil( task.attempt * 1 ) ), 'memory' ) } + memory = { check_max( 2.GB * ( ( bam.size() < 150e9 ? Math.ceil( bam.size() / 1e+9 ) : Math.ceil( bam.size() / 4e+9 ) ) * Math.ceil( task.attempt * 1 ) ), 'memory' ) } time = { check_max( 30.h * task.attempt, 'time' ) } } From a929f2fb2cb81a402478ca1964064e5c9295c3a7 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 14:00:51 +0000 Subject: [PATCH 54/65] Adding VERSION information! --- bin/awk_filter_reads.sh | 8 +++++++- bin/bed_to_contacts.sh | 9 ++++++++- bin/generate_cram_csv.sh | 5 +++++ bin/get_avgcov.sh | 2 +- bin/get_busco_gene.sh | 9 +++++++-- bin/grep_pg.sh | 8 +++++++- bin/paf_to_bed.sh | 2 +- 7 files changed, 36 insertions(+), 7 deletions(-) diff --git a/bin/awk_filter_reads.sh b/bin/awk_filter_reads.sh index d50aa9ec..54857762 100755 --- a/bin/awk_filter_reads.sh +++ b/bin/awk_filter_reads.sh @@ -1 +1,7 @@ -awk 'BEGIN{OFS="\t"}{if($1 ~ /^\@/) {print($0)} else {$2=and($2,compl(2048)); print(substr($0,2))}}' +version='1.0.0' +if [ $1 == '-v' ]; +then + echo "$version" +else + awk 'BEGIN{OFS="\t"}{if($1 ~ /^\@/) {print($0)} else {$2=and($2,compl(2048)); print(substr($0,2))}}' +fi diff --git a/bin/bed_to_contacts.sh b/bin/bed_to_contacts.sh index b2e884ca..a49be321 100755 --- a/bin/bed_to_contacts.sh +++ b/bin/bed_to_contacts.sh @@ -1,2 +1,9 @@ #!/bin/bash -paste -d '\t' - - < $1 | awk 'BEGIN {FS="\t"; OFS="\t"} {if ($1 > $7) {print substr($4,1,length($4)-2),$12,$7,$8,"16",$6,$1,$2,"8",$11,$5} else {print substr($4,1,length($4)-2),$6,$1,$2,"8",$12,$7,$8,"16",$5,$11} }' | tr '\-+' '01' | sort -k3,3d -k7,7d | awk 'NF==11' + +version='1.0.0' +if [ $1 == '-v' ]; +then + echo "$version" +else + paste -d '\t' - - < $1 | awk 'BEGIN {FS="\t"; OFS="\t"} {if ($1 > $7) {print substr($4,1,length($4)-2),$12,$7,$8,"16",$6,$1,$2,"8",$11,$5} else {print substr($4,1,length($4)-2),$6,$1,$2,"8",$12,$7,$8,"16",$5,$11} }' | tr '\-+' '01' | sort -k3,3d -k7,7d | awk 'NF==11' +fi diff --git a/bin/generate_cram_csv.sh b/bin/generate_cram_csv.sh index 069c44e1..962f6956 100755 --- a/bin/generate_cram_csv.sh +++ b/bin/generate_cram_csv.sh @@ -71,6 +71,11 @@ if [ -z "$1" ]; then exit 1 fi +if [ $1 == "-v" ]; then + echo "1.0" + exit 1 +fi + cram_path=$1 chunkn=0 outcsv=$2 diff --git a/bin/get_avgcov.sh b/bin/get_avgcov.sh index bea3da09..9f25cb35 100755 --- a/bin/get_avgcov.sh +++ b/bin/get_avgcov.sh @@ -8,7 +8,7 @@ # Author = yy5 # ------------------- version='1.0.0' -if [ $1 == '-v']; +if [ $1 == '-v' ]; then echo "$version" else diff --git a/bin/get_busco_gene.sh b/bin/get_busco_gene.sh index 84ed187a..4d9b92d2 100755 --- a/bin/get_busco_gene.sh +++ b/bin/get_busco_gene.sh @@ -11,5 +11,10 @@ # Update for BUSCO 5.5.0 - by we3 # Reorder start and end so smallest always second column. Also, trim range from scaffold name in first column. # ------------------- - -cat $1| grep -v '#'|awk '$2!="Missing"'| awk '{if($4>$5){print $3"\t"$5"\t"$4"\t"$1"\t"$7"\t"$6"\t"$9}else{print $3"\t"$4"\t"$5"\t"$1"\t"$7"\t"$6"\t"$9}}'| awk -F'\t' -v OFS='\t' '{if($7==""){$7="no_orthodb_link"}; sub(/:.*/,"",$1);print $1,$2,$3,$4,$5,$6,$7}' +version='1.0.0' +if [ $1 == '-v' ]; +then + echo "$version" +else + cat $1| grep -v '#'|awk '$2!="Missing"'| awk '{if($4>$5){print $3"\t"$5"\t"$4"\t"$1"\t"$7"\t"$6"\t"$9}else{print $3"\t"$4"\t"$5"\t"$1"\t"$7"\t"$6"\t"$9}}'| awk -F'\t' -v OFS='\t' '{if($7==""){$7="no_orthodb_link"}; sub(/:.*/,"",$1);print $1,$2,$3,$4,$5,$6,$7}' +fi diff --git a/bin/grep_pg.sh b/bin/grep_pg.sh index 680b5ec2..f8e6a7fb 100755 --- a/bin/grep_pg.sh +++ b/bin/grep_pg.sh @@ -7,4 +7,10 @@ # ------------------- # Author = yy5 -grep -v "^\@PG" | awk '{if($1 ~ /^\@/) {print($0)} else {if(and($2,64)>0) {print(1$0)} else {print(2$0)}}}' +version='1.0.0' +if [ $1 == '-v' ]; +then + echo "$version" +else + grep -v "^\@PG" | awk '{if($1 ~ /^\@/) {print($0)} else {if(and($2,64)>0) {print(1$0)} else {print(2$0)}}}' +fi diff --git a/bin/paf_to_bed.sh b/bin/paf_to_bed.sh index 7de63334..28e72eb9 100755 --- a/bin/paf_to_bed.sh +++ b/bin/paf_to_bed.sh @@ -10,7 +10,7 @@ version='1.0.0' -if [ $1 == '-v']; +if [ $1 == '-v' ]; then echo "$version" else From 96f47fd5b0e4efd31895031ad328802d115f310f Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 14:01:09 +0000 Subject: [PATCH 55/65] Making sure version information is printed --- modules/local/generate_cram_csv.nf | 2 ++ modules/local/rename_ids.nf | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/local/generate_cram_csv.nf b/modules/local/generate_cram_csv.nf index 4ddf0162..2bccab9d 100755 --- a/modules/local/generate_cram_csv.nf +++ b/modules/local/generate_cram_csv.nf @@ -26,6 +26,7 @@ process GENERATE_CRAM_CSV { cat <<-END_VERSIONS > versions.yml "${task.process}": + generate_cram_csv: \$(generate_cram_csv.sh -v) samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) END_VERSIONS """ @@ -36,6 +37,7 @@ process GENERATE_CRAM_CSV { cat <<-END_VERSIONS > versions.yml "${task.process}": + generate_cram_csv: \$(generate_cram_csv.sh -v) samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) END_VERSIONS """ diff --git a/modules/local/rename_ids.nf b/modules/local/rename_ids.nf index b6b12920..0be66c27 100755 --- a/modules/local/rename_ids.nf +++ b/modules/local/rename_ids.nf @@ -24,7 +24,8 @@ process RENAME_IDS { cat <<-END_VERSIONS > versions.yml "${task.process}": - coreutils: $VERSION + rename_ids: \$(rename_ids.sh -v) + coreutils: $VERSION END_VERSIONS /$ @@ -36,8 +37,8 @@ process RENAME_IDS { cat <<-END_VERSIONS > versions.yml "${task.process}": - rename_ids: \$(rename_ids.sh -v) - coreutils: $VERSION + rename_ids: \$(rename_ids.sh -v) + coreutils: $VERSION END_VERSIONS """ From 68a38a86473d35f78f9baab9498b9a53091030b5 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 14:01:25 +0000 Subject: [PATCH 56/65] removing defaults --- lib/Utils.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Utils.groovy b/lib/Utils.groovy index 8d030f4e..13cb02df 100755 --- a/lib/Utils.groovy +++ b/lib/Utils.groovy @@ -22,7 +22,7 @@ class Utils { // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order From d87bed7939bee00b902cc169dd2ebd5f5b90d025 Mon Sep 17 00:00:00 2001 From: Damon-Lee Pointon <51855558+DLBPointon@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:10:53 +0000 Subject: [PATCH 57/65] Update TreeValTinyFullTest.yaml --- assets/github_testing/TreeValTinyFullTest.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/github_testing/TreeValTinyFullTest.yaml b/assets/github_testing/TreeValTinyFullTest.yaml index ba956609..e5919948 100755 --- a/assets/github_testing/TreeValTinyFullTest.yaml +++ b/assets/github_testing/TreeValTinyFullTest.yaml @@ -29,7 +29,6 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: - /home/runner/work/treeval/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /home/runner/work/treeval/treeval/TreeValTinyData/busco/subset/ From 49f9ea569281759d6adb6f492e326e4c33a20b86 Mon Sep 17 00:00:00 2001 From: Damon-Lee Pointon <51855558+DLBPointon@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:23:04 +0000 Subject: [PATCH 58/65] Update TreeValTinyFullTest.yaml --- assets/github_testing/TreeValTinyFullTest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/github_testing/TreeValTinyFullTest.yaml b/assets/github_testing/TreeValTinyFullTest.yaml index e5919948..b74d83ae 100755 --- a/assets/github_testing/TreeValTinyFullTest.yaml +++ b/assets/github_testing/TreeValTinyFullTest.yaml @@ -29,7 +29,7 @@ intron: telomere: teloseq: TTAGGG synteny: - - /home/runner/work/treeval/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta + - /home/runner/work/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /home/runner/work/treeval/treeval/TreeValTinyData/busco/subset/ lineage: fungi_odb10 From 18688d62362cb10a40321a0f8427fbee1e3a7b6b Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 14:27:54 +0000 Subject: [PATCH 59/65] Updates for field value and PRETTER! --- .../github_testing/TreeValTinyFullTest.yaml | 2 +- assets/local_testing/nxOscDF5033-BGA.yaml | 3 +- assets/local_testing/nxOscDF5033.yaml | 3 +- bin/FKprof | Bin 260256 -> 0 bytes docs/usage.md | 5 +- modules/local/fkutils/fkprof/main.nf | 52 ------------------ 6 files changed, 5 insertions(+), 60 deletions(-) delete mode 100755 bin/FKprof delete mode 100644 modules/local/fkutils/fkprof/main.nf diff --git a/assets/github_testing/TreeValTinyFullTest.yaml b/assets/github_testing/TreeValTinyFullTest.yaml index b74d83ae..8e215cc8 100755 --- a/assets/github_testing/TreeValTinyFullTest.yaml +++ b/assets/github_testing/TreeValTinyFullTest.yaml @@ -29,7 +29,7 @@ intron: telomere: teloseq: TTAGGG synteny: - - /home/runner/work/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta + - /home/runner/work/treeval/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /home/runner/work/treeval/treeval/TreeValTinyData/busco/subset/ lineage: fungi_odb10 diff --git a/assets/local_testing/nxOscDF5033-BGA.yaml b/assets/local_testing/nxOscDF5033-BGA.yaml index 26b5d87d..b0c71b3e 100755 --- a/assets/local_testing/nxOscDF5033-BGA.yaml +++ b/assets/local_testing/nxOscDF5033-BGA.yaml @@ -21,8 +21,7 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: - - /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta + - /nfs/treeoflife-01/teams/tola/users/dp24/treeval/TreeValTinyData/synteny/fungi/LaetiporusSulphureus.fasta busco: lineages_path: /workspace/treeval-curation/busco/v5 lineage: nematoda_odb10 diff --git a/assets/local_testing/nxOscDF5033.yaml b/assets/local_testing/nxOscDF5033.yaml index 6adb8c24..5c0493b5 100755 --- a/assets/local_testing/nxOscDF5033.yaml +++ b/assets/local_testing/nxOscDF5033.yaml @@ -31,8 +31,7 @@ intron: telomere: teloseq: TTAGGG synteny: - synteny_genomes: - - /lustre/scratch123/tol/resources/treeval/synteny/bird/bCucCan1.fasta + - /lustre/scratch123/tol/resources/treeval/synteny/bird/bCucCan1.fasta busco: lineages_path: /lustre/scratch123/tol/resources/busco/v5 lineage: nematoda_odb10 diff --git a/bin/FKprof b/bin/FKprof deleted file mode 100755 index 891e81f7222ae56dbf95254067c9ef6286301748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260256 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 Y+0R<}XV*V2#(vJ5+Ws`lz$!Zb2aI7{y#N3J diff --git a/docs/usage.md b/docs/usage.md index 342c0b9e..067a5759 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -193,8 +193,7 @@ alignment: genesets: - /FULL/PATH/TO/-data.csv synteny: - synteny_genomes: - - /FULL/PATH/TO/.fasta + - /FULL/PATH/TO/.fasta ```
@@ -340,7 +339,7 @@ The following is an example YAML file we have used during production: [nxOscDF50 - `motif_len`: Length of motif to be used in self complementary sequence finding - `mummer_chunk`: Size of chunks used by MUMMER module. - `synteny` - - `synteny_genomes`: List of paths to syntenic genomes grouped by clade. + - List of paths to syntenic genomes grouped by clade. - `outdir`: Will be required in future development. - `intron:` - `size`: base pair size of introns default is 50k diff --git a/modules/local/fkutils/fkprof/main.nf b/modules/local/fkutils/fkprof/main.nf deleted file mode 100644 index 399c2d5a..00000000 --- a/modules/local/fkutils/fkprof/main.nf +++ /dev/null @@ -1,52 +0,0 @@ -process FKUTILS_FKPROF { - tag "$meta.id" - label 'process_medium' - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'docker.io/ubuntu:20.04' }" - - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "FKUTILS_FKPROF module does not support Conda. Please use Docker / Singularity instead." - } - - input: - tuple val(meta), path(reference) - tuple val(meta2), path(ktab) - - output: - tuple val(meta), file("*bed"), emit: bed - path "versions.yml", emit: versions - - script: - def args = task.ext.args ?: "" - def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = "2f7b2583092fafb0a5abc654b5857642" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - - """ - ${projectDir}/bin/FKprof \\ - $args \\ - -t$task.cpus \\ - ${reference} \\ - ${ktab}/*ktab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fkprof: $VERSION - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def kmer = 31 - def VERSION = "2f7b2583092fafb0a5abc654b5857642" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. - """ - touch ${prefix}_${kmer}_read.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fkprof: $VERSION - END_VERSIONS - """ -} From 233b3265a3ea731cc720b988f08f227d3dab0657 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 15:04:10 +0000 Subject: [PATCH 60/65] Updates --- bin/find_telomere | Bin 20120 -> 0 bytes modules/local/find_telomere_regions.nf | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 bin/find_telomere diff --git a/bin/find_telomere b/bin/find_telomere deleted file mode 100755 index b7d84a15dd8c8721bf4e8f5a9f5ed831c21abe7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20120 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 1) { From 0bdcf5d953f25084d69f2bd307586654fc6bc46b Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 16:24:10 +0000 Subject: [PATCH 61/65] Wills MerquryFK update --- docs/usage.md | 5 +- modules.json | 2 +- modules/nf-core/fastk/fastk/environment.yml | 3 +- modules/nf-core/fastk/fastk/fastk-fastk.diff | 8 + modules/nf-core/fastk/fastk/main.nf | 32 ++ modules/nf-core/fastk/fastk/meta.yml | 74 ++-- .../nf-core/fastk/fastk/tests/main.nf.test | 110 ++++++ .../fastk/fastk/tests/main.nf.test.snap | 346 ++++++++++++++++++ .../nf-core/fastk/fastk/tests/nextflow.config | 3 + modules/nf-core/fastk/fastk/tests/tags.yml | 2 + 10 files changed, 553 insertions(+), 32 deletions(-) mode change 100755 => 100644 modules/nf-core/fastk/fastk/main.nf create mode 100644 modules/nf-core/fastk/fastk/tests/main.nf.test create mode 100644 modules/nf-core/fastk/fastk/tests/main.nf.test.snap create mode 100644 modules/nf-core/fastk/fastk/tests/nextflow.config create mode 100644 modules/nf-core/fastk/fastk/tests/tags.yml diff --git a/docs/usage.md b/docs/usage.md index 067a5759..fa94c02f 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -89,6 +89,8 @@ Now that's all downloaded we need to prep it. At this point it is all still gzip The below code will look through the current folder for files ending with `.fasta.gz` and decompresses it, it will then run our python script, `GA_data_prep.py`. +NOTE: This will soon be superseeded by a rust tools `treeval_utils`, this will replace all of the accessory pythons scripts included in this document. Whilst also adding a program to verify your YAML. + Command: ```bash @@ -234,7 +236,7 @@ If your data isn't already in these formats, then let us know and we'll see how This command iterates through your bam files and converts them to fastq via samtools. -``` +```bash cd { TO FOLDER OF BAM FILES } mkdir fastq for i in *bam @@ -266,6 +268,7 @@ done This simply gzips (compresses) the fasta files. ```bash +cd fasta for i in .fasta; do echo $i gzip $i diff --git a/modules.json b/modules.json index 60db7771..939f0866 100644 --- a/modules.json +++ b/modules.json @@ -79,7 +79,7 @@ }, "fastk/fastk": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/fastk/fastk/fastk-fastk.diff" }, diff --git a/modules/nf-core/fastk/fastk/environment.yml b/modules/nf-core/fastk/fastk/environment.yml index 690a3f7a..14207ff6 100644 --- a/modules/nf-core/fastk/fastk/environment.yml +++ b/modules/nf-core/fastk/fastk/environment.yml @@ -1,4 +1,5 @@ -name: fastk_fastk channels: - conda-forge - bioconda +dependencies: + - bioconda::false_flag # False flag to pass nf-core/lint diff --git a/modules/nf-core/fastk/fastk/fastk-fastk.diff b/modules/nf-core/fastk/fastk/fastk-fastk.diff index c74973c8..80906fac 100644 --- a/modules/nf-core/fastk/fastk/fastk-fastk.diff +++ b/modules/nf-core/fastk/fastk/fastk-fastk.diff @@ -18,5 +18,13 @@ Changes in module 'nf-core/fastk/fastk' -N${prefix}_fk \\ $reads +@@ -62,7 +61,6 @@ + "FastK \\ + $args \\ + -T$task.cpus \\ +- -M${task.memory.toGiga()} \\ + -N${prefix}_fk \\ + $reads" + ************************************************************ diff --git a/modules/nf-core/fastk/fastk/main.nf b/modules/nf-core/fastk/fastk/main.nf old mode 100755 new mode 100644 index fe0effd0..256e80de --- a/modules/nf-core/fastk/fastk/main.nf +++ b/modules/nf-core/fastk/fastk/main.nf @@ -32,6 +32,38 @@ process FASTK_FASTK { -N${prefix}_fk \\ $reads + find . -name '*.ktab*' \\ + | xargs chmod a+r + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastk: $FASTK_VERSION + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "FASTK_FASTK module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def FASTK_VERSION = 'f18a4e6d2207539f7b84461daebc54530a9559b0' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + + def touch_ktab = args.contains('-t') ? "touch ${prefix}_fk.ktab .${prefix}_fk.ktab.1" : '' + def touch_prof = args.contains('-p') ? "touch ${prefix}_fk.prof .${prefix}_fk.pidx.1" : '' + """ + touch ${prefix}_fk.hist + $touch_ktab + $touch_prof + + echo \\ + "FastK \\ + $args \\ + -T$task.cpus \\ + -N${prefix}_fk \\ + $reads" + cat <<-END_VERSIONS > versions.yml "${task.process}": fastk: $FASTK_VERSION diff --git a/modules/nf-core/fastk/fastk/meta.yml b/modules/nf-core/fastk/fastk/meta.yml index 7c7f4260..4abc1033 100644 --- a/modules/nf-core/fastk/fastk/meta.yml +++ b/modules/nf-core/fastk/fastk/meta.yml @@ -9,41 +9,57 @@ tools: description: "A fast K-mer counter for high-fidelity shotgun datasets" homepage: "https://github.com/thegenemyers/FASTK" tool_dev_url: "https://github.com/thegenemyers/FASTK" - licence: "https://github.com/thegenemyers/FASTK/blob/master/LICENSE" + licence: ["https://github.com/thegenemyers/FASTK/blob/master/LICENSE"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - hist: - type: file - description: Histogram of k-mers - pattern: "*.hist" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.hist": + type: file + description: Histogram of k-mers + pattern: "*.hist" - ktab: - type: file - description: A sorted table of all canonical k‑mers along with their counts. - pattern: "*.ktab" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - '*.ktab*", hidden: true': + type: file + description: A sorted table of all canonical k‑mers along with their counts. + pattern: "*.ktab" - prof: - type: file - description: A k‑mer count profile of each sequence in the input data set. - pattern: "*.prof" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - '*.{prof,pidx}*", hidden: true': + type: file + description: A k‑mer count profile of each sequence in the input data set. + pattern: "*.prof" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@mahesh-panchal" maintainers: - "@mahesh-panchal" + - "@gallvp" diff --git a/modules/nf-core/fastk/fastk/tests/main.nf.test b/modules/nf-core/fastk/fastk/tests/main.nf.test new file mode 100644 index 00000000..856c36a8 --- /dev/null +++ b/modules/nf-core/fastk/fastk/tests/main.nf.test @@ -0,0 +1,110 @@ +nextflow_process { + + name "Test Process FASTK_FASTK" + script "../main.nf" + config './nextflow.config' + process "FASTK_FASTK" + + tag "modules" + tag "modules_nfcore" + tag "fastk" + tag "fastk/fastk" + + test("test_fastk_fastk_single_end") { + when { + process { + """ + input[0] = [ + [ id:'test' , single_end: true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_fastk_fastk_paired_end") { + + when { + process { + """ + input[0] = [ + [ id:'test' , single_end: false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_fastk_fastk_single_end_stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' , single_end: true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_fastk_fastk_paired_end_stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' , single_end: false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/fastk/fastk/tests/main.nf.test.snap b/modules/nf-core/fastk/fastk/tests/main.nf.test.snap new file mode 100644 index 00000000..1e3fc4da --- /dev/null +++ b/modules/nf-core/fastk/fastk/tests/main.nf.test.snap @@ -0,0 +1,346 @@ +{ + "test_fastk_fastk_single_end_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test_fk.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.ktab.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.ktab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.pidx.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.prof:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "3": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ], + "hist": [ + [ + { + "id": "test", + "single_end": true + }, + "test_fk.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ktab": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.ktab.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.ktab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "prof": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.pidx.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.prof:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-18T19:39:28.510263" + }, + "test_fastk_fastk_single_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test_fk.hist:md5,c80e12f7321e62dba4b437d7bff36ec0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.ktab.1:md5,ceeacd0cb3aa69bf9b2a402830b40e26", + ".test_fk.ktab.2:md5,f2629fd15b285aed3dc2d5fe546edf3f", + "test_fk.ktab:md5,a605a58931a4b5029469e1c2575c8cee" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.pidx.1:md5,90bc384f61d2ecdb4586ab52ab04fddf", + ".test_fk.prof.1:md5,ebd48923a724cf79934f0b2ed42ba73d", + "test_fk.prof:md5,43d426c95d277b8148406624d513bd40" + ] + ] + ], + "3": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ], + "hist": [ + [ + { + "id": "test", + "single_end": true + }, + "test_fk.hist:md5,c80e12f7321e62dba4b437d7bff36ec0" + ] + ], + "ktab": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.ktab.1:md5,ceeacd0cb3aa69bf9b2a402830b40e26", + ".test_fk.ktab.2:md5,f2629fd15b285aed3dc2d5fe546edf3f", + "test_fk.ktab:md5,a605a58931a4b5029469e1c2575c8cee" + ] + ] + ], + "prof": [ + [ + { + "id": "test", + "single_end": true + }, + [ + ".test_fk.pidx.1:md5,90bc384f61d2ecdb4586ab52ab04fddf", + ".test_fk.prof.1:md5,ebd48923a724cf79934f0b2ed42ba73d", + "test_fk.prof:md5,43d426c95d277b8148406624d513bd40" + ] + ] + ], + "versions": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-18T19:31:31.128388" + }, + "test_fastk_fastk_paired_end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_fk.hist:md5,4f75b550d87ed4f26a2b10a05ac7e98c" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.ktab.1:md5,7f28fb44940fda799797e3069f5d7263", + ".test_fk.ktab.2:md5,c14a85c128926ace78372f09029977b1", + "test_fk.ktab:md5,fddd5be0c36ad1d2131b8d8774f7657a" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.pidx.1:md5,e7e760f714070a4afefb38ffff559684", + ".test_fk.pidx.2:md5,a549612bbdba2506eb3311237638c4b0", + ".test_fk.prof.1:md5,46a5fd9e297262b058f8c1fd062fcf56", + ".test_fk.prof.2:md5,80326a7406f41ccf2e51e341fc804132", + "test_fk.prof:md5,d3c7d8decd4ea6e298291b8be0e2de85" + ] + ] + ], + "3": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ], + "hist": [ + [ + { + "id": "test", + "single_end": false + }, + "test_fk.hist:md5,4f75b550d87ed4f26a2b10a05ac7e98c" + ] + ], + "ktab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.ktab.1:md5,7f28fb44940fda799797e3069f5d7263", + ".test_fk.ktab.2:md5,c14a85c128926ace78372f09029977b1", + "test_fk.ktab:md5,fddd5be0c36ad1d2131b8d8774f7657a" + ] + ] + ], + "prof": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.pidx.1:md5,e7e760f714070a4afefb38ffff559684", + ".test_fk.pidx.2:md5,a549612bbdba2506eb3311237638c4b0", + ".test_fk.prof.1:md5,46a5fd9e297262b058f8c1fd062fcf56", + ".test_fk.prof.2:md5,80326a7406f41ccf2e51e341fc804132", + "test_fk.prof:md5,d3c7d8decd4ea6e298291b8be0e2de85" + ] + ] + ], + "versions": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-18T19:31:35.565502" + }, + "test_fastk_fastk_paired_end_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_fk.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.ktab.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.ktab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.pidx.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.prof:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "3": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ], + "hist": [ + [ + { + "id": "test", + "single_end": false + }, + "test_fk.hist:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ktab": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.ktab.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.ktab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "prof": [ + [ + { + "id": "test", + "single_end": false + }, + [ + ".test_fk.pidx.1:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_fk.prof:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,c216a1608924d1662d2086e1de1d5abd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-18T19:39:32.570957" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastk/fastk/tests/nextflow.config b/modules/nf-core/fastk/fastk/tests/nextflow.config new file mode 100644 index 00000000..c89ce9d5 --- /dev/null +++ b/modules/nf-core/fastk/fastk/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '-t -p' +} diff --git a/modules/nf-core/fastk/fastk/tests/tags.yml b/modules/nf-core/fastk/fastk/tests/tags.yml new file mode 100644 index 00000000..82f9df82 --- /dev/null +++ b/modules/nf-core/fastk/fastk/tests/tags.yml @@ -0,0 +1,2 @@ +fastk/fastk: + - "modules/nf-core/fastk/fastk/**" From c55ea9b2af561c0efdc4f6666835553827517813 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Mon, 9 Dec 2024 16:28:56 +0000 Subject: [PATCH 62/65] Revert modules.json to previous PR --- modules.json | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index 939f0866..5d6662aa 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", + "git_sha": "bfa8975eefb8df3e480a44ac9e594f23f52b2963", "installed_by": ["modules"] }, "bedtools/intersect": { @@ -27,7 +27,7 @@ }, "bedtools/map": { "branch": "master", - "git_sha": "3b248b84694d1939ac4bb33df84bf6233a34d668", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedtools/merge": { @@ -58,12 +58,12 @@ }, "cooler/cload": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cooler/zoomify": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { @@ -96,7 +96,7 @@ }, "minimap2/align": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, @@ -117,9 +117,8 @@ }, "mummer": { "branch": "master", - "git_sha": "9e51255c4f8ec69fb6ccf68593392835f14fecb8", - "installed_by": ["modules"], - "patch": "modules/nf-core/mummer/mummer.diff" + "git_sha": "a15872dde4c4affaac2dfee6c3c65fadab4719bd", + "installed_by": ["modules"] }, "paftools/sam2paf": { "branch": "master", From f4c988122b687f10a4ea0dac17b750c602c572c2 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 10 Dec 2024 12:16:09 +0000 Subject: [PATCH 63/65] Left in some merge headers --- nextflow_schema.json | 1 - subworkflows/local/selfcomp.nf | 13 ------------- workflows/treeval.nf | 9 +-------- 3 files changed, 1 insertion(+), 22 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index b6f8b669..af670eec 100755 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -42,7 +42,6 @@ "default": false, "fa_icon": "fas fa-check" }, - "steps": { "type": "string", "description": "A csv list of steps to skip", diff --git a/subworkflows/local/selfcomp.nf b/subworkflows/local/selfcomp.nf index 3cb6c32a..bfb10848 100755 --- a/subworkflows/local/selfcomp.nf +++ b/subworkflows/local/selfcomp.nf @@ -68,30 +68,17 @@ workflow SELFCOMP { // THIS LEAVES US WITH n=( REFERENCE + QUERY) IF GENOME.SIZE() < 1GB // OR n=((REFERENCE / 1E9) * (REFENCE / 1E9)) IF GENOME.SIZE() > 1GB // -<<<<<<< HEAD SEQKIT_SPLIT.out.fasta .map{meta, query -> query } .collect() // Collect any output from SEQKIT_SPLIT .map {it -> -======= - CHUNKFASTA.out.fasta - .map{ meta, query -> - query - } - .collect() // Collect any output from CHUNKFASTA - .map { it -> ->>>>>>> main tuple( [ len: it.size() ], // Calc length of list it ) } -<<<<<<< HEAD .set {len_ch} // tap out to preserve length of SEQKIT_SPLIT list -======= - .set { len_ch } // tap out to preserve length of CHUNKFASTA list ->>>>>>> main len_ch // tap swapped with set as tap stops pipeline completion .map { meta, files -> diff --git a/workflows/treeval.nf b/workflows/treeval.nf index 7f31c381..ab7b85db 100755 --- a/workflows/treeval.nf +++ b/workflows/treeval.nf @@ -181,7 +181,6 @@ workflow TREEVAL { // SUBWORKFLOW: Takes reference, the directory of syntenic genomes and order/clade of sequence // and generated a file of syntenic blocks. // -<<<<<<< HEAD if ( !exclude_workflow_steps.contains("synteny")) { YAML_INPUT.out.synteny_paths.view {"SYNTENY_MAIN: $it"} SYNTENY ( @@ -190,13 +189,7 @@ workflow TREEVAL { ) ch_versions = ch_versions.mix( SYNTENY.out.versions ) } -======= - SYNTENY ( - YAML_INPUT.out.reference_ch, - YAML_INPUT.out.synteny_path - ) - ch_versions = ch_versions.mix( SYNTENY.out.versions ) ->>>>>>> main + // // SUBWORKFLOW: Takes reference, pacbio reads From f281eb127a8c2578d4da18a7f49af4a4ae0c7c8e Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 10 Dec 2024 12:18:05 +0000 Subject: [PATCH 64/65] Merge conflict and config addition --- CHANGELOG.md | 10 ---------- nextflow.config | 3 ++- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47d36084..dd0869b0 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -118,16 +118,6 @@ This builds on the initial release by adding subworkflows which generate kmer ba - Fix a bug in build_alignment_blocks.py to avoid indexing errors happening in large genomes. - Change output BEDGRAPH from EXTRACT_TELO module. -<<<<<<< HEAD -#### Hot Fix 1 - -- Generate CRAM CSV fix to allow for multi-readgroup cram files -- Removing KMER_READCOV -- tmp directory was being used -- Output file adjustment (names and location) - -======= ->>>>>>> main ### Parameters | Old Parameter | New Parameter | diff --git a/nextflow.config b/nextflow.config index f9d4c973..2f1bcd14 100755 --- a/nextflow.config +++ b/nextflow.config @@ -27,6 +27,7 @@ params { show_hidden_params = false schema_ignore_params = 'genomes' binfile = false + steps = 'ALL' // Config options custom_config_version = 'master' @@ -254,4 +255,4 @@ def round_up ( decimal_places, file, multiplier ){ } else { return dived * multiplier } -} \ No newline at end of file +} From c10a9ab2c3f34226df75cd6fb1eb82ba9348e418 Mon Sep 17 00:00:00 2001 From: DLBPointon Date: Tue, 10 Dec 2024 12:26:58 +0000 Subject: [PATCH 65/65] Why did the container revert? --- modules/local/generate_cram_csv.nf | 9 ++++++++- modules/local/graphoverallcoverage.nf | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/local/generate_cram_csv.nf b/modules/local/generate_cram_csv.nf index ad90eaf5..2bccab9d 100755 --- a/modules/local/generate_cram_csv.nf +++ b/modules/local/generate_cram_csv.nf @@ -2,7 +2,14 @@ process GENERATE_CRAM_CSV { tag "${meta.id}" label 'process_tiny' - container 'quay.io/sanger-tol/cramfilter_bwamem2_minimap2_samtools_perl:0.001-c1' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1a6fe65bd6674daba65066aa796ed8f5e8b4687b:688e175eb0db54de17822ba7810cc9e20fa06dd5-0' : + 'biocontainers/mulled-v2-1a6fe65bd6674daba65066aa796ed8f5e8b4687b:688e175eb0db54de17822ba7810cc9e20fa06dd5-0' }" + + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GENERATE_CRAM_CSV module does not support Conda. Please use Docker / Singularity instead." + } input: tuple val(meta), path(crampath) diff --git a/modules/local/graphoverallcoverage.nf b/modules/local/graphoverallcoverage.nf index b8cc8777..572e793d 100755 --- a/modules/local/graphoverallcoverage.nf +++ b/modules/local/graphoverallcoverage.nf @@ -2,7 +2,14 @@ process GRAPHOVERALLCOVERAGE { tag "$meta.id" label "process_single" - container 'quay.io/sanger-tol/cramfilter_bwamem2_minimap2_samtools_perl:0.001-c1' + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1a6fe65bd6674daba65066aa796ed8f5e8b4687b:688e175eb0db54de17822ba7810cc9e20fa06dd5-0' : + 'biocontainers/mulled-v2-1a6fe65bd6674daba65066aa796ed8f5e8b4687b:688e175eb0db54de17822ba7810cc9e20fa06dd5-0' }" + + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GRAPHOVERALLCOVERAGE module does not support Conda. Please use Docker / Singularity instead." + } input: tuple val(meta), path(bed)