2021-05-25 21:10:48 +00:00
|
|
|
// Import generic module functions
|
2021-09-27 08:41:24 +00:00
|
|
|
include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions'
|
2021-05-25 21:10:48 +00:00
|
|
|
|
|
|
|
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']) }
|
|
|
|
|
2021-07-28 08:10:44 +00:00
|
|
|
conda (params.enable_conda ? 'bioconda::last=1250' : null)
|
2021-05-25 21:10:48 +00:00
|
|
|
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
|
2021-07-28 08:10:44 +00:00
|
|
|
container "https://depot.galaxyproject.org/singularity/last:1250--h2e03b76_0"
|
2021-05-25 21:10:48 +00:00
|
|
|
} else {
|
2021-07-28 08:10:44 +00:00
|
|
|
container "quay.io/biocontainers/last:1250--h2e03b76_0"
|
2021-05-25 21:10:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
input:
|
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 08:35:04 +00:00
|
|
|
tuple val(meta), path(fastx), path (param_file)
|
2021-05-25 21:10:48 +00:00
|
|
|
path index
|
|
|
|
|
|
|
|
output:
|
|
|
|
tuple val(meta), path("*.maf.gz"), emit: maf
|
2021-10-01 13:04:56 +00:00
|
|
|
path "versions.yml" , emit: versions
|
2021-05-25 21:10:48 +00:00
|
|
|
|
|
|
|
script:
|
|
|
|
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
|
|
|
|
def trained_params = param_file ? "-p ${param_file}" : ''
|
|
|
|
"""
|
2021-06-14 11:27:27 +00:00
|
|
|
INDEX_NAME=\$(basename \$(ls $index/*.des) .des)
|
2021-05-25 21:10:48 +00:00
|
|
|
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.
|
|
|
|
|
2021-09-27 08:41:24 +00:00
|
|
|
cat <<-END_VERSIONS > versions.yml
|
|
|
|
${getProcessName(task.process)}:
|
|
|
|
${getSoftwareName(task.process)}: \$(lastal --version 2>&1 | sed 's/lastal //')
|
|
|
|
END_VERSIONS
|
2021-05-25 21:10:48 +00:00
|
|
|
"""
|
|
|
|
}
|