Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
58 changes: 58 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,58 @@
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"
181 changes: 181 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,181 @@
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 - 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