Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions modules/nf-core/vembrane/sort/environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
dependencies:
- bioconda::vembrane=2.4.0
54 changes: 54 additions & 0 deletions modules/nf-core/vembrane/sort/main.nf
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you run

nextflow lint -format -sort-declarations -spaces 4 -harshil-alignment modules/nf-core/vembrane/sort/main.nf

please? :)

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
process VEMBRANE_SORT {
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/vembrane:2.4.0--pyhdfd78af_0'
: 'biocontainers/vembrane:2.4.0--pyhdfd78af_0'}"

input:
tuple val(meta), path(vcf)
val expression

output:
tuple val(meta), path("*.vcf*"), emit: vcf
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}"
def suffix = args.contains('--output-fmt vcf.gz') ? 'vcf.gz' :
args.contains('--output-fmt bcf') ? 'bcf' :
args.contains('--output-fmt bcf.gz') ? 'bcf.gz' : 'vcf'
"""
vembrane sort \\
${args} \\
--output ${prefix}.${suffix} \\
'${expression}' \\
${vcf}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
vembrane: \$(vembrane --version 2>&1 | head -n1 | sed 's/vembrane //')
END_VERSIONS
"""

stub:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def suffix = args.contains('--output-fmt vcf.gz') ? 'vcf.gz' :
args.contains('--output-fmt bcf') ? 'bcf' :
args.contains('--output-fmt bcf.gz') ? 'bcf.gz' : 'vcf'
"""
touch ${prefix}.${suffix}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
vembrane: \$(vembrane --version 2>&1 | head -n1 | sed 's/vembrane //')
END_VERSIONS
"""
}
63 changes: 63 additions & 0 deletions modules/nf-core/vembrane/sort/meta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: "vembrane_sort"
description: Sort VCF/BCF files by custom Python expressions for variant prioritization
keywords:
- vcf
- bcf
- sort
- genomics
- variant
- prioritization
tools:
- "vembrane":
description: "Filter VCF/BCF files with Python expressions"
homepage: "https://vembrane.github.io/"
documentation: "https://github.com/vembrane/vembrane/blob/main/docs/sort.md"
tool_dev_url: "https://github.com/vembrane/vembrane"
doi: "10.1093/bioinformatics/btac810"
licence: ["MIT"]
identifier: biotools:vembrane
args_id: "$args"

input:
- - meta:
type: map
description: |
Groovy Map containing sample information
e.g. `[ id:'sample1', single_end:false ]`
- vcf:
type: file
description: VCF/BCF file to sort
pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}"
ontologies:
- edam: http://edamontology.org/format_3016 # VCF
- expression:
type: string
description: Python expression (or tuple of expressions) returning orderable values to sort by

output:
vcf:
- - meta:
type: map
description: |
Groovy Map containing sample information
e.g. `[ id:'sample1', single_end:false ]`
- "*.vcf*":
type: file
description: Sorted VCF file (can be compressed)
pattern: "*.{vcf,vcf.gz}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pattern: "*.{vcf,vcf.gz}"
pattern: "*.{vcf,bcf}"

ontologies:
- edam: http://edamontology.org/format_3016 # VCF
versions:
- versions.yml:
type: file
description: File containing software versions
pattern: "versions.yml"
ontologies:
- edam: http://edamontology.org/format_3750 # YAML
authors:
- "@mkatsanto"
- "@trangdo-hsc"
maintainers:
- "@mkatsanto"
- "@trangdo-hsc"
209 changes: 209 additions & 0 deletions modules/nf-core/vembrane/sort/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
nextflow_process {

name "Test Process VEMBRANE_SORT"
script "../main.nf"
process "VEMBRANE_SORT"

tag "modules"
tag "modules_nfcore"
tag "vembrane"
tag "vembrane/sort"

test("homo_sapiens - [vcf] - vcf - quality_sort") {

when {
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'QUAL'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}

test("homo_sapiens - [vcf] - vcf - position_sort") {

config "./nextflow.config"

when {
params {
vembrane_args = '--output-fmt vcf'
}
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'CHROM, POS'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}

test("homo_sapiens - [vcf] - vcf - descending_sort") {

config "./nextflow.config"

when {
params {
vembrane_args = '--preserve-annotation-order'
}
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'desc(QUAL)'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}


test("homo_sapiens - [vcf] - vcf - compressed_output") {

config "./nextflow.config"

when {
params {
vembrane_args = '--output-fmt vcf.gz'
}
process {
"""
input[0] = [
[ id:'test_gz' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'QUAL'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
test("homo_sapiens - [vcf] - vcf - compressed_output") {
config "./nextflow.config"
when {
params {
vembrane_args = '--output-fmt vcf.gz'
}
process {
"""
input[0] = [
[ id:'test_gz' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'QUAL'
"""
}
}
then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}


test("homo_sapiens - [vcf] - vcf - depth_sort") {

when {
process {
"""
input[0] = [
[ id:'test_depth' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'INFO["DP"] if "DP" in INFO else 0'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}

test("homo_sapiens - [vcf] - vcf - numeric_expression") {

when {
process {
"""
input[0] = [
[ id:'test_numeric' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'POS % 1000'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}

test("homo_sapiens - [vcf] - vcf - multi_field_sort") {

when {
process {
"""
input[0] = [
[ id:'test_multi' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = '(CHROM, POS, QUAL)'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match() }
)
}
}

test("homo_sapiens - [vcf] - vcf - stub") {

options "-stub"

when {
process {
"""
input[0] = [
[ id:'test_stub' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'QUAL'
"""
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(
process.out,
path(process.out.versions[0]).yaml
).match() }
)
}
}

}
Loading
Loading