From 77b6bd90a00f3d946a03dbdc7deda1140fad30a4 Mon Sep 17 00:00:00 2001
From: piplus2
Date: Fri, 17 Jul 2026 19:14:44 +0200
Subject: [PATCH 1/3] sync with master
---
modules/nf-core/suppa/psiperevent/main.nf | 43 ++
modules/nf-core/suppa/psiperevent/meta.yml | 81 +++
.../suppa/psiperevent/tests/main.nf.test | 496 ++++++++++++++++++
.../suppa/psiperevent/tests/main.nf.test.snap | 262 +++++++++
4 files changed, 882 insertions(+)
create mode 100644 modules/nf-core/suppa/psiperevent/main.nf
create mode 100644 modules/nf-core/suppa/psiperevent/meta.yml
create mode 100644 modules/nf-core/suppa/psiperevent/tests/main.nf.test
create mode 100644 modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
diff --git a/modules/nf-core/suppa/psiperevent/main.nf b/modules/nf-core/suppa/psiperevent/main.nf
new file mode 100644
index 000000000000..82b27fdc7f54
--- /dev/null
+++ b/modules/nf-core/suppa/psiperevent/main.nf
@@ -0,0 +1,43 @@
+process SUPPA_PSIPEREVENT {
+ tag "${meta.id}"
+ label 'process_medium'
+
+ conda "${moduleDir}/environment.yml"
+ container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ?
+ 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/d8/d887a6a05dec2a1f64fdff0eac40581f9a1ec30301b2c267bde7f564b0f14270/data' :
+ 'community.wave.seqera.io/library/suppa:2.4--2612fcca3884f6bc' }"
+
+ input:
+ tuple val(meta), path(expression)
+ tuple val(meta2), path(ioe)
+ val total_filter
+
+ output:
+ tuple val(meta), path("*.psi"), emit: psi
+ tuple val("${task.process}"), val('suppa'), eval("suppa.py -v | sed '1!d;s/.* //'"), topic: versions, emit: versions_suppa
+
+ when:
+ task.ext.when == null || task.ext.when
+
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ suppa.py \\
+ psiPerEvent \\
+ --ioe-file ${ioe} \\
+ --expression-file ${expression} \\
+ --total-filter ${total_filter} \\
+ --output-file ${prefix} \\
+ ${args}
+ """
+
+ stub:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ echo ${args}
+
+ touch ${prefix}.psi
+ """
+}
diff --git a/modules/nf-core/suppa/psiperevent/meta.yml b/modules/nf-core/suppa/psiperevent/meta.yml
new file mode 100644
index 000000000000..51b38954a027
--- /dev/null
+++ b/modules/nf-core/suppa/psiperevent/meta.yml
@@ -0,0 +1,81 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
+name: "suppa_psiperevent"
+description: "Calculate PSI values for alternative splicing events using SUPPA"
+keywords:
+ - alternative splicing
+ - suppa
+ - psi
+ - genomics
+tools:
+ - "suppa":
+ description: "Fast, accurate, and uncertainty-aware differential splicing analysis across multiple conditions."
+ homepage: "https://github.com/comprna/SUPPA"
+ documentation: "https://github.com/comprna/SUPPA"
+ tool_dev_url: "https://github.com/comprna/SUPPA"
+ doi: "10.1186/s13059-018-1417-1"
+ licence: ["MIT"]
+ identifier: biotools:suppa
+
+input:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. `[ id:'sample1' ]`
+ - expression:
+ type: file
+ description: Expression matrix file in TPM units
+ pattern: "*.txt"
+ ontologies: []
+ - - meta2:
+ type: map
+ description: |
+ Groovy Map containing genome information
+ e.g. `[ id:'genome1' ]`
+ - expression:
+ type: file
+ description: Events file in ioe format
+ pattern: "*.ioe"
+ ontologies: []
+ - total_filter:
+ type: integer
+ description: Minimum total expression of the transcripts involved in the event to be considered for PSI calculation (default = 0)
+
+output:
+ psi:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. `[ id:'sample1' ]`
+ - "*.psi":
+ type: file
+ description: PSI values file
+ pattern: "*.psi"
+ versions_suppa:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - suppa:
+ type: string
+ description: The name of the tool
+ - "suppa.py -v | sed '1!d;s/.* //'":
+ type: eval
+ description: The expression to obtain the version of the tool
+
+topics:
+ versions:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - suppa:
+ type: string
+ description: The name of the tool
+ - suppa.py -v | sed '1!d;s/.* //':
+ type: eval
+ description: The expression to obtain the version of the tool
+authors:
+ - "@lathikaa"
+ - "@piplus2"
+maintainers:
+ - "@piplus2"
diff --git a/modules/nf-core/suppa/psiperevent/tests/main.nf.test b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
new file mode 100644
index 000000000000..01b5cdb8f341
--- /dev/null
+++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
@@ -0,0 +1,496 @@
+// nf-core modules test suppa/psiperevent
+nextflow_process {
+
+ name "Test Process SUPPA_PSIPEREVENT"
+ script "../main.nf"
+ process "SUPPA_PSIPEREVENT"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "suppa"
+ tag "suppa/psiperevent"
+
+ test("human - skipping exon - ioe") {
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SE'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative splice site - ioe") {
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, events -> [ meta, events[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - mutually exclusive exons - ioe") {
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'MX'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - retained intron - ioe") {
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'RI'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative first/last exons - ioe") {
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ //
+ // Stub tests
+ //
+
+ test("human - skipping exon - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SE'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative splice site - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - mutually exclusive exons - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'MX'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - retained intron - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'RI'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative first/last exons - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
+ dummy_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap b/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
new file mode 100644
index 000000000000..a9ebbd0a0cdf
--- /dev/null
+++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
@@ -0,0 +1,262 @@
+{
+ "human - skipping exon - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,eebc549dee0797dd5bf62d65d1296dae"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:11.49923868",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - alternative splice site - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,04daef324165f4f77f872124844ff657"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:18.08789184",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - skipping exon - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:42.746984247",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - alternative splice site - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:47.787235776",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - alternative first/last exons - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:38:03.218646269",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - retained intron - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,85917088c83d53c6c578bfdee28539e6"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:31.198277918",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - mutually exclusive exons - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,9fb5a764439d9b907bf50944248bb8cd"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:24.726279232",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - alternative first/last exons - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,40a096c2d820965a912ec3907f94bb0c"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:37.802799201",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - mutually exclusive exons - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:52.843896425",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ },
+ "human - retained intron - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T16:37:57.956257608",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.3"
+ }
+ }
+}
\ No newline at end of file
From 494e674eaa82eedfaf4b386ec5dabaa376fabda5 Mon Sep 17 00:00:00 2001
From: piplus2
Date: Fri, 17 Jul 2026 20:05:09 +0200
Subject: [PATCH 2/3] fix meta and tags
---
.../nf-core/suppa/psiperevent/environment.yml | 7 +
modules/nf-core/suppa/psiperevent/meta.yml | 18 +-
.../suppa/psiperevent/tests/main.nf.test | 264 ++----------------
3 files changed, 35 insertions(+), 254 deletions(-)
create mode 100644 modules/nf-core/suppa/psiperevent/environment.yml
diff --git a/modules/nf-core/suppa/psiperevent/environment.yml b/modules/nf-core/suppa/psiperevent/environment.yml
new file mode 100644
index 000000000000..1fd8fd9825fd
--- /dev/null
+++ b/modules/nf-core/suppa/psiperevent/environment.yml
@@ -0,0 +1,7 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
+channels:
+ - bioconda
+ - conda-forge
+dependencies:
+ - bioconda::suppa=2.4
diff --git a/modules/nf-core/suppa/psiperevent/meta.yml b/modules/nf-core/suppa/psiperevent/meta.yml
index 51b38954a027..08efd64c35e2 100644
--- a/modules/nf-core/suppa/psiperevent/meta.yml
+++ b/modules/nf-core/suppa/psiperevent/meta.yml
@@ -1,4 +1,3 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: "suppa_psiperevent"
description: "Calculate PSI values for alternative splicing events using SUPPA"
keywords:
@@ -8,14 +7,15 @@ keywords:
- genomics
tools:
- "suppa":
- description: "Fast, accurate, and uncertainty-aware differential splicing analysis across multiple conditions."
+ description: "Fast, accurate, and uncertainty-aware differential splicing analysis
+ across multiple conditions."
homepage: "https://github.com/comprna/SUPPA"
documentation: "https://github.com/comprna/SUPPA"
tool_dev_url: "https://github.com/comprna/SUPPA"
doi: "10.1186/s13059-018-1417-1"
- licence: ["MIT"]
+ licence:
+ - "MIT"
identifier: biotools:suppa
-
input:
- - meta:
type: map
@@ -32,15 +32,15 @@ input:
description: |
Groovy Map containing genome information
e.g. `[ id:'genome1' ]`
- - expression:
+ - ioe:
type: file
description: Events file in ioe format
pattern: "*.ioe"
ontologies: []
- total_filter:
type: integer
- description: Minimum total expression of the transcripts involved in the event to be considered for PSI calculation (default = 0)
-
+ description: Minimum total expression of the transcripts involved in the
+ event to be considered for PSI calculation (default = 0)
output:
psi:
- - meta:
@@ -52,6 +52,7 @@ output:
type: file
description: PSI values file
pattern: "*.psi"
+ ontologies: []
versions_suppa:
- - ${task.process}:
type: string
@@ -62,7 +63,6 @@ output:
- "suppa.py -v | sed '1!d;s/.* //'":
type: eval
description: The expression to obtain the version of the tool
-
topics:
versions:
- - ${task.process}:
@@ -71,7 +71,7 @@ topics:
- suppa:
type: string
description: The name of the tool
- - suppa.py -v | sed '1!d;s/.* //':
+ - "suppa.py -v | sed '1!d;s/.* //'":
type: eval
description: The expression to obtain the version of the tool
authors:
diff --git a/modules/nf-core/suppa/psiperevent/tests/main.nf.test b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
index 01b5cdb8f341..05fd0eda2f38 100644
--- a/modules/nf-core/suppa/psiperevent/tests/main.nf.test
+++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
@@ -10,24 +10,24 @@ nextflow_process {
tag "suppa"
tag "suppa/psiperevent"
- test("human - skipping exon - ioe") {
-
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'SE'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SE'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
}
+ }
+ run("GENERATE_DUMMY_EXPRESSION") {
def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
dummy_expression.text = """
sample1
@@ -36,7 +36,10 @@ nextflow_process {
ENSE00003754925.1\t0.0
""".stripIndent().trim()
}
+ }
+
+ test("human - skipping exon - ioe") {
when {
process {
"""
@@ -58,32 +61,6 @@ nextflow_process {
}
test("human - alternative splice site - ioe") {
-
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'SS'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -105,32 +82,6 @@ nextflow_process {
}
test("human - mutually exclusive exons - ioe") {
-
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'MX'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -152,32 +103,6 @@ nextflow_process {
}
test("human - retained intron - ioe") {
-
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'RI'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -199,32 +124,6 @@ nextflow_process {
}
test("human - alternative first/last exons - ioe") {
-
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'FL'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -253,31 +152,6 @@ nextflow_process {
options "-stub"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'SE'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -302,31 +176,6 @@ nextflow_process {
options "-stub"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'SS'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -351,31 +200,6 @@ nextflow_process {
options "-stub"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'MX'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -400,31 +224,6 @@ nextflow_process {
options "-stub"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'RI'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
@@ -449,31 +248,6 @@ nextflow_process {
options "-stub"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- script "../../generateevents/main.nf"
- process {
- """
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'FL'
- input[4] = 'S'
- input[5] = []
- input[6] = []
- """
- }
- }
-
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
- sample1
- ENST00000625012.1\t10.5
- ENSE00003760353.1\t95.1
- ENSE00003754925.1\t0.0
- """.stripIndent().trim()
- }
-
when {
process {
"""
From 38e23b3a2f7db88be958b774848195d9ad6cfa04 Mon Sep 17 00:00:00 2001
From: piplus2
Date: Fri, 17 Jul 2026 21:04:18 +0200
Subject: [PATCH 3/3] fix test
---
.../suppa/psiperevent/tests/main.nf.test | 507 ++++++++++++++++--
.../suppa/psiperevent/tests/main.nf.test.snap | 158 +++++-
2 files changed, 597 insertions(+), 68 deletions(-)
diff --git a/modules/nf-core/suppa/psiperevent/tests/main.nf.test b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
index 05fd0eda2f38..94e76a5a124e 100644
--- a/modules/nf-core/suppa/psiperevent/tests/main.nf.test
+++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test
@@ -10,41 +10,85 @@ nextflow_process {
tag "suppa"
tag "suppa/psiperevent"
- setup {
- run("SUPPA_GENERATEEVENTS") {
- tag "suppa/generateevents"
- script "../../generateevents/main.nf"
+ test("human - skipping exon - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SE'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
process {
"""
- input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
- input[1] = 'ioe'
- input[2] = false
- input[3] = 'SE'
- input[4] = 'S'
- input[5] = []
- input[6] = []
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect{ meta, ioe -> [[ id: 'test_SE' ], ioe]}
+ input[2] = 0
"""
}
}
- run("GENERATE_DUMMY_EXPRESSION") {
- def dummy_expression = file("${outputDir}/dummy_expression_matrix.txt")
- dummy_expression.text = """
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative splice site A5 - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
sample1
ENST00000625012.1\t10.5
ENSE00003760353.1\t95.1
ENSE00003754925.1\t0.0
""".stripIndent().trim()
}
- }
-
- test("human - skipping exon - ioe") {
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_A5' ], ioe[0] ] }
input[2] = 0
"""
}
@@ -60,12 +104,38 @@ nextflow_process {
}
}
- test("human - alternative splice site - ioe") {
+ test("human - alternative splice site A3 - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, events -> [ meta, events[0] ] }
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_A3' ], ioe[1] ] }
input[2] = 0
"""
}
@@ -82,11 +152,37 @@ nextflow_process {
}
test("human - mutually exclusive exons - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'MX'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_MX' ], ioe ] }
input[2] = 0
"""
}
@@ -103,11 +199,37 @@ nextflow_process {
}
test("human - retained intron - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'RI'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_RI' ], ioe ] }
input[2] = 0
"""
}
@@ -123,12 +245,85 @@ nextflow_process {
}
}
- test("human - alternative first/last exons - ioe") {
+ test("human - alternative first exon - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_AF' ], ioe[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative last exons - ioe") {
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_AL' ], ioe[1] ] }
input[2] = 0
"""
}
@@ -152,11 +347,37 @@ nextflow_process {
options "-stub"
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SE'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_SE' ], ioe[0] ] }
input[2] = 0
"""
}
@@ -172,15 +393,91 @@ nextflow_process {
}
}
- test("human - alternative splice site - ioe - stub") {
+ test("human - alternative splice site A5 - ioe - stub") {
options "-stub"
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_A5' ], ioe[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative splice site A3 - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'SS'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_A3' ], ioe[1] ] }
input[2] = 0
"""
}
@@ -200,11 +497,37 @@ nextflow_process {
options "-stub"
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'MX'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [id: 'test_MX'], ioe[0] ] }
input[2] = 0
"""
}
@@ -224,11 +547,87 @@ nextflow_process {
options "-stub"
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'RI'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
+ when {
+ process {
+ """
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [id: 'test_RI'], ioe[0] ] }
+ input[2] = 0
+ """
+ }
+ }
+
+ then {
+ assert process.success
+ assertAll(
+ { assert snapshot(
+ sanitizeOutput(process.out),
+ ).match() }
+ )
+ }
+ }
+
+ test("human - alternative first exon - ioe - stub") {
+
+ options "-stub"
+
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ [id: 'test_AF'], events[0] ] }
input[2] = 0
"""
}
@@ -244,15 +643,41 @@ nextflow_process {
}
}
- test("human - alternative first/last exons - ioe - stub") {
+ test("human - alternative last exon - ioe - stub") {
options "-stub"
+ setup {
+ run("SUPPA_GENERATEEVENTS") {
+ tag "suppa/generateevents"
+ script "../../generateevents/main.nf"
+ process {
+ """
+ input[0] = [ [ id: 'human' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/chr21_gencode.gtf', checkIfExists: true) ]
+ input[1] = 'ioe'
+ input[2] = false
+ input[3] = 'FL'
+ input[4] = 'S'
+ input[5] = []
+ input[6] = []
+ """
+ }
+ }
+
+ def mock_expression = file("${outputDir}/mock_expression_matrix.txt")
+ mock_expression.text = """
+ sample1
+ ENST00000625012.1\t10.5
+ ENSE00003760353.1\t95.1
+ ENSE00003754925.1\t0.0
+ """.stripIndent().trim()
+ }
+
when {
process {
"""
- input[0] = [ [id: 'sample1'], file("${outputDir}/dummy_expression_matrix.txt") ]
- input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ meta, events[0] ] }
+ input[0] = [ [id: 'sample1'], file("${outputDir}/mock_expression_matrix.txt") ]
+ input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ [id: 'test_AL'], events[1] ] }
input[2] = 0
"""
}
diff --git a/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap b/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
index a9ebbd0a0cdf..f8538e86bad1 100644
--- a/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
+++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap
@@ -1,4 +1,30 @@
{
+ "human - alternative last exon - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T21:03:58.585294965",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.4"
+ }
+ },
"human - skipping exon - ioe": {
"content": [
{
@@ -19,13 +45,13 @@
]
}
],
- "timestamp": "2026-07-17T16:37:11.49923868",
+ "timestamp": "2026-07-17T21:02:34.362456313",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
- "human - alternative splice site - ioe": {
+ "human - alternative splice site A3 - ioe": {
"content": [
{
"psi": [
@@ -33,7 +59,7 @@
{
"id": "sample1"
},
- "sample1.psi:md5,04daef324165f4f77f872124844ff657"
+ "sample1.psi:md5,237d9e5dc3fb79e8149a5527ed51a3c1"
]
],
"versions_suppa": [
@@ -45,10 +71,10 @@
]
}
],
- "timestamp": "2026-07-17T16:37:18.08789184",
+ "timestamp": "2026-07-17T21:02:48.622825822",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
"human - skipping exon - ioe - stub": {
@@ -71,13 +97,13 @@
]
}
],
- "timestamp": "2026-07-17T16:37:42.746984247",
+ "timestamp": "2026-07-17T21:03:23.111520154",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
- "human - alternative splice site - ioe - stub": {
+ "human - alternative first exon - ioe": {
"content": [
{
"psi": [
@@ -85,7 +111,33 @@
{
"id": "sample1"
},
- "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "sample1.psi:md5,40a096c2d820965a912ec3907f94bb0c"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T21:03:10.603815889",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.4"
+ }
+ },
+ "human - alternative last exons - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,9f665c73ab259b5d475bc10a5e5f467b"
]
],
"versions_suppa": [
@@ -97,13 +149,13 @@
]
}
],
- "timestamp": "2026-07-17T16:37:47.787235776",
+ "timestamp": "2026-07-17T21:03:17.529864418",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
- "human - alternative first/last exons - ioe - stub": {
+ "human - alternative first exon - ioe - stub": {
"content": [
{
"psi": [
@@ -123,10 +175,36 @@
]
}
],
- "timestamp": "2026-07-17T16:38:03.218646269",
+ "timestamp": "2026-07-17T21:03:52.977685983",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
+ }
+ },
+ "human - alternative splice site A5 - ioe": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,04daef324165f4f77f872124844ff657"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T21:02:41.488913298",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.4"
}
},
"human - retained intron - ioe": {
@@ -149,10 +227,10 @@
]
}
],
- "timestamp": "2026-07-17T16:37:31.198277918",
+ "timestamp": "2026-07-17T21:03:03.811619463",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
"human - mutually exclusive exons - ioe": {
@@ -175,13 +253,13 @@
]
}
],
- "timestamp": "2026-07-17T16:37:24.726279232",
+ "timestamp": "2026-07-17T21:02:57.226438282",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
- "human - alternative first/last exons - ioe": {
+ "human - alternative splice site A3 - ioe - stub": {
"content": [
{
"psi": [
@@ -189,7 +267,33 @@
{
"id": "sample1"
},
- "sample1.psi:md5,40a096c2d820965a912ec3907f94bb0c"
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_suppa": [
+ [
+ "SUPPA_PSIPEREVENT",
+ "suppa",
+ "2.4"
+ ]
+ ]
+ }
+ ],
+ "timestamp": "2026-07-17T21:03:36.063507166",
+ "meta": {
+ "nf-test": "0.9.5",
+ "nextflow": "26.04.4"
+ }
+ },
+ "human - alternative splice site A5 - ioe - stub": {
+ "content": [
+ {
+ "psi": [
+ [
+ {
+ "id": "sample1"
+ },
+ "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"versions_suppa": [
@@ -201,10 +305,10 @@
]
}
],
- "timestamp": "2026-07-17T16:37:37.802799201",
+ "timestamp": "2026-07-17T21:03:30.360640178",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
"human - mutually exclusive exons - ioe - stub": {
@@ -227,10 +331,10 @@
]
}
],
- "timestamp": "2026-07-17T16:37:52.843896425",
+ "timestamp": "2026-07-17T21:03:41.645300259",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
},
"human - retained intron - ioe - stub": {
@@ -253,10 +357,10 @@
]
}
],
- "timestamp": "2026-07-17T16:37:57.956257608",
+ "timestamp": "2026-07-17T21:03:47.425342187",
"meta": {
"nf-test": "0.9.5",
- "nextflow": "26.04.3"
+ "nextflow": "26.04.4"
}
}
}
\ No newline at end of file