Skip to content

Migrate local FUSIONREPORT_DETECT module to nf-core #8735

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
586fc09
Migrate local fusionreport/download module to nf-core
delfiterradas Jun 25, 2025
6cd820d
Migrate fusionreport/detect local module to nf-core
delfiterradas Jun 26, 2025
93dbc8d
Adapt params format to follow nf-test guidelines
delfiterradas Jun 26, 2025
7f2be6c
Merge branch 'fusionreport-download' into fusionreport-detect
delfiterradas Jun 26, 2025
a6c7754
Adapt format to follow nf-core guidelines
delfiterradas Jun 26, 2025
298c3b1
Lint module
delfiterradas Jun 26, 2025
6181e45
Fix meta.yml for fusionreport/detect module
delfiterradas Jun 27, 2025
629265e
Migrate fusionreport/detect local module to nf-core
delfiterradas Jun 26, 2025
ae670e4
Adapt to follow nf-core format
delfiterradas Jun 27, 2025
4919ba1
Fix meta.yml for fusionreport/download
delfiterradas Jun 27, 2025
84d0da2
One branch per module
delfiterradas Jun 27, 2025
25aaee5
Merge branch 'master' into fusionreport-download
delfiterradas Jun 27, 2025
fd9f6c0
Update container
delfiterradas Jun 27, 2025
dba0242
Merge branch 'fusionreport-download' into fusionreport-detect
delfiterradas Jun 27, 2025
a293265
Update containers and packages as conda test was failing
delfiterradas Jun 30, 2025
c681ba8
Merge branch 'fusionreport-download' into fusionreport-detect
delfiterradas Jun 30, 2025
6e9a803
Merge branch 'master' into fusionreport-detect
delfiterradas Jun 30, 2025
eb99084
Update to latest version
delfiterradas Jul 1, 2025
4da8ea1
Update test input files to the ones in nf-core
delfiterradas Jul 2, 2025
60ea56d
Merge branch 'master' into fusionreport-detect
delfiterradas Jul 2, 2025
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
6 changes: 6 additions & 0 deletions modules/nf-core/fusionreport/detect/environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
channels:
- conda-forge
- bioconda
dependencies:
- bioconda::fusion-report=4.0.1
- conda-forge::openpyxl=3.1.5
65 changes: 65 additions & 0 deletions modules/nf-core/fusionreport/detect/main.nf
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
process FUSIONREPORT_DETECT {
tag "$meta.id"
label 'process_medium'

conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'oras://community.wave.seqera.io/library/fusion-report_beautifulsoup4_click_colorlog_pruned:353260d00d0da0ec' :
'community.wave.seqera.io/library/fusion-report_beautifulsoup4_click_colorlog_pruned:78488bd99166aa9a'}"

input:
tuple val(meta), path(arriba_fusions), path(starfusion_fusions), path(fusioncatcher_fusions)
tuple val(meta2), path(fusionreport_ref)
val(tools_cutoff)

output:
tuple val(meta), path("*fusionreport.tsv") , emit: fusion_list
tuple val(meta), path("*fusionreport_filtered.tsv") , emit: fusion_list_filtered
tuple val(meta), path("*index.html") , emit: report
tuple val(meta), path("*_*.html") , emit: html , optional:true
tuple val(meta), path("*.csv") , emit: csv , optional:true
tuple val(meta), path("*.json") , emit: json , optional:true
path "versions.yml" , emit: versions

when:
task.ext.when == null || task.ext.when

script:
def args = task.ext.args ?: ''
def args2 = task.ext.args2 ?: ''
def tools = arriba_fusions ? "--arriba ${arriba_fusions} " : ''
tools += starfusion_fusions ? "--starfusion ${starfusion_fusions} " : ''
tools += fusioncatcher_fusions ? "--fusioncatcher ${fusioncatcher_fusions} " : ''
def prefix = task.ext.prefix ?: "${meta.id}"
"""
fusion_report run $meta.id . $fusionreport_ref $tools --allow-multiple-gene-symbols --tool-cutoff $tools_cutoff $args $args2

mv fusion_list.tsv ${prefix}.fusionreport.tsv
mv fusion_list_filtered.tsv ${prefix}.fusionreport_filtered.tsv
mv index.html ${prefix}_fusionreport_index.html
[ ! -f fusions.csv ] || mv fusions.csv ${prefix}.fusions.csv
[ ! -f fusions.json ] || mv fusions.json ${prefix}.fusions.json

cat <<-END_VERSIONS > versions.yml
"${task.process}":
fusion_report: \$(fusion_report --version | sed 's/fusion-report //')
fusion_report DB retrieval: \$(cat $fusionreport_ref/DB-timestamp.txt)
END_VERSIONS
"""

stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.fusionreport_filtered.tsv
touch ${prefix}.fusionreport.tsv
touch ${prefix}_fusionreport_index.html
touch AAA_BBB.html
touch ${prefix}.fusions.csv
touch ${prefix}.fusions.json

cat <<-END_VERSIONS > versions.yml
"${task.process}":
fusion_report: \$(fusion_report --version | sed 's/fusion-report //')
END_VERSIONS
"""
}
151 changes: 151 additions & 0 deletions modules/nf-core/fusionreport/detect/meta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
name: fusionreport_detect
description: fusionreport_detect
keywords:
- sort
- RNA-seq
- fusion report
- detect
tools:
- fusionreport:
description: Tool for parsing outputs from fusion detection tools
homepage: https://github.com/Clinical-Genomics/fusion-report
documentation: https://matq007.github.io/fusion-report/#/
doi: "10.1101/011650"
licence: ["GPL v3"]
identifier: ""

input:
- - meta:
type: map
description: |
Groovy Map containing sample information
- arriba_fusions:
type: file
description: File
pattern: "*.fusions.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- starfusion_fusions:
type: file
description: File containing fusions from STARfusion
pattern: "*.starfusion.fusion_predictions.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- fusioncatcher_fusions:
type: file
description: File containing fusions from fusioncatcher
pattern: "*.fusions.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- - meta2:
type: map
description: |
Groovy Map containing sample information
- fusionreport_ref:
type: directory
description: File
pattern: "fusion_report_db"
- - tools_cutoff:
type: integer
description: Discard fusions detected by less than $tools_cutoff tools both for display in fusionreport html index and to consider in fusioninspector.

output:
- fusion_list:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- "*fusionreport.tsv":
type: map
description: |
Groovy Map containing sample information
pattern: "*.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- fusion_list_filtered:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- "*fusionreport_filtered.tsv":
type: map
description: |
Groovy Map containing sample information
pattern: "*.tsv"
ontologies:
- edam: http://edamontology.org/format_3475 # TSV
- report:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*.index.html"
ontologies:
- edam: "http://edamontology.org/format_2331" # HTML
- "*index.html":
type: map
description: |
Groovy Map containing sample information
pattern: "*.index.html"
ontologies:
- edam: "http://edamontology.org/format_2331" # HTML
- html:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*_*.html"
ontologies:
- edam: "http://edamontology.org/format_2331" # HTML
- "*_*.html":
type: map
description: |
Groovy Map containing sample information
pattern: "*_*.html"
ontologies:
- edam: "http://edamontology.org/format_2331" # HTML
- csv:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*.csv"
ontologies:
- edam: "http://edamontology.org/format_3752" # CSV
- "*.csv":
type: map
description: |
Groovy Map containing sample information
pattern: "*.csv"
ontologies:
- edam: "http://edamontology.org/format_3752" # CSV
- json:
- meta:
type: map
description: |
Groovy Map containing sample information
pattern: "*.json"
ontologies:
- edam: "http://edamontology.org/format_3464" # JSON
- "*.json":
type: map
description: |
Groovy Map containing sample information
pattern: "*.json"
ontologies:
- edam: "http://edamontology.org/format_3464" # JSON
- versions:
- versions.yml:
type: file
description: File containing software versions
pattern: "versions.yml"
ontologies:
- edam: http://edamontology.org/format_3750 # YAML
authors:
- "@praveenraj2018, @rannick"
122 changes: 122 additions & 0 deletions modules/nf-core/fusionreport/detect/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
nextflow_process {

name "Test Process FUSIONREPORT_DETECT"
script "../main.nf"
process "FUSIONREPORT_DETECT"
tag "modules"
tag "modules_local"
tag "fusionreport"
tag "fusionreport/detect"
tag "modules_nfcore"
tag "fusionreport/download"


test("FUSIONREPORT - arriba - starfusion - fusioncatcher") {
config './nextflow.config'

setup {
run("FUSIONREPORT_DOWNLOAD") {
script "../../../fusionreport/download/main.nf"
process {
"""
"""
}
}
}

when {
process {
"""

input[0] = [
[ id:'test_sample' ], // meta map
file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/arriba.tsv"),
file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/starfusion.tsv"),
file("https://github.com/Clinical-Genomics/fusion-report/raw/master/tests/test_data/fusioncatcher.txt")
]

input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref
input[2] = 1
"""
}
params {
arriba = true
starfusion = true
fusioncatcher = true
no_cosmic = true
outdir = "$outputDir"
fusionreport_download_args = '--no-cosmic'
fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : ""
fusionreport_detect_args2 = "--export csv"
}
}

then {
assertAll(
{ assert process.success },
{ assert snapshot(
process.out.fusion_list,
process.out.fusion_list_filtered,
process.out.csv,
file(process.out.report[0][1]).name,
process.out.html[0][1].collect { file(it).name },
process.out.json,
process.out.versions.flatten().first().toString().split('/')[-1] // md5sum not stable as versions contains DB timestamp
).match() }
)
}

}

test("FUSIONREPORT - arriba - starfusion - fusioncatcher - stub") {
config './nextflow.config'

setup {
run("FUSIONREPORT_DOWNLOAD") {
script "../../../fusionreport/download/main.nf"
process {
"""
"""
}
}
}

options "-stub"

when {
process {
"""

input[0] = [
[ id:'test_sample' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/arriba.tsv', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/starfusion.tsv', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/fusioncatcher.txt', checkIfExists: true)
]

input[1] = FUSIONREPORT_DOWNLOAD.out.fusionreport_ref

input[2] = 1

"""
}
params {
arriba = true
starfusion = true
fusioncatcher = true
no_cosmic = true
outdir = "$outputDir"
fusionreport_download_args = '--no-cosmic'
fusionreport_detect_args = {params.no_cosmic} ? "--no-cosmic" : ""
fusionreport_detect_args2 = "--export csv"
}
}

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