diff --git a/modules/nf-core/kalign/align/environment.yml b/modules/nf-core/kalign/align/environment.yml index 88aff8afcdd..93563eaeb56 100644 --- a/modules/nf-core/kalign/align/environment.yml +++ b/modules/nf-core/kalign/align/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::kalign3=3.3.5 + - bioconda::kalign3=3.4.0 + - conda-forge::pigz=2.8 diff --git a/modules/nf-core/kalign/align/main.nf b/modules/nf-core/kalign/align/main.nf index 6eed8162da3..e1601e15baa 100644 --- a/modules/nf-core/kalign/align/main.nf +++ b/modules/nf-core/kalign/align/main.nf @@ -4,15 +4,16 @@ process KALIGN_ALIGN { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/kalign3:3.3.5--hdbdd923_0': - 'biocontainers/kalign3:3.3.5--hdbdd923_0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-5cd0277547c6b33133225c8ce14c0cf2a4396ea2:0a70b6d89a3e06fbdc4a735461e8b98ff32ee5de-0': + 'biocontainers/mulled-v2-5cd0277547c6b33133225c8ce14c0cf2a4396ea2:0a70b6d89a3e06fbdc4a735461e8b98ff32ee5de-0' }" input: tuple val(meta), path(fasta) + val(compress) output: - tuple val(meta), path("*.aln"), emit: alignment - path "versions.yml" , emit: versions + tuple val(meta), path("*.aln{.gz,}"), emit: alignment + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,15 +21,17 @@ process KALIGN_ALIGN { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def write_output = compress ? ">(pigz -cp ${task.cpus} > ${prefix}.aln.gz)" : "${prefix}.aln" """ + unpigz -cdf $fasta | \\ kalign \\ $args \\ - -i $fasta \\ - -o ${prefix}.aln + -o ${write_output} cat <<-END_VERSIONS > versions.yml "${task.process}": - kalign : \$(echo \$(kalign -v) | sed 's/kalign //g' ) + kalign: \$(echo \$(kalign -v) | sed 's/kalign //g' ) + pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz\\w*//' )) END_VERSIONS """ @@ -36,11 +39,12 @@ process KALIGN_ALIGN { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.aln + touch ${prefix}.aln${compress ? '.gz' : ''} cat <<-END_VERSIONS > versions.yml "${task.process}": kalign : \$(echo \$(kalign -v) | sed 's/kalign //g' ) + pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz\\w*//' )) END_VERSIONS """ } diff --git a/modules/nf-core/kalign/align/meta.yml b/modules/nf-core/kalign/align/meta.yml index 58e7d868013..187f6bc3fae 100644 --- a/modules/nf-core/kalign/align/meta.yml +++ b/modules/nf-core/kalign/align/meta.yml @@ -20,8 +20,11 @@ input: e.g. `[ id:'test']` - fasta: type: file - description: Input sequences in FASTA format - pattern: "*.{fa,fasta}" + description: Input sequences in FASTA format. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - compress: + type: boolean + description: Flag representing whether the output MSA should be compressed. Set to true to enable/false to disable compression. Compression is done using pigz, and is multithreaded. output: - meta: type: map @@ -30,8 +33,8 @@ output: e.g. `[ id:'test']` - alignment: type: file - description: Alignment file. - pattern: "*.{aln}" + description: Alignment file. May be gzipped or uncompressed, depending on if `compress` is set to `true` or `false`. + pattern: "*.{aln}{.gz,}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/kalign/align/tests/main.nf.test b/modules/nf-core/kalign/align/tests/main.nf.test index f2b83a2b651..d90ad9b094f 100644 --- a/modules/nf-core/kalign/align/tests/main.nf.test +++ b/modules/nf-core/kalign/align/tests/main.nf.test @@ -10,7 +10,7 @@ nextflow_process { tag "kalign" tag "kalign/align" - test("sarscov2 - fasta") { + test("sarscov2 - fasta - uncompressed") { when { process { @@ -18,6 +18,7 @@ nextflow_process { input[0] = [ [ id:'test' ], // meta map file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true) ] + input[1] = false """ } } @@ -25,9 +26,29 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.alignment).match("alignment")}, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - uncompressed")}, ) } } -} + + test("sarscov2 - fasta - compressed") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['contigs_fasta'], checkIfExists: true) + ] + input[1] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - compressed")}, + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/kalign/align/tests/main.nf.test.snap b/modules/nf-core/kalign/align/tests/main.nf.test.snap index f64c3d9ea3e..da6fc94c52e 100644 --- a/modules/nf-core/kalign/align/tests/main.nf.test.snap +++ b/modules/nf-core/kalign/align/tests/main.nf.test.snap @@ -1,23 +1,60 @@ { - "versions": { + "SARS-CoV-2 scaffolds fasta - uncompressed": { "content": [ - [ - "versions.yml:md5,f2fc7e35f94af98fdd295da471a7e14b" - ] + { + "0": [ + [ + { + "id": "test" + }, + "test.aln:md5,c165ecf48fb89862cc2a991cc3cadb2d" + ] + ], + "1": [ + "versions.yml:md5,0764ff5c30fd8befd86baa9026493ffe" + ], + "alignment": [ + [ + { + "id": "test" + }, + "test.aln:md5,c165ecf48fb89862cc2a991cc3cadb2d" + ] + ], + "versions": [ + "versions.yml:md5,0764ff5c30fd8befd86baa9026493ffe" + ] + } ], - "timestamp": "2023-11-28T12:51:11.855909919" + "timestamp": "2024-03-22T16:42:01.934768" }, - "alignment": { + "SARS-CoV-2 scaffolds fasta - compressed": { "content": [ - [ - [ - { - "id": "test" - }, - "test.aln:md5,5d12e1503a8efa6b441e02922e6f2b22" + { + "0": [ + [ + { + "id": "test" + }, + "test.aln.gz:md5,c165ecf48fb89862cc2a991cc3cadb2d" + ] + ], + "1": [ + "versions.yml:md5,0764ff5c30fd8befd86baa9026493ffe" + ], + "alignment": [ + [ + { + "id": "test" + }, + "test.aln.gz:md5,c165ecf48fb89862cc2a991cc3cadb2d" + ] + ], + "versions": [ + "versions.yml:md5,0764ff5c30fd8befd86baa9026493ffe" ] - ] + } ], - "timestamp": "2023-11-28T15:12:13.600574353" + "timestamp": "2024-03-22T16:42:07.734293" } } \ No newline at end of file