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/filter/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"
65 changes: 65 additions & 0 deletions modules/nf-core/vembrane/filter/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 on this :)

Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
process VEMBRANE_FILTER {
tag "${meta.id}"
label 'process_single'

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,bcf,bcf.gz}"), emit: filtered_variant
Copy link
Contributor

Choose a reason for hiding this comment

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

I think I would just call the output channel vcf as well (is more in line with the other modules)

Suggested change
tuple val(meta), path("*.{vcf,bcf,bcf.gz}"), emit: filtered_variant
tuple val(meta), path("*.{vcf,bcf,bcf.gz}"), 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}"
extension = args.contains("--output-fmt vcf") || args.contains("-Ovcf") ? "vcf" :
args.contains("--output-fmt bcf") || args.contains("-Obcf") ? "bcf" :
args.contains("--output-fmt uncompressed-bcf") || args.contains("-Ouncompressed-bcf") ? "bcf.gz" :
"vcf"

if ("${vcf}" == "${prefix}.${extension}") {
error("Input and output names are the same, use \"task.ext.prefix\" in module configuration to disambiguate!")
}

Copy link
Contributor

Choose a reason for hiding this comment

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

if ("${rds}" == "${prefix}.rds") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"

something in that direction :)

"""
vembrane filter \\
${args} \\
${expression} \\
-o ${prefix}.${extension} \\
${vcf}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
vembrane: \$(vembrane --version | sed '1!d;s/.* //')
END_VERSIONS
"""

stub:
def prefix = task.ext.prefix ?: "${meta.id}"
extension = args.contains("--output-fmt vcf") || args.contains("-Ovcf") ? "vcf" :
args.contains("--output-fmt bcf") || args.contains("-Obcf") ? "bcf" :
args.contains("--output-fmt uncompressed-bcf") || args.contains("-Ouncompressed-bcf") ? "bcf.gz" :
"vcf"

if ("${vcf}" == "${prefix}.${extension}") {
error("Input and output names are the same, use \"task.ext.prefix\" in module configuration to disambiguate!")
}

"""
touch ${prefix}.${extension}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
vembrane: \$(vembrane --version | sed '1!d;s/.* //')
END_VERSIONS
"""
}
64 changes: 64 additions & 0 deletions modules/nf-core/vembrane/filter/meta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: "vembrane_filter"
description: Filter VCF files with vembrane
keywords:
- filter
- vcf
- bcf
- genomics
- variant
- annotation
tools:
- "vembrane":
description: "Filter VCF/BCF files with Python expressions."
homepage: "https://github.com/vembrane/vembrane/tree/main"
documentation: "https://github.com/vembrane/vembrane/blob/main/docs/filter.md"
tool_dev_url: "https://github.com/vembrane/vembrane.git"
doi: "10.1093/bioinformatics/btac810"
licence: ["MIT"]
identifier: biotools:vembrane/filter

input:
- - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test' ]
- vcf:
type: file
description: |
Path to the VCF/BCF file to be filtered.
e.g. 'file.vcf', 'file.vcf.gz', 'file.bcf', 'file.bcf.gz'
pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}"
ontologies: []
- expression:
type: string
description: |
The filter expression can be any valid python expression that evaluates to a value of type bool.
e.g. 'ANN["SYMBOL"] == "CDH2"'
ontologies: []

output:
filtered_variant:
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
filtered_variant:
vcf:

- - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test' ]
- "*.{vcf,bcf,bcf.gz}":
type: file
description: Filtered VCF output file
pattern: "*.{vcf,bcf,bcf.gz}"
ontologies: []
versions:
- versions.yml:
type: file
description: File containing software versions
pattern: "versions.yml"
ontologies:
- edam: http://edamontology.org/format_3750 # YAML
authors:
- "@trangdo-hsc"
- "@mkatsanto"
maintainers:
- "@trangdo-hsc"
204 changes: 204 additions & 0 deletions modules/nf-core/vembrane/filter/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
nextflow_process {

name "Test Process VEMBRANE"
script "../main.nf"
process "VEMBRANE_FILTER"

tag "modules"
tag "modules_nfcore"
tag "vembrane"
tag "vembrane/filter"

test("homo sapiens - vcf") {

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 >= 30'"
"""
}
}

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

}

test("homo sapiens - vcf.gz") {
when {
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.vcf.gz', checkIfExists: true),
]
input[1] = "'QUAL >= 30'"
"""
}
}

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

}

test("homo sapiens - bcf") {
when {
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.bcf', checkIfExists: true),
]
input[1] = "'QUAL >= 30'"
"""
}
}

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

}

test("homo sapiens - bcf.gz") {
when {
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bcf.gz', checkIfExists: true),
]
input[1] = "'QUAL >= 30'"
"""
}
}

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

}

test("homo sapiens - vcf - stub") {

options "-stub"

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 >= 30'"
"""
}
}

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

}

test("homo sapiens - vcf.gz - stub") {

options "-stub"

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

then {
assertAll(
{ assert process.success },
{ assert snapshot(
process.out
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
process.out
process.out,
path(process.out.versions[0]).yaml

).match() }
)
}

}

test("homo sapiens - bcf - stub") {

options "-stub"

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

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

}

test("homo sapiens - bcf.gz - stub") {

options "-stub"

when {
process {
"""
input[0] = [
[ id:'test' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bcf.gz', checkIfExists: true),
]
input[1] = "'QUAL >= 30'"
"""
}
}

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

}
}
Loading
Loading