Skip to content

Commit

Permalink
Merge pull request #601 from atrigila/fusioninspector_nftest
Browse files Browse the repository at this point in the history
Add nf-test for local module `FUSIONINSPECTOR`
  • Loading branch information
atrigila authored Jan 13, 2025
2 parents 9fe3e10 + 13ed336 commit 9fd122e
Show file tree
Hide file tree
Showing 7 changed files with 824 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Add parameter `--references_only` when no data should be analysed, but only the references should be built [#505](https://github.com/nf-core/rnafusion/pull/505)
- Add nf-test to local subworkflow: `FUSIONCATCHER_WORKFLOW` [#591](https://github.com/nf-core/rnafusion/pull/591)
- Add nf-test to local subworkflow: `STARFUSION_WORKFLOW`. [#597](https://github.com/nf-core/rnafusion/pull/597)
- Add nf-test to local module: `FUSIONINSPECTOR`. [#601](https://github.com/nf-core/rnafusion/pull/601)

### Changed

Expand All @@ -41,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Integrate reference building in the main workflow [#505](https://github.com/nf-core/rnafusion/pull/505)
- Move from ensembl to gencode base [#505](https://github.com/nf-core/rnafusion/pull/505)
- Update from ensembl 102 to gencode 46 default references [#505](https://github.com/nf-core/rnafusion/pull/505)
- Update`FUSIONINSPECTOR` to v2.10.0. [#601](https://github.com/nf-core/rnafusion/pull/601)
- Remove local module `STARFUSION_DOWNLOAD` [#598](https://github.com/nf-core/rnafusion/pull/598)

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion conf/modules.config
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ process {
]
}

withName: 'FUSIONINSPECTOR' {
withName: '.*FUSIONINSPECTOR_WORKFLOW:.*:FUSIONINSPECTOR' {
ext.when = { !params.skip_vis }
ext.args = { ${params.fusioninspector_limitSjdbInsertNsj} != 1000000 ? "--STAR_xtra_params \"--limitSjdbInsertNsj ${params.fusioninspector_limitSjdbInsertNsj}\"" : '' }
ext.args2 = '--annotate --examine_coding_effect'
Expand Down
12 changes: 8 additions & 4 deletions modules/local/fusioninspector/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ channels:
- conda-forge
- bioconda
dependencies:
- bioconda::dfam=3.7
- bioconda::hmmer=3.4
- bioconda::minimap2=2.28
- bioconda::star-fusion=1.14.0
- bioconda::fusion-inspector=2.10.0
- bioconda::igv-reports=1.14.1
- bioconda::perl-json-xs=4.03
- bioconda::pysam=0.22.1
- conda-forge::perl-carp-assert=0.21
- pip
- pip:
- intervaltree==3.1.0
128 changes: 123 additions & 5 deletions modules/local/fusioninspector/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ process FUSIONINSPECTOR {

conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/be/bed86145102fdf7e381e1a506a4723676f98b4bbe1db5085d02213cef18525c9/data' :
'community.wave.seqera.io/library/dfam_hmmer_minimap2_star-fusion:aa3a8e3951498552'}"
'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/13/139b94a1f10c6e23a8c27eaed1e5a689db978a513d0ee155e74d35f0970814fe/data' :
'community.wave.seqera.io/library/fusion-inspector_igv-reports_perl-json-xs_pysam_pruned:c6147971d107ab11'}"

input:
tuple val(meta), path(reads), path(fusion_list)
Expand All @@ -15,7 +15,12 @@ process FUSIONINSPECTOR {
tuple val(meta), path("*FusionInspector.fusions.tsv") , emit: tsv
tuple val(meta), path("*.coding_effect") , optional:true, emit: tsv_coding_effect
tuple val(meta), path("*.gtf") , optional:true, emit: out_gtf
path "*" , emit: output
tuple val(meta), path("*FusionInspector.log") , emit: log
tuple val(meta), path("*html") , emit: html
tuple val(meta), path("*abridged.tsv") , emit: abridged_tsv
tuple val(meta), path("IGV_inputs") , emit: igv_inputs
tuple val(meta), path("fi_workdir") , emit: fi_workdir
tuple val(meta), path("chckpts_dir") , emit: chckpts_dir
path "versions.yml" , emit: versions

when:
Expand Down Expand Up @@ -46,9 +51,122 @@ process FUSIONINSPECTOR {
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.FusionInspector.log
touch ${prefix}.FusionInspector.fusions.abridged.tsv
touch ${prefix}.FusionInspector.fusions.tsv
touch ${prefix}.FusionInspector.fusions.tsv.annotated.coding_effect
touch ${prefix}.gtf
touch ${prefix}.fusion_inspector_web.html
mkdir -p chckpts_dir
touch chckpts_dir/add_FFPM.ok
touch chckpts_dir/add_splice_info.ok
touch chckpts_dir/append_microH_info.ok
touch chckpts_dir/blast_filter.ok
touch chckpts_dir/coalesce_junc_n_span.ok
touch chckpts_dir/cp_consol_bam.ok
touch chckpts_dir/cp_contigs_file_workdir
touch chckpts_dir/cp_final.ok
touch chckpts_dir/cp_gtf_file_workdir.ok
touch chckpts_dir/cp_tracks_json.ok
touch chckpts_dir/create_fi_igvjs.ok
touch chckpts_dir/cytoband.ok
touch chckpts_dir/EM_adj_counts.ok
touch chckpts_dir/filter_by_frag_threshs.ok
touch chckpts_dir/final.abridged.ok
touch chckpts_dir/fusion_annotator.ok
touch chckpts_dir/fusion_coding_region_effect.ok
touch chckpts_dir/fusion_contigs.ok
touch chckpts_dir/fusion_reports_html.ok
touch chckpts_dir/get_fusion_JUNCTION_reads_from_bam.ok
touch chckpts_dir/get_fusion_SPANNING_reads_from_bam.ok
touch chckpts_dir/index_consol_bam.ok
touch chckpts_dir/init_EM_adj_counts.ok
touch chckpts_dir/init_spanning_reads_bam.ok
touch chckpts_dir/mark_dup_reads.ok
touch chckpts_dir/mark_dups_reads.index.ok
touch chckpts_dir/merged_contig_fai.ok
touch chckpts_dir/merged_contig_gtf_to_bed.ok
touch chckpts_dir/microH.dat.ok
touch chckpts_dir/prep_igv_extract_junc_reads.ok
touch chckpts_dir/prep_igv_junc_reads_bam.ok
touch chckpts_dir/prep_igv_pfam_bed.ok
touch chckpts_dir/prep_igv_pfam_gff3.ok
touch chckpts_dir/prep_igv_seqsim_bed.ok
touch chckpts_dir/prep_igv_seqsim_gff3.ok
touch chckpts_dir/prep_spanning_reads.ok
touch chckpts_dir/run_STAR.ok
touch chckpts_dir/samtools_idx_junc_reads_bam.ok
touch chckpts_dir/samtools_index_span_reads_bam.ok
touch chckpts_dir/span_reads_acc.ok
touch chckpts_dir/${prefix}.bed.bedsort.ok
touch chckpts_dir/${prefix}.bed.bgzip.ok
touch chckpts_dir/${prefix}.bed.tabix.ok
mkdir -p fi_workdir/_STARgenome
touch fi_workdir/Log.final.out
touch fi_workdir/Log.out
touch fi_workdir/Log.progress.out
touch fi_workdir/microH.dat
touch fi_workdir/pipeliner.456.cmds
touch fi_workdir/SJ.out.tab
touch fi_workdir/star_align.ok
touch fi_workdir/_STARgenome/exonGeTrInfo.tab
touch fi_workdir/_STARgenome/exonInfo.tab
touch fi_workdir/_STARgenome/geneInfo.tab
touch fi_workdir/_STARgenome/sjdbInfo.txt
touch fi_workdir/_STARgenome/sjdbList.fromGTF.out.tab
touch fi_workdir/_STARgenome/sjdbList.out.tab
touch fi_workdir/_STARgenome/transcriptInfo.tab
touch fi_workdir/${prefix}.fa
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.info
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter.info
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.fusion_junction_read_accs
touch fi_workdir/${prefix}.fusion_preds.coalesced.summary.fusion_spanning_read_accs
touch fi_workdir/${prefix}.gtf
touch fi_workdir/${prefix}.igv.Pfam.gff3
touch fi_workdir/${prefix}.igv.seqsimilar.gff3
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated
touch fi_workdir/${prefix}.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.bai
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.failed_reads_during_span_analysis
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_junc_reads.sam
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_junction_info
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_spanning_info
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.fusion_span_reads.sam
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.read_align_counts.idx
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.read_align_counts.idx.ok
touch fi_workdir/${prefix}.star.cSorted.dupsMarked.bam.spanning_reads_want.idx
touch fi_workdir/${prefix}.star.sortedByCoord.out.bam
touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.bai
touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.bai.ok
touch fi_workdir/${prefix}.star.sortedByCoord.out.bam.ok
mkdir -p IGV_inputs
touch IGV_inputs/cytoBand.txt
touch IGV_inputs/${prefix}.bed
gzip -c < /dev/null > IGV_inputs/${prefix}.bed.sorted.bed.gz
touch IGV_inputs/${prefix}.bed.sorted.bed.gz.tbi
touch IGV_inputs/${prefix}.consolidated.bam
touch IGV_inputs/${prefix}.consolidated.bam.bai
touch IGV_inputs/${prefix}.fa
touch IGV_inputs/${prefix}.fa.fai
touch IGV_inputs/${prefix}.fusion_inspector_web.json
touch IGV_inputs/${prefix}.gtf
touch IGV_inputs/${prefix}.igv.Pfam.bed
touch IGV_inputs/${prefix}.igv.seqsimilar.bed
touch IGV_inputs/${prefix}.junction_reads.bam
touch IGV_inputs/${prefix}.junction_reads.bam.bai
touch IGV_inputs/${prefix}.ROI.bed
touch IGV_inputs/${prefix}.spanning_reads.bam
touch IGV_inputs/${prefix}.spanning_reads.bam.bai
touch IGV_inputs/tracks.json
touch IGV_inputs/TrinityFusion.bed
cat <<-END_VERSIONS > versions.yml
"${task.process}":
Expand Down
147 changes: 147 additions & 0 deletions modules/local/fusioninspector/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
nextflow_process {

name "Test Process FUSIONINSPECTOR"
script "../main.nf"
process "FUSIONINSPECTOR"
tag "modules"
tag "modules_local"
tag "fusioninspector"

test("FUSIONINSPECTOR") {
config './nextflow.config'

setup {
run("STARFUSION_BUILD") {
script "../../starfusion/build/main.nf"
process {
"""
input[0] = [
[ id:'minigenome fasta' ],
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.fa")
]
input[1] = [
[ id:'minigenome gtf' ],
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/minigenome.gtf")
]
input[2] = file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/master/CTAT_HumanFusionLib.mini.dat.gz")
input[3] = "human"
"""
}
}
}

when {
process {
"""
input[0] = [
[ id:'test', single_end:false ], // meta map
[
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"),
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz")
], // reads
[
file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")
]
]
input[1] = STARFUSION_BUILD.out.reference.map { it[1] }
"""
}
}

then {

def unstableFiles = [
"test.bed",
"test.consolidated.bam",
"test.consolidated.bam.bai",
"test.junction_reads.bam",
"test.junction_reads.bam.bai",
"test.spanning_reads.bam",
"Log.final.out",
"Log.out",
"microH.dat",
"test.fusion_preds.coalesced.summary",
"test.fusion_preds.coalesced.summary.EMadj",
"test.fusion_preds.coalesced.summary.min_frag_thresh",
"test.fusion_preds.coalesced.summary.wSpliceInfo",
"test.fusion_preds.coalesced.summary.wSpliceInfo.post_blast_filter",
"test.fusion_preds.coalesced.summary.wSpliceInfo.post_blast_filter.post_promisc_filter",
"test.fusion_preds.coalesced.summary.fusion_junction_reads_acc",
"test.fusion_preds.coalesced.summary.fusion_spanning_reads_acc",
"test.post_blast_and_promiscuity_filter",
"test.post_blast_and_promiscuity_filter.EMadj",
"test.post_blast_and_promiscuity_filter.EMadj.FFPM",
"test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH",
"test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated",
"test.post_blast_and_promiscuity_filter.EMadj.FFPM.wMicroH.annotated.coding_effect",
"test.star.cSorted.dupsMarked.bam",
"test.star.cSorted.dupsMarked.bam.bai",
"test.star.cSorted.dupsMarked.bam.fusion_junction_info",
"test.star.cSorted.dupsMarked.bam.fusion_spanning_info",
"test.star.cSorted.dupsMarked.bam.read_align_counts",
"test.star.cSorted.dupsMarked.bam.read_align_counts.idx",
"test.star.cSorted.dupsMarked.bam.spanning_reads_want.idx",
"test.star.sortedByCoord.out.bam",
"test.star.sortedByCoord.out.bam.bai",
"test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh",
"test.fusion_preds.coalesced.summary.fusion_junction_read_accs",
"test.fusion_preds.coalesced.summary.fusion_spanning_read_accs",
"test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo",
"test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter",
"test.fusion_preds.coalesced.summary.EMadj.min_frag_thresh.wSpliceInfo.post_blast_filter.post_promisc_filter"
]

assertAll(
{ assert process.success },
{ assert snapshot(
file(process.out.tsv[0][1]).name,
process.out.tsv_coding_effect, // TODO: These files do not seem to be produced. Consult Annick.
process.out.out_gtf, // TODO: These files do not seem to be produced. Consult Annick.
file(process.out.log[0][1]).name,
file(process.out.html[0][1]).name,
file(process.out.abridged_tsv[0][1]).name,
file(process.out.igv_inputs[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) },
file(process.out.fi_workdir[0][1]).listFiles().findAll { file -> !unstableFiles.contains(file.name) },
file(process.out.igv_inputs[0][1]).list().findAll { file -> !unstableFiles.contains(file) },
file(process.out.fi_workdir[0][1]).list().findAll { file -> !unstableFiles.contains(file) },
process.out.chckpts_dir,
process.out.versions
).match() }
)
}

}

test("FUSIONINSPECTOR stub") {
options "-stub"
when {
process {
"""
input[0] = [
[ id:'test', single_end:false ], // meta map
[
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_1.fastq.gz"),
file("https://github.com/STAR-Fusion/STAR-Fusion-Tutorial/raw/v0.0.1/rnaseq_2.fastq.gz")
], // reads
[
file("https://github.com/FusionInspector/FusionInspector/raw/master/test/fusion_targets.A.txt")
]
]
input[1] = []
"""
}
}

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

}

}
Loading

0 comments on commit 9fd122e

Please sign in to comment.