Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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/table/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
49 changes: 49 additions & 0 deletions modules/nf-core/vembrane/table/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.

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

Copy link
Author

Choose a reason for hiding this comment

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

nextflow lint -format -sort-declarations -spaces 4 -harshil-alignment modules/nf-core/vembrane/table/main.nf
Nextflow linting complete!
✅ 1 file had no errors (1 formatted)

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@


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

Copy link
Author

Choose a reason for hiding this comment

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

fixed in 2dae392

process VEMBRANE_TABLE {
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("*.tsv"), emit: table
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}"
"""
vembrane table \\
$args \\
--output ${prefix}.tsv \\
'$expression' \\
$vcf

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

stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.tsv

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/table/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_table"
description: Creates tabular (TSV) files from VCF/BCF data with flexible Python expressions
keywords:
- vcf
- bcf
- table
- genomics
- variant
- annotation
tools:
- "vembrane":
description: "Filter VCF/BCF files with Python expressions"
homepage: "https://vembrane.github.io/"
documentation: "https://github.com/vembrane/vembrane/blob/main/docs/table.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 extract tabular data from
pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}"
ontologies:
- edam: http://edamontology.org/format_3016 # VCF
- expression:
type: string
description: A comma-separated tuple of expressions that define the table column contents

output:
table:
- - meta:
type: map
description: |
Groovy Map containing sample information
e.g. `[ id:'sample1', single_end:false ]`
- "*.tsv":
type: file
description: TSV file containing tabular data from VCF/BCF
pattern: "*.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
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"
135 changes: 135 additions & 0 deletions modules/nf-core/vembrane/table/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@

nextflow_process {

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

tag "modules"
tag "modules_nfcore"
tag "vembrane"
tag "vembrane/table"

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

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

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

test("homo_sapiens - [bcf.gz] - tsv") {

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

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

test("homo_sapiens - [vcf] - csv - custom_separator") {

config "./nextflow.config"

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

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

test("homo_sapiens - [vcf] - tsv - custom_header") {

config "./nextflow.config"

when {
params {
vembrane_args = '--header "Chromosome,Position,Variant_ID,Quality"'
}
process {
"""
input[0] = [
[ id:'test', single_end:false ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'CHROM, POS, ID, QUAL'
"""
}
}

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

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

options "-stub"

when {
process {
"""
input[0] = [
[ id:'test', single_end:false ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf', checkIfExists: true)
]
input[1] = 'CHROM, POS, REF, ALT, 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.

Can we get the version displayed explicitely once? :)

Suggested change
{ assert snapshot(process.out).match() }
{ assert snapshot(
process.out,
path(process.out.versions[0]).yaml
).match() }

Copy link
Author

Choose a reason for hiding this comment

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

fixed in 3dfa74b

Copy link
Author

@mkatsanto mkatsanto Oct 29, 2025

Choose a reason for hiding this comment

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

this fix causes a syntax error
will update with { assert snapshot(process.out.versions).match("versions") }
update: snapshot was obsolete reimplementing

Copy link
Contributor

Choose a reason for hiding this comment

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

huh this should not lead to an error

Copy link
Author

Choose a reason for hiding this comment

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

snapshot was obsolete reimplementing

)
}
}

}
Loading
Loading