nf-core_modules/software/last/mafswap/main.nf
Charles Plessy e75f88c68a
New module last/mafswap to reorder sequences in alignments (#500)
* New module last/mafswap to reorder sequences in alignments

The `maf-swap` tool distributed with [LAST](https://gitlab.com/mcfrith/last)
reorders sequences in alignment files in Multiple Alignment Format.
When run without command-line arguments, it will swap the target and the
query sequences.  This is useful when turning a many-to-many alignment
into a many-to-one and then a one-to-one alignment in conjunction with
the `last-split` command (split, swap, split and swap again).

The LAST aligner outputs MAF files, but other tools also use this
format.  As MAF files can be very large (up to hundreds of gigabytes),
the module expects its input to be compressed with gzip and will
compress its output.

This new module is part of the work described in Issue #464.  During
this development, we fix the version of LAST to 1219 to ensure
consistency (hence ignore lint's version warning).

* Update MD5 sum.

Actually, 7029066c27ac6f5ef18d660d5741979a is the MD5 sum of
an empty file compressed with `gzip --no-name`…  This happened
because I forgot to update the config file after correcting the
module… sorry !

* Apply suggestions from code review

Co-authored-by: Harshil Patel <drpatelh@users.noreply.github.com>

* Change name as suggested in pull request.

Co-authored-by: Harshil Patel <drpatelh@users.noreply.github.com>
2021-05-19 08:59:23 +01:00

37 lines
1.3 KiB
Text

// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process LAST_MAFSWAP {
tag "$meta.id"
label 'process_low'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
conda (params.enable_conda ? "bioconda::last=1219" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/last:1219--h2e03b76_0"
} else {
container "quay.io/biocontainers/last:1219--h2e03b76_0"
}
input:
tuple val(meta), path(maf)
output:
tuple val(meta), path("*.maf.gz"), emit: maf
path "*.version.txt" , emit: version
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
"""
zcat $maf | maf-swap $options.args | gzip --no-name > ${prefix}.swapped.maf.gz
# maf-swap has no --version option but lastdb, part of the same package, has.
echo \$(lastdb --version 2>&1) | sed 's/lastdb //' > ${software}.version.txt
"""
}