nf-core_modules/software/last/lastal/main.nf
Charles Plessy 45f2f1ee5f
Input a triple (id, fasta, params) to last/lastal (#563)
The `last/lastal` submodule takes query sequences to align to a target
index, and optionally takes one set of alignment parameters (including a
score matrix) computed by the `last/train` module for each of the
sequences.

In the previous implementation the sequences and the alignment
parameters were provided in different channels, causing them to be
sometimes desynchronised.

In the patched implementation, `last/lastal` takes a 3-tuple as
input to ensure synchronicity.  To produce this tuple in a pipeline,
one can use the `join` command as in the following example.

     LAST_TRAIN  ( query,
                   target )
     LAST_LASTAL ( query.join(LAST_TRAIN.out.param_file),
                   target )

In case no parameter file is computed one can pass a dummy file
to the module as follows:

     LAST_LASTAL ( query.map { row -> [ row[0], row[1], [] ] },
                   target )
2021-07-06 09:35:04 +01:00

47 lines
1.6 KiB
Text

// Import generic module functions
include { initOptions; saveFiles; getSoftwareName } from './functions'
params.options = [:]
options = initOptions(params.options)
process LAST_LASTAL {
tag "$meta.id"
label 'process_high'
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=1238" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/last:1238--h2e03b76_0"
} else {
container "quay.io/biocontainers/last:1238--h2e03b76_0"
}
input:
tuple val(meta), path(fastx), path (param_file)
path index
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}"
def trained_params = param_file ? "-p ${param_file}" : ''
"""
INDEX_NAME=\$(basename \$(ls $index/*.des) .des)
lastal \\
$trained_params \\
$options.args \\
-P $task.cpus \\
${index}/\$INDEX_NAME \\
$fastx \\
| gzip --no-name > ${prefix}.\$INDEX_NAME.maf.gz
# gzip needs --no-name otherwise it puts a timestamp in the file,
# which makes its checksum non-reproducible.
echo \$(lastal --version 2>&1) | sed 's/lastal //' > ${software}.version.txt
"""
}