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/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..08efd64c35e2 --- /dev/null +++ b/modules/nf-core/suppa/psiperevent/meta.yml @@ -0,0 +1,81 @@ +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' ]` + - 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) +output: + psi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "*.psi": + type: file + description: PSI values file + pattern: "*.psi" + ontologies: [] + 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..94e76a5a124e --- /dev/null +++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test @@ -0,0 +1,695 @@ +// 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") { + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.collect{ meta, ioe -> [[ id: 'test_SE' ], ioe]} + input[2] = 0 + """ + } + } + + 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() + } + + when { + process { + """ + 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 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_A3' ], ioe[1] ] } + input[2] = 0 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_MX' ], ioe ] } + input[2] = 0 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.collect { meta, ioe -> [ [ id: 'test_RI' ], ioe ] } + input[2] = 0 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/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 + """ + } + } + + 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") { + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [ id: 'test_SE' ], ioe[0] ] } + input[2] = 0 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/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 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + test("human - mutually exclusive exons - 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] = '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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, ioe -> [ [id: 'test_MX'], ioe[0] ] } + 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") { + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ [id: 'test_AF'], events[0] ] } + input[2] = 0 + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + sanitizeOutput(process.out), + ).match() } + ) + } + } + + 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}/mock_expression_matrix.txt") ] + input[1] = SUPPA_GENERATEEVENTS.out.events.map { meta, events -> [ [id: 'test_AL'], events[1] ] } + 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..f8538e86bad1 --- /dev/null +++ b/modules/nf-core/suppa/psiperevent/tests/main.nf.test.snap @@ -0,0 +1,366 @@ +{ + "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": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,eebc549dee0797dd5bf62d65d1296dae" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:02:34.362456313", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - alternative splice site A3 - ioe": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,237d9e5dc3fb79e8149a5527ed51a3c1" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:02:48.622825822", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - skipping exon - ioe - stub": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:23.111520154", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - alternative first exon - ioe": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "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": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:17.529864418", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - alternative first exon - ioe - stub": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:52.977685983", + "meta": { + "nf-test": "0.9.5", + "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": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,85917088c83d53c6c578bfdee28539e6" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:03.811619463", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - mutually exclusive exons - ioe": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,9fb5a764439d9b907bf50944248bb8cd" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:02:57.226438282", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - alternative splice site A3 - ioe - stub": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "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": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:30.360640178", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - mutually exclusive exons - ioe - stub": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:41.645300259", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, + "human - retained intron - ioe - stub": { + "content": [ + { + "psi": [ + [ + { + "id": "sample1" + }, + "sample1.psi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_suppa": [ + [ + "SUPPA_PSIPEREVENT", + "suppa", + "2.4" + ] + ] + } + ], + "timestamp": "2026-07-17T21:03:47.425342187", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + } +} \ No newline at end of file