Skip to content

Commit

Permalink
update swf msa_alignment to avoid dynamic includes
Browse files Browse the repository at this point in the history
  • Loading branch information
mirpedrol committed Nov 6, 2024
1 parent 4748294 commit 34e891b
Show file tree
Hide file tree
Showing 7 changed files with 238 additions and 416 deletions.
3 changes: 2 additions & 1 deletion modules/mirpedrol/kalign/align/tests/main.nf.test
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta")},
{ assert snapshot(process.out.alignment).match("alignment")},
{ assert snapshot(process.out.versions).match("versions")}
)
}
}
Expand Down
3 changes: 2 additions & 1 deletion modules/mirpedrol/mafft/tests/main.nf.test
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
{ assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta")}
{ assert snapshot(process.out.alignment).match("alignment")},
{ assert snapshot(process.out.versions).match("mafft_versions")}
)
}

Expand Down
4 changes: 2 additions & 2 deletions modules/mirpedrol/muscle5/super5/meta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ keywords:
- msa
- multiple sequence alignment
- msa
- align
- alignment
tools:
- muscle-super5:
description: "Muscle v5 is a major re-write of MUSCLE based on new algorithms."
Expand All @@ -29,7 +29,7 @@ input:
- fasta:
type: file
description: Input sequences for alignment must be in FASTA format
pattern: "*.{fasta,fa,fna}"
pattern: "*.{fa,fasta}"
ontologies:
- edam: http://edamontology.org/format_1929
output:
Expand Down
99 changes: 54 additions & 45 deletions subworkflows/mirpedrol/msa_alignment/main.nf
Original file line number Diff line number Diff line change
@@ -1,57 +1,66 @@
include { MAFFT } from '../../../modules/mirpedrol/mafft/main'
include { KALIGN_ALIGN } from '../../../modules/mirpedrol/kalign/align/main'
include { FAMSA_ALIGN } from '../../../modules/mirpedrol/famsa/align/main'
include { MUSCLE5_SUPER5 } from '../../../modules/mirpedrol/muscle5/super5/main'
include { MAGUS_ALIGN } from '../../../modules/mirpedrol/magus/align/main'
include { CLUSTALO_ALIGN } from '../../../modules/mirpedrol/clustalo/align/main'
include { FAMSA_ALIGN } from '../../../modules/mirpedrol/famsa/align/main'
include { KALIGN_ALIGN } from '../../../modules/mirpedrol/kalign/align/main'
include { TCOFFEE_ALIGN } from '../../../modules/mirpedrol/tcoffee/align/main'
include { LEARNMSA_ALIGN } from '../../../modules/mirpedrol/learnmsa/align/main'
include { MAFFT } from '../../../modules/mirpedrol/mafft/main'
include { MAGUS_ALIGN } from '../../../modules/mirpedrol/magus/align/main'
include { MUSCLE5_SUPER5 } from '../../../modules/mirpedrol/muscle5/super5/main'
include { TCOFFEE_ALIGN } from '../../../modules/mirpedrol/tcoffee/align/main'


workflow MSA_ALIGNMENT {

take:
ch_fasta // channel: [ meta, fasta ]
ch_fasta

main:
def ch_out_alignment = Channel.empty()
def ch_versions = Channel.empty()

if ( params.aligner == "clustalo/align" ) {
CLUSTALO_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(CLUSTALO_ALIGN.out.alignment)
ch_versions = ch_versions.mix(CLUSTALO_ALIGN.out.versions.first())
} else if ( params.aligner == "famsa/align" ) {
FAMSA_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(FAMSA_ALIGN.out.alignment)
ch_versions = ch_versions.mix(FAMSA_ALIGN.out.versions.first())
} else if ( params.aligner == "kalign/align" ) {
KALIGN_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(KALIGN_ALIGN.out.alignment)
ch_versions = ch_versions.mix(KALIGN_ALIGN.out.versions.first())
} else if ( params.aligner == "learnmsa/align" ) {
LEARNMSA_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(LEARNMSA_ALIGN.out.alignment)
ch_versions = ch_versions.mix(LEARNMSA_ALIGN.out.versions.first())
} else if ( params.aligner == "mafft" ) {
MAFFT( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MAFFT.out.alignment)
ch_versions = ch_versions.mix(MAFFT.out.versions.first())
} else if ( params.aligner == "magus/align" ) {
MAGUS_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MAGUS_ALIGN.out.alignment)
ch_versions = ch_versions.mix(MAGUS_ALIGN.out.versions.first())
} else if ( params.aligner == "muscle5/super5" ) {
MUSCLE5_SUPER5( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MUSCLE5_SUPER5.out.alignment)
ch_versions = ch_versions.mix(MUSCLE5_SUPER5.out.versions.first())
} else if ( params.aligner == "tcoffee/align" ) {
TCOFFEE_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(TCOFFEE_ALIGN.out.alignment)
ch_versions = ch_versions.mix(TCOFFEE_ALIGN.out.versions.first())
}
def ch_out_alignment = Channel.empty()
def ch_out_versions = Channel.empty()
if ( params.alignment == "mafft" ) {
MAFFT( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MAFFT.out.alignment)
ch_out_versions = ch_out_versions.mix(MAFFT.out.versions)
}
else if ( params.alignment == "kalign/align" ) {
KALIGN_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(KALIGN_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(KALIGN_ALIGN.out.versions)
}
else if ( params.alignment == "famsa/align" ) {
FAMSA_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(FAMSA_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(FAMSA_ALIGN.out.versions)
}
else if ( params.alignment == "muscle5/super5" ) {
MUSCLE5_SUPER5( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MUSCLE5_SUPER5.out.alignment)
ch_out_versions = ch_out_versions.mix(MUSCLE5_SUPER5.out.versions)
}
else if ( params.alignment == "magus/align" ) {
MAGUS_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(MAGUS_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(MAGUS_ALIGN.out.versions)
}
else if ( params.alignment == "clustalo/align" ) {
CLUSTALO_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(CLUSTALO_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(CLUSTALO_ALIGN.out.versions)
}
else if ( params.alignment == "tcoffee/align" ) {
TCOFFEE_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(TCOFFEE_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(TCOFFEE_ALIGN.out.versions)
}
else if ( params.alignment == "learnmsa/align" ) {
LEARNMSA_ALIGN( ch_fasta )
ch_out_alignment = ch_out_alignment.mix(LEARNMSA_ALIGN.out.alignment)
ch_out_versions = ch_out_versions.mix(LEARNMSA_ALIGN.out.versions)
}


emit:
alignment = ch_out_alignment // channel: [ meta, *.aln.gz ]
versions = ch_versions // channel: [ versions.yml ]
alignment = ch_out_alignment
versions = ch_out_versions

}

80 changes: 52 additions & 28 deletions subworkflows/mirpedrol/msa_alignment/meta.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,62 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json
# yaml-language-server: $schema=https://raw.githubusercontent.com/mirpedrol/class-modules/main/subworkflows/yaml-schema.json
name: "msa_alignment"
description: Perform a multiple sequence alignment with one of the possible aligners
keywords:
- alignment
- MSA
- genomics
description: Perform multiple sequence alignment
keywords: ["alignment", "msa", "align"]
components:
- clustalo/align
- famsa/align
- kalign/align
- learnmsa/align
- mafft
- magus/align
- muscle5/super5
- tcoffee/align
[
"mafft",
"kalign/align",
"famsa/align",
"muscle5/super5",
"magus/align",
"clustalo/align",
"tcoffee/align",
"learnmsa/align",
]

input:
- ch_fasta:
type: file
description: |
Structure: [ val(meta), path(fasta) ]
meta: Groovy Map containing sample information
fasta: Input sequences in FASTA format (*.{fa,fasta})
description: "Channel containing: meta, fasta"
structure:
- meta:
description: "Groovy Map containing sample information
e.g. `[ id:'sample1', single_end:false ]`
"
type: map
- fasta:
description: Input sequences in FASTA format
ontologies:
- edam: http://edamontology.org/format_1929
pattern: "*.{fa,fasta}"
type: file

output:
- alignment:
type: file
description: |
Structure: [ val(meta), path(alignment) ]
meta: Groovy Map containing sample information
alignment: Alignment file, in gzipped fasta format (*.aln.gz)
description: Output channel alignment
structure:
- meta:
description: "Groovy Map containing sample information
e.g. `[ id:'test']`
"
type: map
- "*.aln.gz":
description: Alignment file, in FASTA format.
ontologies:
- edam: http://edamontology.org/format_1984
pattern: "*.aln.gz"
type: file
- versions:
type: file
description: |
File containing software versions
Structure: [ path(versions.yml) ]
description: Output channel versions
structure:
- versions.yml:
description: File containing software versions
pattern: versions.yml
type: file

authors:
- "@mirpedrol"
maintainers:
Expand Down
Loading

0 comments on commit 34e891b

Please sign in to comment.