Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 32 additions & 41 deletions subworkflows/nf-core/fasta_index_dna/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -22,50 +22,41 @@ workflow FASTA_INDEX_DNA {
ch_aligner_index = Channel.empty()
ch_versions = Channel.empty()

switch (val_aligner) {
case 'bowtie2':
BOWTIE2_BUILD(ch_fasta ) // if aligner is bowtie2
ch_aligner_index = ch_aligner_index.mix(BOWTIE2_BUILD.out.index)
ch_versions = ch_versions.mix(BOWTIE2_BUILD.out.versions)
break
case 'bwamem':
BWAMEM1_INDEX(ch_fasta) // If aligner is bwa-mem
ch_aligner_index = ch_aligner_index
.mix(
BWAMEM1_INDEX.out.index
.join(ch_altliftover)
.map{meta, index, alt -> [meta, index + alt]}
)
// Handle different aligners using conditional logic
if (val_aligner == 'bowtie2') {
BOWTIE2_BUILD(ch_fasta)
ch_aligner_index = BOWTIE2_BUILD.out.index
ch_versions = BOWTIE2_BUILD.out.versions
} else if (val_aligner == 'bwamem') {
BWAMEM1_INDEX(ch_fasta)

ch_versions = ch_versions.mix(BWAMEM1_INDEX.out.versions)
break
case 'bwamem2':
BWAMEM2_INDEX(ch_fasta) // If aligner is bwa-mem2
ch_aligner_index = ch_aligner_index
.mix(
BWAMEM2_INDEX.out.index
.join(ch_altliftover)
.map{meta, index, alt -> [meta, index + alt]}
)
// returning the alt file next to the index, not inside the folder
ch_aligner_index = BWAMEM1_INDEX.out.index
.join(ch_altliftover)
.map { meta, index, alt -> [meta, [index, alt] ] }
ch_versions = BWAMEM1_INDEX.out.versions
} else if (val_aligner == 'bwamem2') {
BWAMEM2_INDEX(ch_fasta)
// returning the alt file next to the index, not inside the folder
ch_aligner_index = BWAMEM2_INDEX.out.index
.join(ch_altliftover)
.map { meta, index, alt -> [meta, [index, alt] ] }

ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions)
break
case 'dragmap':
DRAGMAP_HASHTABLE(ch_fasta) // If aligner is dragmap
ch_aligner_index = ch_aligner_index.mix(DRAGMAP_HASHTABLE.out.hashmap)
ch_versions = ch_versions.mix(DRAGMAP_HASHTABLE.out.versions)
break
case 'snap':
ch_snap_reference = ch_fasta
.join(ch_altliftover)
.map {meta, fasta, alt -> [meta, fasta, [], [], alt]}
ch_versions = BWAMEM2_INDEX.out.versions
} else if (val_aligner == 'dragmap') {
DRAGMAP_HASHTABLE(ch_fasta)
ch_aligner_index = DRAGMAP_HASHTABLE.out.hashmap
ch_versions = DRAGMAP_HASHTABLE.out.versions
} else if (val_aligner == 'snap') {
ch_snap_reference = ch_fasta
.join(ch_altliftover)
.map { meta, fasta_, alt -> [meta, fasta_, [], [], alt] }

SNAP_INDEX(ch_snap_reference) // If aligner is snap
ch_aligner_index = ch_aligner_index.mix(SNAP_INDEX.out.index)
ch_versions = ch_versions.mix(SNAP_INDEX.out.versions)
break
default:
error "Unknown aligner: ${val_aligner}"
SNAP_INDEX(ch_snap_reference)
ch_aligner_index = SNAP_INDEX.out.index
ch_versions = SNAP_INDEX.out.versions
} else {
error "Unknown aligner: ${val_aligner}"
}

emit:
Expand Down
289 changes: 289 additions & 0 deletions subworkflows/nf-core/fasta_index_dna/tests/main.nf.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
nextflow_workflow {

name "Test Subworkflow FASTA_INDEX_DNA"
script "../main.nf"
workflow "FASTA_INDEX_DNA"

tag "subworkflows"
tag "subworkflows_nfcore"
tag "subworkflows/fasta_index_dna"
tag "bowtie2/build"
tag "bwa/index"
tag "bwamem2/index"
tag "dragmap/hashtable"
tag "snapaligner/index"

test("Params: bowtie2 | generate bowtie2 index") {

when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bowtie2'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: bwamem | generate bwamem1 index") {

when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bwamem'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: bwamem2 | generate bwamem2 index") {

when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bwamem2'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: dragmap | generate dragmap hashtable") {

when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'dragmap'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out.index[1].collect { file(it).name }.toSorted(),
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: snapaligner | generate snapaligner index") {

when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'snap'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out.index[0][1].collect { file(it).name }.toSorted(),
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}


test("Params: bowtie2 | generate bowtie2 index - stub") {
options '-stub'
when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bowtie2'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: bwamem | generate bwamem1 index - stub") {
options '-stub'
when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bwamem'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: bwamem2 | generate bwamem2 index - stub") {
options '-stub'
when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'bwamem2'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: dragmap | generate dragmap hashtable - stub") {
options '-stub'
when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'dragmap'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}
test("Params: snapaligner | generate snapaligner index - stub") {
options '-stub'
when {
workflow {
"""
input[0] = Channel.value([
[id:'test'],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
])
input[1] = Channel.value([
[id:'test'],
[]
])
input[2] = 'snap'
"""
}
}
then {
assert workflow.success
assertAll(
{ assert snapshot(
workflow.out,
workflow.out.versions.collect{ path(it).yaml }
).match() }
)
}
}

}
Loading
Loading