From 7a768c58dabb057070e0be304b88e5523bd30fcf Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 5 Nov 2024 11:47:54 +0000 Subject: [PATCH 001/139] modules installed --- modules.json | 40 +++ modules/nf-core/famsa/align/environment.yml | 5 + modules/nf-core/famsa/align/main.nf | 53 ++++ modules/nf-core/famsa/align/meta.yml | 63 +++++ .../nf-core/famsa/align/tests/main.nf.test | 96 +++++++ .../famsa/align/tests/main.nf.test.snap | 57 ++++ modules/nf-core/famsa/align/tests/tags.yml | 2 + .../nf-core/hmmer/hmmalign/environment.yml | 5 + modules/nf-core/hmmer/hmmalign/main.nf | 35 +++ modules/nf-core/hmmer/hmmalign/meta.yml | 53 ++++ .../nf-core/hmmer/hmmbuild/environment.yml | 5 + modules/nf-core/hmmer/hmmbuild/main.nf | 56 ++++ modules/nf-core/hmmer/hmmbuild/meta.yml | 56 ++++ .../nf-core/hmmer/hmmbuild/tests/main.nf.test | 66 +++++ .../hmmer/hmmbuild/tests/main.nf.test.snap | 55 ++++ .../nf-core/hmmer/hmmsearch/environment.yml | 5 + modules/nf-core/hmmer/hmmsearch/main.nf | 70 +++++ modules/nf-core/hmmer/hmmsearch/meta.yml | 92 +++++++ .../hmmer/hmmsearch/tests/main.nf.test | 126 +++++++++ .../hmmer/hmmsearch/tests/main.nf.test.snap | 175 ++++++++++++ .../nf-core/hmmer/hmmsearch/tests/tags.yml | 2 + modules/nf-core/mafft/environment.yml | 6 + modules/nf-core/mafft/main.nf | 75 ++++++ modules/nf-core/mafft/meta.yml | 108 ++++++++ modules/nf-core/mafft/tests/main.nf.test | 248 +++++++++++++++++ modules/nf-core/mafft/tests/main.nf.test.snap | 250 ++++++++++++++++++ modules/nf-core/mafft/tests/tags.yml | 2 + .../nf-core/mmseqs/cluster/environment.yml | 5 + modules/nf-core/mmseqs/cluster/main.nf | 61 +++++ modules/nf-core/mmseqs/cluster/meta.yml | 48 ++++ .../nf-core/mmseqs/linclust/environment.yml | 5 + modules/nf-core/mmseqs/linclust/main.nf | 61 +++++ modules/nf-core/mmseqs/linclust/meta.yml | 48 ++++ .../mmseqs/linclust/tests/main.nf.test | 56 ++++ .../mmseqs/linclust/tests/main.nf.test.snap | 22 ++ .../mmseqs/linclust/tests/nextflow.config | 10 + .../nf-core/mmseqs/linclust/tests/tags.yml | 2 + modules/nf-core/prokka/environment.yml | 5 + modules/nf-core/prokka/main.nf | 52 ++++ modules/nf-core/prokka/meta.yml | 161 +++++++++++ modules/nf-core/prokka/tests/main.nf.test | 50 ++++ .../nf-core/prokka/tests/main.nf.test.snap | 95 +++++++ modules/nf-core/prokka/tests/tags.yml | 2 + 43 files changed, 2489 insertions(+) create mode 100644 modules/nf-core/famsa/align/environment.yml create mode 100644 modules/nf-core/famsa/align/main.nf create mode 100644 modules/nf-core/famsa/align/meta.yml create mode 100644 modules/nf-core/famsa/align/tests/main.nf.test create mode 100644 modules/nf-core/famsa/align/tests/main.nf.test.snap create mode 100644 modules/nf-core/famsa/align/tests/tags.yml create mode 100644 modules/nf-core/hmmer/hmmalign/environment.yml create mode 100644 modules/nf-core/hmmer/hmmalign/main.nf create mode 100644 modules/nf-core/hmmer/hmmalign/meta.yml create mode 100644 modules/nf-core/hmmer/hmmbuild/environment.yml create mode 100644 modules/nf-core/hmmer/hmmbuild/main.nf create mode 100644 modules/nf-core/hmmer/hmmbuild/meta.yml create mode 100644 modules/nf-core/hmmer/hmmbuild/tests/main.nf.test create mode 100644 modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap create mode 100644 modules/nf-core/hmmer/hmmsearch/environment.yml create mode 100644 modules/nf-core/hmmer/hmmsearch/main.nf create mode 100644 modules/nf-core/hmmer/hmmsearch/meta.yml create mode 100644 modules/nf-core/hmmer/hmmsearch/tests/main.nf.test create mode 100644 modules/nf-core/hmmer/hmmsearch/tests/main.nf.test.snap create mode 100644 modules/nf-core/hmmer/hmmsearch/tests/tags.yml create mode 100644 modules/nf-core/mafft/environment.yml create mode 100644 modules/nf-core/mafft/main.nf create mode 100644 modules/nf-core/mafft/meta.yml create mode 100644 modules/nf-core/mafft/tests/main.nf.test create mode 100644 modules/nf-core/mafft/tests/main.nf.test.snap create mode 100644 modules/nf-core/mafft/tests/tags.yml create mode 100644 modules/nf-core/mmseqs/cluster/environment.yml create mode 100644 modules/nf-core/mmseqs/cluster/main.nf create mode 100644 modules/nf-core/mmseqs/cluster/meta.yml create mode 100644 modules/nf-core/mmseqs/linclust/environment.yml create mode 100644 modules/nf-core/mmseqs/linclust/main.nf create mode 100644 modules/nf-core/mmseqs/linclust/meta.yml create mode 100644 modules/nf-core/mmseqs/linclust/tests/main.nf.test create mode 100644 modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap create mode 100644 modules/nf-core/mmseqs/linclust/tests/nextflow.config create mode 100644 modules/nf-core/mmseqs/linclust/tests/tags.yml create mode 100644 modules/nf-core/prokka/environment.yml create mode 100644 modules/nf-core/prokka/main.nf create mode 100644 modules/nf-core/prokka/meta.yml create mode 100644 modules/nf-core/prokka/tests/main.nf.test create mode 100644 modules/nf-core/prokka/tests/main.nf.test.snap create mode 100644 modules/nf-core/prokka/tests/tags.yml diff --git a/modules.json b/modules.json index ab0fb0d..053c989 100644 --- a/modules.json +++ b/modules.json @@ -5,10 +5,50 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "famsa/align": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "hmmer/hmmalign": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "hmmer/hmmbuild": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "hmmer/hmmsearch": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "mafft": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "mmseqs/cluster": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "mmseqs/linclust": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] + }, + "prokka": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/famsa/align/environment.yml b/modules/nf-core/famsa/align/environment.yml new file mode 100644 index 0000000..08b6f88 --- /dev/null +++ b/modules/nf-core/famsa/align/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::famsa=2.2.2 diff --git a/modules/nf-core/famsa/align/main.nf b/modules/nf-core/famsa/align/main.nf new file mode 100644 index 0000000..096d8ff --- /dev/null +++ b/modules/nf-core/famsa/align/main.nf @@ -0,0 +1,53 @@ + + +process FAMSA_ALIGN { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/famsa:2.2.2--h9f5acd7_0': + 'biocontainers/famsa:2.2.2--h9f5acd7_0' }" + + input: + tuple val(meta) , path(fasta) + tuple val(meta2), path(tree) + val(compress) + + output: + tuple val(meta), path("*.aln{.gz,}"), emit: alignment + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def compress_args = compress ? '-gz' : '' + def prefix = task.ext.prefix ?: "${meta.id}" + def options_tree = tree ? "-gt import $tree" : "" + """ + famsa $options_tree \\ + $compress_args \\ + $args \\ + -t ${task.cpus} \\ + ${fasta} \\ + ${prefix}.aln${compress ? '.gz':''} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + famsa: \$( famsa -help 2>&1 | head -n 2 | tail -n 1 | sed 's/ version //g' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.aln${compress ? '.gz' : ''} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + famsa: \$( famsa -help 2>&1 | head -n 2 | tail -n 1 | sed 's/ version //g' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/famsa/align/meta.yml b/modules/nf-core/famsa/align/meta.yml new file mode 100644 index 0000000..c12a99d --- /dev/null +++ b/modules/nf-core/famsa/align/meta.yml @@ -0,0 +1,63 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "famsa_align" +description: Aligns sequences using FAMSA +keywords: + - alignment + - MSA + - genomics +tools: + - "famsa": + description: "Algorithm for large-scale multiple sequence alignments" + homepage: "https://github.com/refresh-bio/FAMSA" + documentation: "https://github.com/refresh-bio/FAMSA" + tool_dev_url: "https://github.com/refresh-bio/FAMSA" + doi: "10.1038/srep33964" + licence: ["GPL v3"] + identifier: biotools:famsa +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test']` + - fasta: + type: file + description: Input sequences in FASTA format + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing tree information + e.g. `[ id:'test_tree']` + - tree: + type: file + description: Input guide tree in Newick format + pattern: "*.{dnd}" + - - compress: + type: boolean + description: Flag representing whether the output MSA should be compressed. + Set to true to enable/false to disable compression. Compression is handled + by passing '-gz' to FAMSA along with any other options specified in task.ext.args. +output: + - alignment: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test']` + - "*.aln{.gz,}": + type: file + description: Alignment file, in FASTA format. May be gzipped or uncompressed, + depending on if compress is set to true or false + pattern: "*.aln{.gz,}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@luisas" + - "@JoseEspinosa" +maintainers: + - "@luisas" + - "@JoseEspinosa" diff --git a/modules/nf-core/famsa/align/tests/main.nf.test b/modules/nf-core/famsa/align/tests/main.nf.test new file mode 100644 index 0000000..8e91c30 --- /dev/null +++ b/modules/nf-core/famsa/align/tests/main.nf.test @@ -0,0 +1,96 @@ +nextflow_process { + + name "Test Process FAMSA_ALIGN" + script "../main.nf" + process "FAMSA_ALIGN" + + tag "modules" + tag "modules_nfcore" + tag "famsa" + tag "famsa/align" + tag "famsa/guidetree" + + test("sarscov2 - fasta - uncompressed") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/contigs.fasta', checkIfExists: true) + ] + input[1] = [[:],[]] + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.alignment).match("alignment_uncompressed")}, + { assert snapshot(process.out.versions).match("versions0") } + ) + } + + } + + test("sarscov2 - fasta - compressed") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/contigs.fasta', checkIfExists: true) + ] + input[1] = [[:],[]] + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.alignment).match("alignment_compressed")}, + { assert snapshot(process.out.versions).match("versions1") } + ) + } + + } + + test("sarscov2 - fasta - guide_tree") { + + setup { + run("FAMSA_GUIDETREE") { + script "../../guidetree/main.nf" + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/contigs.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/contigs.fasta', checkIfExists: true) + ] + input[1] = FAMSA_GUIDETREE.out.tree.collect{ meta, tree -> tree }.map{ tree -> [[ id: 'test_summary'], tree]} + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.alignment).match("with_guide_tree_alignment")}, + { assert snapshot(process.out.versions).match("with_guide_tree_versions") } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/famsa/align/tests/main.nf.test.snap b/modules/nf-core/famsa/align/tests/main.nf.test.snap new file mode 100644 index 0000000..95bbbf1 --- /dev/null +++ b/modules/nf-core/famsa/align/tests/main.nf.test.snap @@ -0,0 +1,57 @@ +{ + "alignment_uncompressed": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.aln:md5,7cf7375f2ba360814ea978731838b972" + ] + ] + ], + "timestamp": "2024-02-09T19:08:43.577982822" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,7d9e0a8c263fa6d9017075fe88c9e9dc" + ] + ], + "timestamp": "2024-02-09T19:08:43.670136799" + }, + "with_guide_tree_alignment": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.aln.gz:md5,7cf7375f2ba360814ea978731838b972" + ] + ] + ], + "timestamp": "2024-02-09T19:10:05.167368314" + }, + "alignment_compressed": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.aln.gz:md5,7cf7375f2ba360814ea978731838b972" + ] + ] + ], + "timestamp": "2024-02-09T19:09:25.819156831" + }, + "with_guide_tree_versions": { + "content": [ + [ + "versions.yml:md5,7d9e0a8c263fa6d9017075fe88c9e9dc" + ] + ], + "timestamp": "2024-02-09T19:10:05.231995851" + } +} \ No newline at end of file diff --git a/modules/nf-core/famsa/align/tests/tags.yml b/modules/nf-core/famsa/align/tests/tags.yml new file mode 100644 index 0000000..d010f3b --- /dev/null +++ b/modules/nf-core/famsa/align/tests/tags.yml @@ -0,0 +1,2 @@ +famsa/align: + - "modules/nf-core/famsa/align/**" diff --git a/modules/nf-core/hmmer/hmmalign/environment.yml b/modules/nf-core/hmmer/hmmalign/environment.yml new file mode 100644 index 0000000..7c62eac --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::hmmer=3.3.2 diff --git a/modules/nf-core/hmmer/hmmalign/main.nf b/modules/nf-core/hmmer/hmmalign/main.nf new file mode 100644 index 0000000..00ae8da --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/main.nf @@ -0,0 +1,35 @@ +process HMMER_HMMALIGN { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/hmmer:3.3.2--h1b792b2_1' : + 'biocontainers/hmmer:3.3.2--h1b792b2_1' }" + + input: + tuple val(meta), path(fasta) + path hmm + + output: + tuple val(meta), path("*.sthlm.gz"), emit: sthlm + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + hmmalign \\ + $args \\ + $hmm \\ + $fasta | gzip -c > ${prefix}.sthlm.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(hmmalign -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmmer/hmmalign/meta.yml b/modules/nf-core/hmmer/hmmalign/meta.yml new file mode 100644 index 0000000..366cf4f --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/meta.yml @@ -0,0 +1,53 @@ +name: hmmer_hmmalign +description: hmmalign from the HMMER suite aligns a number of sequences to an HMM + profile +keywords: + - alignment + - HMMER + - profile + - amino acid + - nucleotide +tools: + - hmmer: + description: Biosequence analysis using profile hidden Markov models + homepage: http://hmmer.org/ + documentation: http://hmmer.org/documentation.html + doi: "10.1371/journal.pcbi.1002195" + licence: ["BSD-3-Clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Amino acid or nucleotide gzipped compressed fasta file + pattern: "*.{fna.gz,faa.gz,fasta.gz,fa.gz}" + - - hmm: + type: file + description: A gzipped HMM file + pattern: "*.hmm.gz" +output: + - sthlm: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sthlm.gz": + type: file + description: Multiple alignment in gzipped Stockholm format + pattern: "*.sthlm.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@erikrikarddaniel" + - "@jfy133" +maintainers: + - "@erikrikarddaniel" + - "@jfy133" diff --git a/modules/nf-core/hmmer/hmmbuild/environment.yml b/modules/nf-core/hmmer/hmmbuild/environment.yml new file mode 100644 index 0000000..7c62eac --- /dev/null +++ b/modules/nf-core/hmmer/hmmbuild/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::hmmer=3.3.2 diff --git a/modules/nf-core/hmmer/hmmbuild/main.nf b/modules/nf-core/hmmer/hmmbuild/main.nf new file mode 100644 index 0000000..b4629cb --- /dev/null +++ b/modules/nf-core/hmmer/hmmbuild/main.nf @@ -0,0 +1,56 @@ +process HMMER_HMMBUILD { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/hmmer:3.3.2--h87f3376_2': + 'biocontainers/hmmer:3.3.2--h1b792b2_1' }" + + input: + tuple val(meta), path(alignment) + path mxfile + + output: + tuple val(meta), path("*.hmm.gz"), emit: hmm + path "*.hmmbuild.txt", emit: hmmbuildout + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def mxfileopt = mxfile ? "--mxfile ${mxfile}" : "" + + """ + hmmbuild \\ + $args \\ + --cpu $task.cpus \\ + -n ${prefix} \\ + -o ${prefix}.hmmbuild.txt \\ + ${mxfileopt} \\ + ${prefix}.hmm \\ + $alignment + + gzip ${prefix}.hmm + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(echo \$(hmmbuild -h | grep HMMER | sed 's/# HMMER //' | sed 's/ .*//' 2>&1)) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo | gzip > ${prefix}.hmm.gz + touch ${prefix}.hmmbuild.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(echo \$(hmmbuild -h | grep HMMER | sed 's/# HMMER //' | sed 's/ .*//' 2>&1)) + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmmer/hmmbuild/meta.yml b/modules/nf-core/hmmer/hmmbuild/meta.yml new file mode 100644 index 0000000..9be14fe --- /dev/null +++ b/modules/nf-core/hmmer/hmmbuild/meta.yml @@ -0,0 +1,56 @@ +name: "hmmer_hmmbuild" +description: create an hmm profile from a multiple sequence alignment +keywords: + - search + - hidden Markov model + - HMM + - hmmer + - hmmsearch +tools: + - "hmmer": + description: "Biosequence analysis using profile hidden Markov models" + homepage: "http://hmmer.org" + documentation: "http://hmmer.org/documentation.html" + tool_dev_url: "https://github.com/EddyRivasLab/hmmer" + doi: "10.1371/journal.pcbi.1002195" + licence: ["BSD"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - alignment: + type: file + description: multiple sequence alignment in fasta, clustal, stockholm or phylip + format + pattern: "*" + - - mxfile: + type: file + description: read substitution score matrix, for use when building profiles + from single sequences (--singlemx option) + pattern: "*" +output: + - hmm: + - meta: + type: file + description: Gzipped HMM file + pattern: "*.{hmm.gz}" + - "*.hmm.gz": + type: file + description: Gzipped HMM file + pattern: "*.{hmm.gz}" + - hmmbuildout: + - "*.hmmbuild.txt": + type: file + description: HMM build output + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@erikrikarddaniel" +maintainers: + - "@erikrikarddaniel" diff --git a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test new file mode 100644 index 0000000..d7c0582 --- /dev/null +++ b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test @@ -0,0 +1,66 @@ + +nextflow_process { + + name "Test Process HMMER_HMMBUILD" + script "../main.nf" + process "HMMER_HMMBUILD" + + tag "modules" + tag "modules_nfcore" + tag "hmmer" + tag "hmmer/hmmbuild" + + test("test-hmmer-hmmbuild") { + + when { + process { + """ + input[0] = [ + [ id: 'PF14720' ], // meta map + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) + ] + input[1] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.hmmbuildout[0]).text.contains('CPU time:') }, + { assert snapshot( + file(process.out.hmm[0][1]).name, // unstable + file(process.out.hmmbuildout[0]).name, // unstable + process.out.versions + ).match() + } + ) + } + } + + test("test-hmmer-hmmbuild-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id: 'PF14720' ], // meta map + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) + ] + input[1] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap new file mode 100644 index 0000000..8cdff17 --- /dev/null +++ b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap @@ -0,0 +1,55 @@ +{ + "test-hmmer-hmmbuild-stub": { + "content": [ + { + "0": [ + [ + { + "id": "PF14720" + }, + "PF14720.hmm.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "PF14720.hmmbuild.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "2": [ + "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + ], + "hmm": [ + [ + { + "id": "PF14720" + }, + "PF14720.hmm.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "hmmbuildout": [ + "PF14720.hmmbuild.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "versions": [ + "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T21:38:44.751216" + }, + "test-hmmer-hmmbuild": { + "content": [ + "PF14720.hmm.gz", + "PF14720.hmmbuild.txt", + [ + "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T21:49:25.772308" + } +} \ No newline at end of file diff --git a/modules/nf-core/hmmer/hmmsearch/environment.yml b/modules/nf-core/hmmer/hmmsearch/environment.yml new file mode 100644 index 0000000..c5ddec5 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::hmmer=3.4 diff --git a/modules/nf-core/hmmer/hmmsearch/main.nf b/modules/nf-core/hmmer/hmmsearch/main.nf new file mode 100644 index 0000000..603a865 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/main.nf @@ -0,0 +1,70 @@ +process HMMER_HMMSEARCH { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/hmmer:3.4--hdbdd923_1' : + 'biocontainers/hmmer:3.4--hdbdd923_1' }" + + input: + tuple val(meta), path(hmmfile), path(seqdb), val(write_align), val(write_target), val(write_domain) + + output: + tuple val(meta), path('*.txt.gz') , emit: output + tuple val(meta), path('*.sto.gz') , emit: alignments , optional: true + tuple val(meta), path('*.tbl.gz') , emit: target_summary, optional: true + tuple val(meta), path('*.domtbl.gz'), emit: domain_summary, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output = "${prefix}.txt" + alignment = write_align ? "-A ${prefix}.sto" : '' + target_summary = write_target ? "--tblout ${prefix}.tbl" : '' + domain_summary = write_domain ? "--domtblout ${prefix}.domtbl" : '' + """ + hmmsearch \\ + $args \\ + --cpu $task.cpus \\ + -o $output \\ + $alignment \\ + $target_summary \\ + $domain_summary \\ + $hmmfile \\ + $seqdb + + gzip --no-name *.txt \\ + ${write_align ? '*.sto' : ''} \\ + ${write_target ? '*.tbl' : ''} \\ + ${write_domain ? '*.domtbl' : ''} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(hmmsearch -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch "${prefix}.txt" + ${write_align ? "touch ${prefix}.sto" : ''} \\ + ${write_target ? "touch ${prefix}.tbl" : ''} \\ + ${write_domain ? "touch ${prefix}.domtbl" : ''} + + gzip --no-name *.txt \\ + ${write_align ? '*.sto' : ''} \\ + ${write_target ? '*.tbl' : ''} \\ + ${write_domain ? '*.domtbl' : ''} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(hmmsearch -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmmer/hmmsearch/meta.yml b/modules/nf-core/hmmer/hmmsearch/meta.yml new file mode 100644 index 0000000..0e07865 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/meta.yml @@ -0,0 +1,92 @@ +name: hmmer_hmmsearch +description: search profile(s) against a sequence database +keywords: + - Hidden Markov Model + - HMM + - hmmer + - hmmsearch +tools: + - hmmer: + description: Biosequence analysis using profile hidden Markov models + homepage: http://hmmer.org/ + documentation: http://hmmer.org/documentation.html + tool_dev_url: https://github.com/EddyRivasLab/hmmer + doi: "10.1371/journal.pcbi.1002195" + licence: ["BSD"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - hmmfile: + type: file + description: One or more HMM profiles created with hmmbuild + pattern: "*.{hmm,hmm.gz}" + - seqdb: + type: file + description: Database of sequences in FASTA format + pattern: "*.{fasta,fna,faa,fa,fasta.gz,fna.gz,faa.gz,fa.gz}" + - write_align: + type: boolean + description: Flag to save optional alignment output. Specify with 'true' to + save. + - write_target: + type: boolean + description: Flag to save optional per target summary. Specify with 'true' to + save. + - write_domain: + type: boolean + description: Flag to save optional per domain summary. Specify with 'true' to + save. +output: + - output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt.gz": + type: file + description: Human readable output summarizing hmmsearch results + pattern: "*.{txt.gz}" + - alignments: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sto.gz": + type: file + description: Optional multiple sequence alignment (MSA) in Stockholm format + pattern: "*.{sto.gz}" + - target_summary: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbl.gz": + type: file + description: Optional tabular (space-delimited) summary of per-target output + pattern: "*.{tbl.gz}" + - domain_summary: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.domtbl.gz": + type: file + description: Optional tabular (space-delimited) summary of per-domain output + pattern: "*.{domtbl.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Midnighter" +maintainers: + - "@Midnighter" diff --git a/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test b/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test new file mode 100644 index 0000000..f1b59e9 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test @@ -0,0 +1,126 @@ +nextflow_process { + + name "Test Process HMMER_HMMSEARCH" + script "../main.nf" + process "HMMER_HMMSEARCH" + + tag "modules" + tag "modules_nfcore" + tag "hmmer" + tag "hmmer/hmmsearch" + + test("hmmer/hmmsearch") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true), + false, + false, + false + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.output[0][1]).linesGzip.toString().contains('[ok]') }, + { assert snapshot(process.out.versions).match() } + ) + } + + } + + test("hmmer/hmmsearch - optional") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true), + true, + true, + true + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.output.get(0).get(1)).linesGzip.toString().contains('[ok]') }, + { assert path(process.out.target_summary.get(0).get(1)).linesGzip.toString().contains('[ok]') }, + { assert snapshot( + process.out.alignments + + process.out.versions + ).match() } + ) + } + + } + + test("hmmer/hmmsearch - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true), + false, + false, + false + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("hmmer/hmmsearch - optional - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true), + file('https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true), + true, + true, + true + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test.snap b/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test.snap new file mode 100644 index 0000000..e6b2277 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/tests/main.nf.test.snap @@ -0,0 +1,175 @@ +{ + "hmmer/hmmsearch": { + "content": [ + [ + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-28T12:18:47.293093635" + }, + "hmmer/hmmsearch - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ], + "alignments": [ + + ], + "domain_summary": [ + + ], + "output": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "target_summary": [ + + ], + "versions": [ + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-28T12:18:57.862047944" + }, + "hmmer/hmmsearch - optional - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sto.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.domtbl.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ], + "alignments": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sto.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "domain_summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test.domtbl.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "target_summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-28T12:19:03.49192788" + }, + "hmmer/hmmsearch - optional": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sto.gz:md5,5c44c289b9e36aa1f7f3afae2005fbb7" + ], + "versions.yml:md5,37393b1da5a14113d3290ab8b3b4c40f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-28T12:18:52.725638562" + } +} \ No newline at end of file diff --git a/modules/nf-core/hmmer/hmmsearch/tests/tags.yml b/modules/nf-core/hmmer/hmmsearch/tests/tags.yml new file mode 100644 index 0000000..1776d21 --- /dev/null +++ b/modules/nf-core/hmmer/hmmsearch/tests/tags.yml @@ -0,0 +1,2 @@ +hmmer/hmmsearch: + - "modules/nf-core/hmmer/hmmsearch/**" diff --git a/modules/nf-core/mafft/environment.yml b/modules/nf-core/mafft/environment.yml new file mode 100644 index 0000000..97a13e6 --- /dev/null +++ b/modules/nf-core/mafft/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mafft=7.520 + - conda-forge::pigz=2.8 diff --git a/modules/nf-core/mafft/main.nf b/modules/nf-core/mafft/main.nf new file mode 100644 index 0000000..f09a0c9 --- /dev/null +++ b/modules/nf-core/mafft/main.nf @@ -0,0 +1,75 @@ +process MAFFT { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-12eba4a074f913c639117640936668f5a6a01da6:425707898cf4f85051b77848be253b88f1d2298a-0': + 'biocontainers/mulled-v2-12eba4a074f913c639117640936668f5a6a01da6:425707898cf4f85051b77848be253b88f1d2298a-0' }" + + input: + tuple val(meta) , path(fasta) + tuple val(meta2), path(add) + tuple val(meta3), path(addfragments) + tuple val(meta4), path(addfull) + tuple val(meta5), path(addprofile) + tuple val(meta6), path(addlong) + val(compress) + + output: + tuple val(meta), path("*.fas{.gz,}"), emit: fas + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def add = add ? "--add <(unpigz -cdf ${add})" : '' + def addfragments = addfragments ? "--addfragments <(unpigz -cdf ${addfragments})" : '' + def addfull = addfull ? "--addfull <(unpigz -cdf ${addfull})" : '' + def addprofile = addprofile ? "--addprofile <(unpigz -cdf ${addprofile})" : '' + def addlong = addlong ? "--addlong <(unpigz -cdf ${addlong})" : '' + def write_output = compress ? " | pigz -cp ${task.cpus} > ${prefix}.fas.gz" : "> ${prefix}.fas" + // this will not preserve MAFFTs return value, but mafft crashes when it receives a process substitution + if ("$fasta" == "${prefix}.fas" ) error "Input and output names are the same, set prefix in module configuration to disambiguate!" + """ + mafft \\ + --thread ${task.cpus} \\ + ${add} \\ + ${addfragments} \\ + ${addfull} \\ + ${addprofile} \\ + ${addlong} \\ + ${args} \\ + ${fasta} \\ + ${write_output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mafft: \$(mafft --version 2>&1 | sed 's/^v//' | sed 's/ (.*)//') + pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz\\w*//' )) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def add = add ? "--add ${add}" : '' + def addfragments = addfragments ? "--addfragments ${addfragments}" : '' + def addfull = addfull ? "--addfull ${addfull}" : '' + def addprofile = addprofile ? "--addprofile ${addprofile}" : '' + def addlong = addlong ? "--addlong ${addlong}" : '' + if ("$fasta" == "${prefix}.fas" ) error "Input and output names are the same, set prefix in module configuration to disambiguate!" + """ + touch ${prefix}.fas${compress ? '.gz' : ''} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mafft: \$(mafft --version 2>&1 | sed 's/^v//' | sed 's/ (.*)//') + pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz\\w*//' )) + END_VERSIONS + """ + +} diff --git a/modules/nf-core/mafft/meta.yml b/modules/nf-core/mafft/meta.yml new file mode 100644 index 0000000..ed5e1ea --- /dev/null +++ b/modules/nf-core/mafft/meta.yml @@ -0,0 +1,108 @@ +name: mafft +description: Multiple sequence alignment using MAFFT +keywords: + - fasta + - msa + - multiple sequence alignment +tools: + - "mafft": + description: Multiple alignment program for amino acid or nucleotide sequences + based on fast Fourier transform + homepage: https://mafft.cbrc.jp/alignment/software/ + documentation: https://mafft.cbrc.jp/alignment/software/manual/manual.html + tool_dev_url: https://mafft.cbrc.jp/alignment/software/source.html + doi: "10.1093/nar/gkf436" + licence: ["BSD"] + identifier: biotools:MAFFT + - "pigz": + description: "Parallel implementation of the gzip algorithm." + homepage: "https://zlib.net/pigz/" + documentation: "https://zlib.net/pigz/pigz.pdf" + identifier: biotools:MAFFT +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA file containing the sequences to align. May be gzipped or + uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - add: + type: file + description: FASTA file containing sequences to align to the sequences in `fasta` + using `--add`. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - addfragments: + type: file + description: FASTA file containing sequences to align to the sequences in `fasta` + using `--addfragments`. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - addfull: + type: file + description: FASTA file containing sequences to align to the sequences in `fasta` + using `--addfull`. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - meta5: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - addprofile: + type: file + description: FASTA file containing sequences to align to the sequences in `fasta` + using `--addprofile`. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - meta6: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - addlong: + type: file + description: FASTA file containing sequences to align to the sequences in `fasta` + using `--addlong`. May be gzipped or uncompressed. + pattern: "*.{fa,fasta}{.gz,}" + - - compress: + type: boolean + description: Flag representing whether the output MSA should be compressed. + Set to true to enable/false to disable compression. Compression is done using + pigz, and is multithreaded. +output: + - fas: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fas{.gz,}": + type: file + description: Aligned sequences in FASTA format. May be gzipped or uncompressed. + pattern: "*.fas{.gz,}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@MillironX" +maintainers: + - "@MillironX" + - "@Joon-Klaps" diff --git a/modules/nf-core/mafft/tests/main.nf.test b/modules/nf-core/mafft/tests/main.nf.test new file mode 100644 index 0000000..683979f --- /dev/null +++ b/modules/nf-core/mafft/tests/main.nf.test @@ -0,0 +1,248 @@ +nextflow_process { + + name "Test Process MAFFT" + script "../main.nf" + process "MAFFT" + tag "modules" + tag "modules_nfcore" + tag "mafft" + + test("SARS-CoV-2 scaffolds fasta - uncompressed") { + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/scaffolds.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [[:], []] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - uncompressed")} + ) + } + + } + + test("SARS-CoV-2 scaffolds fasta - compressed") { + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/scaffolds.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [[:], []] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - compressed")} + ) + } + + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites fasta normal") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [[ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[2] = [[:], []] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta normal") } + ) + } + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites fasta fragments") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta fragments") } + ) + } + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites fasta full") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [[:], []] + input[3] = [[ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta full") } + ) + } + + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites fasta profile") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [[:], []] + input[3] = [[:], []] + input[4] = [[ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta profile") } + ) + } + + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites fasta long") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [[:], []] + input[2] = [[:], []] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta long") } + ) + } + + } + + test("SARS-CoV-2 scaffolds fasta - add informative sites all sites fasta multiple") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[1] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/all_sites.fas', checkIfExists: true) + ] + input[2] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/informative_sites.fas', checkIfExists: true) + ] + input[3] = [[:], []] + input[4] = [[:], []] + input[5] = [[:], []] + input[6] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("SARS-CoV-2 scaffolds fasta - add informative sites fasta multiple") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/mafft/tests/main.nf.test.snap b/modules/nf-core/mafft/tests/main.nf.test.snap new file mode 100644 index 0000000..c14ad08 --- /dev/null +++ b/modules/nf-core/mafft/tests/main.nf.test.snap @@ -0,0 +1,250 @@ +{ + "SARS-CoV-2 scaffolds fasta - uncompressed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas:md5,23426611f4a0df532b6708f072bd445b" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas:md5,23426611f4a0df532b6708f072bd445b" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:08:41.735774847" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta multiple": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,aed7f866c3a20dc9d2f2b4ad73515961" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,aed7f866c3a20dc9d2f2b4ad73515961" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:10:38.940555785" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta normal": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,a57a34f1c566dea114dc1b13416536d4" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,a57a34f1c566dea114dc1b13416536d4" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:09:35.656248409" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta long": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,e8868da70d1f3050a8daaee0e53b2fd9" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,e8868da70d1f3050a8daaee0e53b2fd9" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:10:26.372655394" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta profile": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,c2b5caf39beff4473878e6aa4036ad43" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,c2b5caf39beff4473878e6aa4036ad43" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:10:14.039053212" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta fragments": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,aed7f866c3a20dc9d2f2b4ad73515961" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,aed7f866c3a20dc9d2f2b4ad73515961" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:09:49.737364197" + }, + "SARS-CoV-2 scaffolds fasta - add informative sites fasta full": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,611cb0a65195a282f110f7f56e310c66" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,611cb0a65195a282f110f7f56e310c66" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:10:02.952480822" + }, + "SARS-CoV-2 scaffolds fasta - compressed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,23426611f4a0df532b6708f072bd445b" + ] + ], + "1": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ], + "fas": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fas.gz:md5,23426611f4a0df532b6708f072bd445b" + ] + ], + "versions": [ + "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + ] + } + ], + "timestamp": "2024-02-09T19:09:21.096197597" + } +} \ No newline at end of file diff --git a/modules/nf-core/mafft/tests/tags.yml b/modules/nf-core/mafft/tests/tags.yml new file mode 100644 index 0000000..caddc3c --- /dev/null +++ b/modules/nf-core/mafft/tests/tags.yml @@ -0,0 +1,2 @@ +mafft: + - modules/nf-core/mafft/** diff --git a/modules/nf-core/mmseqs/cluster/environment.yml b/modules/nf-core/mmseqs/cluster/environment.yml new file mode 100644 index 0000000..1854759 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/cluster/main.nf b/modules/nf-core/mmseqs/cluster/main.nf new file mode 100644 index 0000000..408e427 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/main.nf @@ -0,0 +1,61 @@ +process MMSEQS_CLUSTER { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(db_input) + + output: + tuple val(meta), path("${prefix}/"), emit: db_cluster + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: "*.dbtype" + prefix = task.ext.prefix ?: "${meta.id}" + if ("$db_input" == "${prefix}") error "Input and output names of databases are the same, set prefix in module configuration to disambiguate!" + + """ + mkdir -p ${prefix} + # Extract files with specified args based suffix | remove suffix | isolate longest common substring of files + DB_INPUT_PATH_NAME=\$(find -L "$db_input/" -maxdepth 1 -name "$args2" | sed 's/\\.[^.]*\$//' | sed -e 'N;s/^\\(.*\\).*\\n\\1.*\$/\\1\\n\\1/;D' ) + + mmseqs \\ + cluster \\ + \$DB_INPUT_PATH_NAME \\ + ${prefix}/${prefix} \\ + tmp1 \\ + $args \\ + --threads ${task.cpus} \\ + --compressed 1 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p ${prefix} + + touch ${prefix}/${prefix}.{0..9} + touch ${prefix}/${prefix}.dbtype + touch ${prefix}/${prefix}.index + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/mmseqs/cluster/meta.yml b/modules/nf-core/mmseqs/cluster/meta.yml new file mode 100644 index 0000000..ec97485 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/meta.yml @@ -0,0 +1,48 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "mmseqs_cluster" +description: Cluster sequences using MMSeqs2 cluster. +keywords: + - protein sequence + - databases + - clustering + - searching + - indexing + - mmseqs2 +tools: + - "mmseqs": + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" + homepage: "https://github.com/soedinglab/MMseqs2" + documentation: "https://mmseqs.com/latest/userguide.pdf" + tool_dev_url: "https://github.com/soedinglab/MMseqs2" + doi: "10.1093/bioinformatics/btw006" + licence: ["GPL v3"] + identifier: biotools:mmseqs +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_input: + type: file + description: Input database +output: + - db_cluster: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}/: + type: file + description: a clustered MMseqs2 database used for clustering + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Joon-Klaps" +maintainers: + - "@Joon-Klaps" diff --git a/modules/nf-core/mmseqs/linclust/environment.yml b/modules/nf-core/mmseqs/linclust/environment.yml new file mode 100644 index 0000000..1854759 --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/linclust/main.nf b/modules/nf-core/mmseqs/linclust/main.nf new file mode 100644 index 0000000..7453c26 --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/main.nf @@ -0,0 +1,61 @@ +process MMSEQS_LINCLUST { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(db_input) + + output: + tuple val(meta), path("${prefix}/"), emit: db_cluster + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: "*.dbtype" + prefix = task.ext.prefix ?: "${meta.id}" + if ("$db_input" == "${prefix}") error "Input and output names of databases are the same, set prefix in module configuration to disambiguate!" + + """ + mkdir -p ${prefix} + # Extract files with specified args based suffix | remove suffix | isolate longest common substring of files + DB_INPUT_PATH_NAME=\$(find -L "$db_input/" -maxdepth 1 -name "$args2" | sed 's/\\.[^.]*\$//' | sed -e 'N;s/^\\(.*\\).*\\n\\1.*\$/\\1\\n\\1/;D' ) + + mmseqs \\ + linclust \\ + \$DB_INPUT_PATH_NAME \\ + ${prefix}/${prefix} \\ + tmp1 \\ + $args \\ + --threads ${task.cpus} \\ + --compressed 1 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p ${prefix} + + touch ${prefix}/${prefix}.{0..9} + touch ${prefix}/${prefix}.dbtype + touch ${prefix}/${prefix}.index + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/mmseqs/linclust/meta.yml b/modules/nf-core/mmseqs/linclust/meta.yml new file mode 100644 index 0000000..986e2d8 --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/meta.yml @@ -0,0 +1,48 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "mmseqs_linclust" +description: Cluster sequences in linear time using MMSeqs2 linclust. +keywords: + - protein sequence + - databases + - clustering + - searching + - indexing + - mmseqs2 +tools: + - "mmseqs": + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" + homepage: "https://github.com/soedinglab/MMseqs2" + documentation: "https://mmseqs.com/latest/userguide.pdf" + tool_dev_url: "https://github.com/soedinglab/MMseqs2" + doi: "10.1093/bioinformatics/btw006" + licence: ["GPL v3"] + identifier: biotools:mmseqs +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_input: + type: file + description: Input database +output: + - db_cluster: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}/: + type: directory + description: a clustered MMseqs2 database + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@vagkaratzas" +maintainers: + - "@vagkaratzas" diff --git a/modules/nf-core/mmseqs/linclust/tests/main.nf.test b/modules/nf-core/mmseqs/linclust/tests/main.nf.test new file mode 100644 index 0000000..9a3b6de --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process MMSEQS_LINCLUST" + script "../main.nf" + process "MMSEQS_LINCLUST" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "mmseqs" + tag "mmseqs/linclust" + tag "untar" + + test("Should cluster an mmseqs database") { + + setup { + run("UNTAR") { + script "modules/nf-core/untar/main.nf" + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = UNTAR.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.db_cluster.size() == 1 }, + { + def all_files = file(process.out.db_cluster[0][1]).listFiles() + def all_file_names = all_files.collect { it.name }.toSorted() + def stable_file_names = [ + 'test_output_cluster.dbtype', + 'test_output_cluster.index' + ] + def stable_files = all_files.findAll { it.name in stable_file_names }.toSorted() + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap new file mode 100644 index 0000000..4d7fb8b --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap @@ -0,0 +1,22 @@ +{ + "Should cluster an mmseqs database": { + "content": [ + [ + "test_output_cluster.0", + "test_output_cluster.1", + "test_output_cluster.dbtype", + "test_output_cluster.index" + ], + [ + "test_output_cluster.dbtype:md5,5c879eb8a8613fd4537b919e7d68d089", + "test_output_cluster.index:md5,38908275cdd5727ae0eb9be017f9ca13" + ], + "versions.yml:md5,65ce4e8b36259f881d11b0d8caaee69a" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-13T10:40:19.482219" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/linclust/tests/nextflow.config b/modules/nf-core/mmseqs/linclust/tests/nextflow.config new file mode 100644 index 0000000..c9259b8 --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: UNTAR { + publishDir = [ enabled : false ] + } + + withName: MMSEQS_LINCLUST { + ext.prefix = "test_output_cluster" + ext.args = '--remove-tmp-files 1 -v 0 ' + } +} diff --git a/modules/nf-core/mmseqs/linclust/tests/tags.yml b/modules/nf-core/mmseqs/linclust/tests/tags.yml new file mode 100644 index 0000000..4aa9f30 --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/tests/tags.yml @@ -0,0 +1,2 @@ +mmseqs/linclust: + - modules/nf-core/mmseqs/linclust/** diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml new file mode 100644 index 0000000..7c9753f --- /dev/null +++ b/modules/nf-core/prokka/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::prokka=1.14.6 diff --git a/modules/nf-core/prokka/main.nf b/modules/nf-core/prokka/main.nf new file mode 100644 index 0000000..adfda03 --- /dev/null +++ b/modules/nf-core/prokka/main.nf @@ -0,0 +1,52 @@ +process PROKKA { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/prokka:1.14.6--pl5321hdfd78af_4' : + 'biocontainers/prokka:1.14.6--pl5321hdfd78af_4' }" + + input: + tuple val(meta), path(fasta) + path proteins + path prodigal_tf + + output: + tuple val(meta), path("${prefix}/*.gff"), emit: gff + tuple val(meta), path("${prefix}/*.gbk"), emit: gbk + tuple val(meta), path("${prefix}/*.fna"), emit: fna + tuple val(meta), path("${prefix}/*.faa"), emit: faa + tuple val(meta), path("${prefix}/*.ffn"), emit: ffn + tuple val(meta), path("${prefix}/*.sqn"), emit: sqn + tuple val(meta), path("${prefix}/*.fsa"), emit: fsa + tuple val(meta), path("${prefix}/*.tbl"), emit: tbl + tuple val(meta), path("${prefix}/*.err"), emit: err + tuple val(meta), path("${prefix}/*.log"), emit: log + tuple val(meta), path("${prefix}/*.txt"), emit: txt + tuple val(meta), path("${prefix}/*.tsv"), emit: tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def proteins_opt = proteins ? "--proteins ${proteins[0]}" : "" + def prodigal_tf = prodigal_tf ? "--prodigaltf ${prodigal_tf[0]}" : "" + """ + prokka \\ + $args \\ + --cpus $task.cpus \\ + --prefix $prefix \\ + $proteins_opt \\ + $prodigal_tf \\ + $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + prokka: \$(echo \$(prokka --version 2>&1) | sed 's/^.*prokka //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/prokka/meta.yml b/modules/nf-core/prokka/meta.yml new file mode 100644 index 0000000..9074573 --- /dev/null +++ b/modules/nf-core/prokka/meta.yml @@ -0,0 +1,161 @@ +name: prokka +description: Whole genome annotation of small genomes (bacterial, archeal, viral) +keywords: + - annotation + - fasta + - prokka +tools: + - prokka: + description: Rapid annotation of prokaryotic genomes + homepage: https://github.com/tseemann/prokka + doi: "10.1093/bioinformatics/btu153" + licence: ["GPL v2"] + identifier: biotools:prokka +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + FASTA file to be annotated. Has to contain at least a non-empty string dummy value. + - - proteins: + type: file + description: FASTA file of trusted proteins to first annotate from (optional) + - - prodigal_tf: + type: file + description: Training file to use for Prodigal (optional) +output: + - gff: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.gff: + type: file + description: annotation in GFF3 format, containing both sequences and annotations + pattern: "*.{gff}" + - gbk: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.gbk: + type: file + description: annotation in GenBank format, containing both sequences and annotations + pattern: "*.{gbk}" + - fna: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.fna: + type: file + description: nucleotide FASTA file of the input contig sequences + pattern: "*.{fna}" + - faa: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.faa: + type: file + description: protein FASTA file of the translated CDS sequences + pattern: "*.{faa}" + - ffn: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.ffn: + type: file + description: nucleotide FASTA file of all the prediction transcripts (CDS, rRNA, + tRNA, tmRNA, misc_RNA) + pattern: "*.{ffn}" + - sqn: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.sqn: + type: file + description: an ASN1 format "Sequin" file for submission to Genbank + pattern: "*.{sqn}" + - fsa: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.fsa: + type: file + description: nucleotide FASTA file of the input contig sequences, used by "tbl2asn" + to create the .sqn file + pattern: "*.{fsa}" + - tbl: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.tbl: + type: file + description: feature Table file, used by "tbl2asn" to create the .sqn file + pattern: "*.{tbl}" + - err: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.err: + type: file + description: unacceptable annotations - the NCBI discrepancy report. + pattern: "*.{err}" + - log: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.log: + type: file + description: contains all the output that Prokka produced during its run + pattern: "*.{log}" + - txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.txt: + type: file + description: statistics relating to the annotated features found + pattern: "*.{txt}" + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.tsv: + type: file + description: tab-separated file of all features (locus_tag,ftype,len_bp,gene,EC_number,COG,product) + pattern: "*.{tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@rpetit3" +maintainers: + - "@rpetit3" diff --git a/modules/nf-core/prokka/tests/main.nf.test b/modules/nf-core/prokka/tests/main.nf.test new file mode 100644 index 0000000..dca19bb --- /dev/null +++ b/modules/nf-core/prokka/tests/main.nf.test @@ -0,0 +1,50 @@ +nextflow_process { + + name "Test Process PROKKA" + script "../main.nf" + process "PROKKA" + + tag "modules" + tag "modules_nfcore" + tag "prokka" + + test("Prokka - sarscov2 - genome.fasta") { + + when { + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)) + ]) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gbk.get(0).get(1)).exists() }, + { assert path(process.out.log.get(0).get(1)).exists() }, + { assert path(process.out.sqn.get(0).get(1)).exists() }, + { assert snapshot( + process.out.gff, + process.out.fna, + process.out.faa, + process.out.ffn, + process.out.fsa, + process.out.tbl, + process.out.err, + process.out.txt, + process.out.tsv, + process.out.versions + ).match() + } + ) + } + + } + +} diff --git a/modules/nf-core/prokka/tests/main.nf.test.snap b/modules/nf-core/prokka/tests/main.nf.test.snap new file mode 100644 index 0000000..874c989 --- /dev/null +++ b/modules/nf-core/prokka/tests/main.nf.test.snap @@ -0,0 +1,95 @@ +{ + "Prokka - sarscov2 - genome.fasta": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,5dbfb8fcf2db020564c16045976a0933" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,787307f29a263e5657cc276ebbf7e2b3" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,a4ceda83262b3c222a6b1f508fb9e24b" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,80f474b5367b7ea5ed23791935f65e34" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,71bbefcb7f12046bcd3263f58cfd5404" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d8f816a066ced94b62d9618b13fb8add" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,b3daedc646fddd422824e2b3e5e9229d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,b40e485ffc8eaf1feacf8d79d9751a33" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,da7c720c3018c5081d6a70b517b7d450" + ] + ], + [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T12:34:20.447734" + } +} \ No newline at end of file diff --git a/modules/nf-core/prokka/tests/tags.yml b/modules/nf-core/prokka/tests/tags.yml new file mode 100644 index 0000000..a2dc7bd --- /dev/null +++ b/modules/nf-core/prokka/tests/tags.yml @@ -0,0 +1,2 @@ +prokka: + - "modules/nf-core/prokka/**" From 821f73e32d90c719c4c6bf5916100c96f3dbf223 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 6 Nov 2024 09:58:44 +0000 Subject: [PATCH 002/139] input samplesheet update to fasta --- assets/samplesheet.csv | 5 ++--- assets/schema_input.json | 15 ++++---------- main.nf | 2 +- .../main.nf | 20 ++----------------- 4 files changed, 9 insertions(+), 33 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 5f653ab..be82566 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,2 @@ -sample,fastq_1,fastq_2 -SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, +sample,fasta +mgnifams_input,input/mgnifams_input.fa diff --git a/assets/schema_input.json b/assets/schema_input.json index a9cb2a2..96ff7d1 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -13,21 +13,14 @@ "errorMessage": "Sample name must be provided and cannot contain spaces", "meta": ["id"] }, - "fastq_1": { + "fasta": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" - }, - "fastq_2": { - "type": "string", - "format": "file-path", - "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^\\S+\\.f(ast)?a(\\.gz)?$", + "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" } }, - "required": ["sample", "fastq_1"] + "required": ["sample", "fasta"] } } diff --git a/main.nf b/main.nf index 7525862..f228396 100644 --- a/main.nf +++ b/main.nf @@ -15,7 +15,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { PROTEINFAMILIES } from './workflows/proteinfamilies' +include { PROTEINFAMILIES } from './workflows/proteinfamilies' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_proteinfamilies_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_proteinfamilies_pipeline' /* diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 8ab5581..416da3f 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -69,22 +69,6 @@ workflow PIPELINE_INITIALISATION { Channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) - .map { - meta, fastq_1, fastq_2 -> - if (!fastq_2) { - return [ meta.id, meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ meta.id, meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } - } - .groupTuple() - .map { samplesheet -> - validateInputSamplesheet(samplesheet) - } - .map { - meta, fastqs -> - return [ meta, fastqs.flatten() ] - } .set { ch_samplesheet } emit: @@ -168,7 +152,7 @@ def toolCitationText() { // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ "Tools used in the workflow included:", - + "MultiQC (Ewels et al. 2016)", "." ].join(' ').trim() @@ -181,7 +165,7 @@ def toolBibliographyText() { // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ - + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " ].join(' ').trim() From 84f89651f0b431f52ceb9581b11b49085585b2ff Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 6 Nov 2024 14:41:20 +0000 Subject: [PATCH 003/139] clustering modules chained --- assets/samplesheet.csv | 1 + conf/test.config | 4 +- modules.json | 5 ++ .../nf-core/mmseqs/createdb/environment.yml | 5 ++ modules/nf-core/mmseqs/createdb/main.nf | 65 +++++++++++++++++++ modules/nf-core/mmseqs/createdb/meta.yml | 51 +++++++++++++++ .../mmseqs/createdb/tests/main.nf.test | 64 ++++++++++++++++++ .../mmseqs/createdb/tests/main.nf.test.snap | 61 +++++++++++++++++ .../nf-core/mmseqs/createdb/tests/tags.yml | 2 + nextflow.config | 3 +- nextflow_schema.json | 17 ++++- workflows/proteinfamilies.nf | 23 +++++++ 12 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/mmseqs/createdb/environment.yml create mode 100644 modules/nf-core/mmseqs/createdb/main.nf create mode 100644 modules/nf-core/mmseqs/createdb/meta.yml create mode 100644 modules/nf-core/mmseqs/createdb/tests/main.nf.test create mode 100644 modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap create mode 100644 modules/nf-core/mmseqs/createdb/tests/tags.yml diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index be82566..b92002e 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,2 +1,3 @@ sample,fasta mgnifams_input,input/mgnifams_input.fa +mgnifams_test2,input/mgnifams_input.fa diff --git a/conf/test.config b/conf/test.config index 23c669c..2f2d25d 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,7 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + // input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + clustering_tool = 'linclust' - } diff --git a/modules.json b/modules.json index 053c989..54db65b 100644 --- a/modules.json +++ b/modules.json @@ -35,6 +35,11 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "mmseqs/createdb": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml new file mode 100644 index 0000000..1854759 --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf new file mode 100644 index 0000000..9487e5b --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -0,0 +1,65 @@ +process MMSEQS_CREATEDB { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(sequence) + + output: + tuple val(meta), path("${prefix}/"), emit: db + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def is_compressed = sequence.getExtension() == "gz" ? true : false + def sequence_name = is_compressed ? sequence.getBaseName() : sequence + """ + if [ "${is_compressed}" == "true" ]; then + gzip -c -d ${sequence} > ${sequence_name} + fi + + mkdir -p ${prefix} + + mmseqs \\ + createdb \\ + ${sequence_name} \\ + ${prefix}/${prefix} \\ + $args \\ + --compressed 1 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p ${prefix} + + touch ${prefix}/${prefix} + touch ${prefix}/${prefix}.dbtype + touch ${prefix}/${prefix}.index + touch ${prefix}/${prefix}.lookup + touch ${prefix}/${prefix}.source + touch ${prefix}/${prefix}_h + touch ${prefix}/${prefix}_h.dbtype + touch ${prefix}/${prefix}_h.index + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/mmseqs/createdb/meta.yml b/modules/nf-core/mmseqs/createdb/meta.yml new file mode 100644 index 0000000..c392a36 --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/meta.yml @@ -0,0 +1,51 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "mmseqs_createdb" +description: Create an MMseqs database from an existing FASTA/Q file +keywords: + - protein sequence + - databases + - clustering + - searching + - indexing + - mmseqs2 +tools: + - "mmseqs": + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" + homepage: "https://github.com/soedinglab/MMseqs2" + documentation: "https://mmseqs.com/latest/userguide.pdf" + tool_dev_url: "https://github.com/soedinglab/MMseqs2" + doi: "10.1093/bioinformatics/btw006" + licence: ["GPL v3"] + identifier: biotools:mmseqs +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - sequence: + type: file + description: Input sequences in FASTA/Q (zipped or unzipped) format to parse + into an mmseqs database + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,fastq,fastq.gz,fq,fq.gz}" +output: + - db: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}/: + type: directory + description: The created MMseqs2 database + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Joon-Klaps" +maintainers: + - "@Joon-Klaps" + - "@vagkaratzas" diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test b/modules/nf-core/mmseqs/createdb/tests/main.nf.test new file mode 100644 index 0000000..d4a4f0c --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test @@ -0,0 +1,64 @@ +nextflow_process { + + name "Test Process MMSEQS_CREATEDB" + script "../main.nf" + process "MMSEQS_CREATEDB" + tag "modules" + tag "modules_nfcore" + tag "mmseqs" + tag "mmseqs/createdb" + + test("Should build an mmseqs db from a contigs fasta file") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fasta/contigs.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.db, + process.out.versions + ).match() + } + ) + } + + } + + test("Should build an mmseqs db from a zipped amino acid sequence file") { + + when { + process { + """ + + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.db, + process.out.versions + ).match() + } + ) + } + + } + +} diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap new file mode 100644 index 0000000..a24c411 --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -0,0 +1,61 @@ +{ + "Should build an mmseqs db from a contigs fasta file": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test:md5,7c3c2c5926cf8fa82e66b9628f680256", + "test.dbtype:md5,c8ed20c23ba91f4577f84c940c86c7db", + "test.index:md5,5b2fd8abd0ad3fee24738af7082e6a6e", + "test.lookup:md5,32f88756dbcb6aaf7b239b0d61730f1b", + "test.source:md5,9ada5b3ea6e1a7e16c4418eb98ae8d9d", + "test_h:md5,8c29f5ed94d83d7115e9c8a883ce358d", + "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", + "test_h.index:md5,87c7c8c6d16018ebfaa6f408391a5ae2" + ] + ] + ], + [ + "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T10:01:44.163384" + }, + "Should build an mmseqs db from a zipped amino acid sequence file": { + "content": [ + [ + [ + { + "id": "test" + }, + [ + "test:md5,4b494965ed7ab67da8ca3f39523eb104", + "test.dbtype:md5,152afd7bf4dbe26f85032eee0269201a", + "test.index:md5,46f9d884e9a7f442fe1cd2ce339734e3", + "test.lookup:md5,3e27cb93d9ee875ad42a6f32f5651bdc", + "test.source:md5,eaa64fc8a5f7ec1ee49b0dcbd1a72e9d", + "test_h:md5,6e798b81c70d191f78939c2dd6223a7f", + "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", + "test_h.index:md5,d5ac49ff56df064b980fa0eb5da57673" + ] + ] + ], + [ + "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T10:01:48.894044" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/tests/tags.yml b/modules/nf-core/mmseqs/createdb/tests/tags.yml new file mode 100644 index 0000000..1f511ab --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/tests/tags.yml @@ -0,0 +1,2 @@ +mmseqs/createdb: + - modules/nf-core/mmseqs/createdb/** diff --git a/nextflow.config b/nextflow.config index 6223c38..cea5bc0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,7 +13,8 @@ params { // Input options input = null - + // Pipeline parameters + clustering_tool = 'cluster' // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index e8835d4..6b4f5a1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -181,18 +181,33 @@ "hidden": true } } + }, + "pipeline_params": { + "title": "Pipeline parameters", + "type": "object", + "description": "Use these parameters to control the flow of the pipeline execution.", + "properties": { + "clustering_tool": { + "type": "string", + "description": "Choose clustering algorithm. Either simple 'cluster' for medium size inputs, or 'linclust' for less sensitive clustering of larger datasets.", + "help_text": "mmseqs algorithms available: 'cluster' or 'linclust'.", + "enum": ["cluster", "linclust"] + } + } } }, "allOf": [ { "$ref": "#/$defs/input_output_options" }, - { "$ref": "#/$defs/institutional_config_options" }, { "$ref": "#/$defs/generic_options" + }, + { + "$ref": "#/$defs/pipeline_params" } ] } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index fe4583e..1fae8f6 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -10,6 +10,15 @@ include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pi include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +// +// MODULE: Installed directly from nf-core/modules +// + +include { MMSEQS_CREATEDB } from '../modules/nf-core/mmseqs/createdb/main' +include { MMSEQS_CLUSTER } from '../modules/nf-core/mmseqs/cluster/main' +include { MMSEQS_LINCLUST } from '../modules/nf-core/mmseqs/linclust/main' + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -25,6 +34,20 @@ workflow PROTEINFAMILIES { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() + // Clustering + MMSEQS_CREATEDB(ch_samplesheet).db + .map { meta, filepath -> + meta.id = meta.id + "_db" + return [ meta, filepath ] + } + .set{ db_ch } + + if (params.clustering_tool == 'cluster') { + MMSEQS_CLUSTER(db_ch) + } else { // fallback: linclust + MMSEQS_LINCLUST(db_ch) + } + // // Collate and save software versions // From e5bc24f3e347689961e19c9ba752223bf9e9195b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 6 Nov 2024 15:56:36 +0000 Subject: [PATCH 004/139] nf-core createtsv test init --- conf/modules.config | 5 +- modules.json | 5 + .../nf-core/mmseqs/createtsv/environment.yml | 5 + modules/nf-core/mmseqs/createtsv/main.nf | 63 +++++ modules/nf-core/mmseqs/createtsv/meta.yml | 70 +++++ .../createtsv/tests/cluster.nextflow.config | 6 + .../mmseqs/createtsv/tests/main.nf.test | 247 ++++++++++++++++++ .../mmseqs/createtsv/tests/main.nf.test.snap | 142 ++++++++++ .../nf-core/mmseqs/createtsv/tests/tags.yml | 2 + .../createtsv/tests/taxonomy.nextflow.config | 7 + workflows/proteinfamilies.nf | 18 +- 11 files changed, 564 insertions(+), 6 deletions(-) create mode 100644 modules/nf-core/mmseqs/createtsv/environment.yml create mode 100644 modules/nf-core/mmseqs/createtsv/main.nf create mode 100644 modules/nf-core/mmseqs/createtsv/meta.yml create mode 100644 modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config create mode 100644 modules/nf-core/mmseqs/createtsv/tests/main.nf.test create mode 100644 modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap create mode 100644 modules/nf-core/mmseqs/createtsv/tests/tags.yml create mode 100644 modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config diff --git a/conf/modules.config b/conf/modules.config index 255b138..787fe70 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,7 +18,10 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - + withName: MMSEQS_CREATETSV { + ext.args2 = '*_clu.dbtype' + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/modules.json b/modules.json index 54db65b..a4a23bd 100644 --- a/modules.json +++ b/modules.json @@ -40,6 +40,11 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "mmseqs/createtsv": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml new file mode 100644 index 0000000..1854759 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf new file mode 100644 index 0000000..dcd4c13 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -0,0 +1,63 @@ + +process MMSEQS_CREATETSV { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(db_result) + tuple val(meta2), path(db_query) + tuple val(meta3), path(db_target) + + output: + tuple val(meta), path("*.tsv"), emit: tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... + def args3 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb + def args4 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + # Extract files with specified args based suffix | remove suffix | isolate longest common substring of files + DB_RESULT_PATH_NAME=\$(find -L "$db_result/" -maxdepth 1 -name "$args2" | sed 's/\\.[^.]*\$//' | sed -e 'N;s/^\\(.*\\).*\\n\\1.*\$/\\1\\n\\1/;D' ) + DB_QUERY_PATH_NAME=\$(find -L "$db_query/" -maxdepth 1 -name "$args3" | sed 's/\\.[^.]*\$//' | sed -e 'N;s/^\\(.*\\).*\\n\\1.*\$/\\1\\n\\1/;D' ) + DB_TARGET_PATH_NAME=\$(find -L "$db_target/" -maxdepth 1 -name "$args4" | sed 's/\\.[^.]*\$//' | sed -e 'N;s/^\\(.*\\).*\\n\\1.*\$/\\1\\n\\1/;D' ) + + mmseqs \\ + createtsv \\ + \$DB_QUERY_PATH_NAME \\ + \$DB_TARGET_PATH_NAME \\ + \$DB_RESULT_PATH_NAME \\ + ${prefix}.tsv \\ + $args \\ + --threads ${task.cpus} \\ + --compressed 1 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mmseqs: \$(mmseqs | grep 'Version' | sed 's/MMseqs2 Version: //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/mmseqs/createtsv/meta.yml b/modules/nf-core/mmseqs/createtsv/meta.yml new file mode 100644 index 0000000..5a50ff3 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/meta.yml @@ -0,0 +1,70 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "mmseqs_createtsv" +description: Create a tsv file from a query and a target database as well as the result + database +keywords: + - protein sequence + - databases + - clustering + - searching + - indexing + - mmseqs2 + - tsv +tools: + - "mmseqs": + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" + homepage: "https://github.com/soedinglab/MMseqs2" + documentation: "https://mmseqs.com/latest/userguide.pdf" + tool_dev_url: "https://github.com/soedinglab/MMseqs2" + doi: "10.1093/bioinformatics/btw006" + licence: ["GPL v3"] + identifier: biotools:mmseqs +input: + # Only when we have meta + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_result: + type: directory + description: an MMseqs2 database with result data + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_query: + type: directory + description: an MMseqs2 database with query data + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_target: + type: directory + description: an MMseqs2 database with target data +output: + #Only when we have meta + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.tsv": + type: file + description: The resulting tsv file created using the query, target and result + MMseqs databases + pattern: "*.{tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Joon-Klaps" +maintainers: + - "@Joon-Klaps" diff --git a/modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config b/modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config new file mode 100644 index 0000000..48fee16 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: MMSEQS_CREATETSV { + ext.args2 = '*_clu.dbtype' + } +} diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test new file mode 100644 index 0000000..1aa7463 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test @@ -0,0 +1,247 @@ +nextflow_process { + + name "Test Process MMSEQS_CREATETSV" + script "../main.nf" + process "MMSEQS_CREATETSV" + + tag "modules" + tag "modules_nfcore" + tag "mmseqs" + tag "mmseqs/taxonomy" + tag "mmseqs/createdb" + tag "mmseqs/databases" + tag "untar" + tag "mmseqs/createtsv" + + test("mmseqs/createtsv - bacteroides_fragilis - taxonomy") { + + config "./taxonomy.nextflow.config" + + setup { + run("MMSEQS_CREATEDB", alias: "MMSEQS_TAXA") { + script "../../createdb/main.nf" + process { + """ + input[0] = [ + [ id:'test_query', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + """ + } + } + run("MMSEQS_DATABASES") { + script "../../databases/main.nf" + process { + """ + input[0] = 'SILVA' + """ + } + } + run("MMSEQS_TAXONOMY") { + script "../../taxonomy/main.nf" + process { + """ + input[0] = MMSEQS_TAXA.out.db + input[1] = MMSEQS_DATABASES.out.database + """ + } + } + } + when { + process { + """ + input[0] = MMSEQS_TAXONOMY.out.db_taxonomy + input[1] = [[:],[]] + input[2] = MMSEQS_TAXA.out.db + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mmseqs/createtsv - sarscov2 - cluster") { + + config "./cluster.nextflow.config" + + setup { + run("UNTAR", alias: "UNTAR_QUERY") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_query', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + run("UNTAR", alias: "UNTAR_TARGET") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_target', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + run("UNTAR", alias: "UNTAR_RESULT") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_result', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + } + + when { + + process { + """ + ch_query = UNTAR_QUERY.out.untar + ch_target = UNTAR_TARGET.out.untar + ch_result = UNTAR_RESULT.out.untar + + input[0] = ch_result + input[1] = ch_query + input[2] = ch_target + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mmseqs/createtsv - bacteroides_fragilis - taxonomy - stub") { + + options "-stub" + config "./taxonomy.nextflow.config" + + setup { + run("MMSEQS_CREATEDB", alias: "MMSEQS_TAXA") { + script "../../createdb/main.nf" + process { + """ + input[0] = [ + [ id:'test_query', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/genome/genome.fna.gz', checkIfExists: true) + ] + """ + } + } + run("MMSEQS_DATABASES") { + script "../../databases/main.nf" + process { + """ + input[0] = 'SILVA' + """ + } + } + run("MMSEQS_TAXONOMY") { + script "../../taxonomy/main.nf" + process { + """ + input[0] = MMSEQS_TAXA.out.db + input[1] = MMSEQS_DATABASES.out.database + """ + } + } + } + when { + process { + """ + input[0] = MMSEQS_TAXONOMY.out.db_taxonomy + input[1] = [[:],[]] + input[2] = MMSEQS_TAXA.out.db + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mmseqs/createtsv - sarscov2 - cluster - stub") { + + options "-stub" + config "./cluster.nextflow.config" + + setup { + run("UNTAR", alias: "UNTAR_QUERY") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_query', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + run("UNTAR", alias: "UNTAR_TARGET") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_target', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + run("UNTAR", alias: "UNTAR_RESULT") { + script "../../../untar/main.nf" + process { + """ + input[0] = [ + [ id:'test_result', single_end:true ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true), + ] + """ + } + } + } + + when { + + process { + """ + ch_query = UNTAR_QUERY.out.untar + ch_target = UNTAR_TARGET.out.untar + ch_result = UNTAR_RESULT.out.untar + + input[0] = ch_result + input[1] = ch_query + input[2] = ch_target + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap new file mode 100644 index 0000000..1087de8 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -0,0 +1,142 @@ +{ + "mmseqs/createtsv - bacteroides_fragilis - taxonomy - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ], + "tsv": [ + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-12T13:55:17.642787" + }, + "mmseqs/createtsv - sarscov2 - cluster - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_result", + "single_end": true + }, + "test_result.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ], + "tsv": [ + [ + { + "id": "test_result", + "single_end": true + }, + "test_result.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-12T13:55:33.645454" + }, + "mmseqs/createtsv - bacteroides_fragilis - taxonomy": { + "content": [ + { + "0": [ + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" + ] + ], + "1": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ], + "tsv": [ + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" + ] + ], + "versions": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-12T13:54:45.718678" + }, + "mmseqs/createtsv - sarscov2 - cluster": { + "content": [ + { + "0": [ + [ + { + "id": "test_result", + "single_end": true + }, + "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + ] + ], + "1": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ], + "tsv": [ + [ + { + "id": "test_result", + "single_end": true + }, + "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + ] + ], + "versions": [ + "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-12T13:55:02.731974" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/tests/tags.yml b/modules/nf-core/mmseqs/createtsv/tests/tags.yml new file mode 100644 index 0000000..e27827f --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/tests/tags.yml @@ -0,0 +1,2 @@ +mmseqs/createtsv: + - "modules/nf-core/mmseqs/createtsv/**" diff --git a/modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config b/modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config new file mode 100644 index 0000000..f08205d --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: MMSEQS_TAXONOMY { + ext.args = '--search-type 2' + } + +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 1fae8f6..5571a86 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -14,9 +14,10 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // MODULE: Installed directly from nf-core/modules // -include { MMSEQS_CREATEDB } from '../modules/nf-core/mmseqs/createdb/main' -include { MMSEQS_CLUSTER } from '../modules/nf-core/mmseqs/cluster/main' -include { MMSEQS_LINCLUST } from '../modules/nf-core/mmseqs/linclust/main' +include { MMSEQS_CREATEDB } from '../modules/nf-core/mmseqs/createdb/main' +include { MMSEQS_CLUSTER } from '../modules/nf-core/mmseqs/cluster/main' +include { MMSEQS_LINCLUST } from '../modules/nf-core/mmseqs/linclust/main' +include { MMSEQS_CREATETSV } from '../modules/nf-core/mmseqs/createtsv/main' /* @@ -43,11 +44,18 @@ workflow PROTEINFAMILIES { .set{ db_ch } if (params.clustering_tool == 'cluster') { - MMSEQS_CLUSTER(db_ch) + cluster_ch = MMSEQS_CLUSTER(db_ch).db_cluster } else { // fallback: linclust - MMSEQS_LINCLUST(db_ch) + cluster_ch = MMSEQS_LINCLUST(db_ch).db_cluster } + // cluster_target_ch = cluster_ch.map { meta, filepath -> + // meta.id = meta.id + "_target" + // return [ meta, filepath ] + // } + // cluster_target_ch.view() + MMSEQS_CREATETSV(db_ch, db_ch, cluster_ch) + // // Collate and save software versions // From 180220624d7a5f9d4b8d161342d927c273a543a9 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 6 Nov 2024 16:17:55 +0000 Subject: [PATCH 005/139] debugged targetdb copy by staging --- conf/modules.config | 4 ---- modules/nf-core/mmseqs/createtsv/main.nf | 2 +- workflows/proteinfamilies.nf | 7 +------ 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 787fe70..f0b0d55 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,10 +18,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - withName: MMSEQS_CREATETSV { - ext.args2 = '*_clu.dbtype' - } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index dcd4c13..29f2e51 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -11,7 +11,7 @@ process MMSEQS_CREATETSV { input: tuple val(meta), path(db_result) tuple val(meta2), path(db_query) - tuple val(meta3), path(db_target) + tuple val(meta3), path(db_target, stageAs: "target") output: tuple val(meta), path("*.tsv"), emit: tsv diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 5571a86..133e85b 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -49,12 +49,7 @@ workflow PROTEINFAMILIES { cluster_ch = MMSEQS_LINCLUST(db_ch).db_cluster } - // cluster_target_ch = cluster_ch.map { meta, filepath -> - // meta.id = meta.id + "_target" - // return [ meta, filepath ] - // } - // cluster_target_ch.view() - MMSEQS_CREATETSV(db_ch, db_ch, cluster_ch) + MMSEQS_CREATETSV(cluster_ch, db_ch, db_ch) // // Collate and save software versions From 40e02f2450176597e17cf38ea5fa1985479a09e0 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 8 Nov 2024 14:27:31 +0000 Subject: [PATCH 006/139] syncing samples by meta, module diffs --- modules.json | 61 ++++++++++++++----- modules/nf-core/mmseqs/cluster/main.nf | 2 +- .../mmseqs/cluster/mmseqs-cluster.diff | 17 ++++++ modules/nf-core/mmseqs/createtsv/main.nf | 4 +- .../mmseqs/createtsv/mmseqs-createtsv.diff | 22 +++++++ modules/nf-core/mmseqs/linclust/main.nf | 2 +- .../mmseqs/linclust/mmseqs-linclust.diff | 21 +++++++ workflows/proteinfamilies.nf | 26 +++++--- 8 files changed, 126 insertions(+), 29 deletions(-) create mode 100644 modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff create mode 100644 modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff create mode 100644 modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff diff --git a/modules.json b/modules.json index a4a23bd..192e51d 100644 --- a/modules.json +++ b/modules.json @@ -8,57 +8,82 @@ "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmalign": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mafft": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "prokka": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -67,20 +92,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/cluster/main.nf b/modules/nf-core/mmseqs/cluster/main.nf index 408e427..c821802 100644 --- a/modules/nf-core/mmseqs/cluster/main.nf +++ b/modules/nf-core/mmseqs/cluster/main.nf @@ -8,7 +8,7 @@ process MMSEQS_CLUSTER { 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" input: - tuple val(meta), path(db_input) + tuple val(meta), path(db_input, stageAs: "db_input") output: tuple val(meta), path("${prefix}/"), emit: db_cluster diff --git a/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff new file mode 100644 index 0000000..76b78df --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff @@ -0,0 +1,17 @@ +Changes in module 'nf-core/mmseqs/cluster' +'modules/nf-core/mmseqs/cluster/meta.yml' is unchanged +'modules/nf-core/mmseqs/cluster/environment.yml' is unchanged +Changes in 'mmseqs/cluster/main.nf': +--- modules/nf-core/mmseqs/cluster/main.nf ++++ modules/nf-core/mmseqs/cluster/main.nf +@@ -8,7 +8,7 @@ + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: +- tuple val(meta), path(db_input) ++ tuple val(meta), path(db_input, stageAs: "db_input") + + output: + tuple val(meta), path("${prefix}/"), emit: db_cluster + +************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 29f2e51..c89ffa9 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -10,8 +10,8 @@ process MMSEQS_CREATETSV { input: tuple val(meta), path(db_result) - tuple val(meta2), path(db_query) - tuple val(meta3), path(db_target, stageAs: "target") + tuple val(meta2), path(db_query, stageAs: "db_query") + tuple val(meta3), path(db_target) output: tuple val(meta), path("*.tsv"), emit: tsv diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff new file mode 100644 index 0000000..9820791 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -0,0 +1,22 @@ +Changes in module 'nf-core/mmseqs/createtsv' +'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged +'modules/nf-core/mmseqs/createtsv/environment.yml' is unchanged +Changes in 'mmseqs/createtsv/main.nf': +--- modules/nf-core/mmseqs/createtsv/main.nf ++++ modules/nf-core/mmseqs/createtsv/main.nf +@@ -10,7 +10,7 @@ + + input: + tuple val(meta), path(db_result) +- tuple val(meta2), path(db_query) ++ tuple val(meta2), path(db_query, stageAs: "db_query") + tuple val(meta3), path(db_target) + + output: + +'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/tags.yml' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/linclust/main.nf b/modules/nf-core/mmseqs/linclust/main.nf index 7453c26..69abb7c 100644 --- a/modules/nf-core/mmseqs/linclust/main.nf +++ b/modules/nf-core/mmseqs/linclust/main.nf @@ -8,7 +8,7 @@ process MMSEQS_LINCLUST { 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" input: - tuple val(meta), path(db_input) + tuple val(meta), path(db_input, stageAs: "db_input") output: tuple val(meta), path("${prefix}/"), emit: db_cluster diff --git a/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff new file mode 100644 index 0000000..c17c35a --- /dev/null +++ b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff @@ -0,0 +1,21 @@ +Changes in module 'nf-core/mmseqs/linclust' +'modules/nf-core/mmseqs/linclust/meta.yml' is unchanged +'modules/nf-core/mmseqs/linclust/environment.yml' is unchanged +Changes in 'mmseqs/linclust/main.nf': +--- modules/nf-core/mmseqs/linclust/main.nf ++++ modules/nf-core/mmseqs/linclust/main.nf +@@ -8,7 +8,7 @@ + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: +- tuple val(meta), path(db_input) ++ tuple val(meta), path(db_input, stageAs: "db_input") + + output: + tuple val(meta), path("${prefix}/"), emit: db_cluster + +'modules/nf-core/mmseqs/linclust/tests/tags.yml' is unchanged +'modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap' is unchanged +'modules/nf-core/mmseqs/linclust/tests/nextflow.config' is unchanged +'modules/nf-core/mmseqs/linclust/tests/main.nf.test' is unchanged +************************************************************ diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 133e85b..f2d489f 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -35,21 +35,27 @@ workflow PROTEINFAMILIES { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // Clustering - MMSEQS_CREATEDB(ch_samplesheet).db - .map { meta, filepath -> - meta.id = meta.id + "_db" - return [ meta, filepath ] - } - .set{ db_ch } + // Clustering // TODO subworkflow + MMSEQS_CREATEDB(ch_samplesheet) + ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) if (params.clustering_tool == 'cluster') { - cluster_ch = MMSEQS_CLUSTER(db_ch).db_cluster + cluster_res = MMSEQS_CLUSTER(MMSEQS_CREATEDB.out.db) } else { // fallback: linclust - cluster_ch = MMSEQS_LINCLUST(db_ch).db_cluster + cluster_res = MMSEQS_LINCLUST(MMSEQS_CREATEDB.out.db) } + ch_versions = ch_versions.mix( cluster_res.versions ) + + // Join together to ensure in sync + ch_input_for_createtsv = MMSEQS_CREATEDB.out.db + .join(cluster_res.db_cluster) + .multiMap { meta, db, db_cluster -> + db: [ meta, db ] + db_cluster: [ meta, db_cluster ] + } - MMSEQS_CREATETSV(cluster_ch, db_ch, db_ch) + MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) + ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) // // Collate and save software versions From d362d9ec2f926a73aeac386dc728297dfb2be41b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 8 Nov 2024 15:30:16 +0000 Subject: [PATCH 007/139] EXECUTE_CLUSTERING subworkflow done --- assets/samplesheet.csv | 4 +- modules/nf-core/mmseqs/createtsv/main.nf | 2 +- .../mmseqs/createtsv/mmseqs-createtsv.diff | 6 ++- subworkflows/local/execute_clustering.nf | 43 +++++++++++++++++++ workflows/proteinfamilies.nf | 40 ++++++----------- 5 files changed, 62 insertions(+), 33 deletions(-) create mode 100644 subworkflows/local/execute_clustering.nf diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index b92002e..58016d6 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,3 @@ sample,fasta -mgnifams_input,input/mgnifams_input.fa -mgnifams_test2,input/mgnifams_input.fa +mgnifams_test,input/mgnifams_input.fa +mgnifams_test_copy,input/mgnifams_input.fa diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index c89ffa9..448d0ea 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -11,7 +11,7 @@ process MMSEQS_CREATETSV { input: tuple val(meta), path(db_result) tuple val(meta2), path(db_query, stageAs: "db_query") - tuple val(meta3), path(db_target) + tuple val(meta3), path(db_target, stageAs: "db_target") output: tuple val(meta), path("*.tsv"), emit: tsv diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff index 9820791..0cf78bc 100644 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -4,15 +4,17 @@ Changes in module 'nf-core/mmseqs/createtsv' Changes in 'mmseqs/createtsv/main.nf': --- modules/nf-core/mmseqs/createtsv/main.nf +++ modules/nf-core/mmseqs/createtsv/main.nf -@@ -10,7 +10,7 @@ +@@ -10,8 +10,8 @@ input: tuple val(meta), path(db_result) - tuple val(meta2), path(db_query) +- tuple val(meta3), path(db_target) + tuple val(meta2), path(db_query, stageAs: "db_query") - tuple val(meta3), path(db_target) ++ tuple val(meta3), path(db_target, stageAs: "db_target") output: + tuple val(meta), path("*.tsv"), emit: tsv 'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf new file mode 100644 index 0000000..2c131d4 --- /dev/null +++ b/subworkflows/local/execute_clustering.nf @@ -0,0 +1,43 @@ +/* + SEQUENCE CLUSTERING +*/ + +include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' +include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' +include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' +include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' + +workflow EXECUTE_CLUSTERING { + take: + sequences // tuple val(meta), path(fasta) + + main: + ch_versions = Channel.empty() + ch_clustering_tsv = Channel.empty() + + MMSEQS_CREATEDB( sequences ) + ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) + + if (params.clustering_tool == 'cluster') { + cluster_res = MMSEQS_CLUSTER( MMSEQS_CREATEDB.out.db ) + } else { // fallback: linclust + cluster_res = MMSEQS_LINCLUST( MMSEQS_CREATEDB.out.db ) + } + ch_versions = ch_versions.mix( cluster_res.versions ) + + // Join together to ensure in sync + ch_input_for_createtsv = MMSEQS_CREATEDB.out.db + .join(cluster_res.db_cluster) + .multiMap { meta, db, db_cluster -> + db: [ meta, db ] + db_cluster: [ meta, db_cluster ] + } + + MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) + ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv + + emit: + versions = ch_versions + clustering_tsv = ch_clustering_tsv // channel: [ val(meta), tsv ] +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index f2d489f..87560f9 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -10,15 +10,16 @@ include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pi include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT LOCAL MODULES/SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + // -// MODULE: Installed directly from nf-core/modules +// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // - -include { MMSEQS_CREATEDB } from '../modules/nf-core/mmseqs/createdb/main' -include { MMSEQS_CLUSTER } from '../modules/nf-core/mmseqs/cluster/main' -include { MMSEQS_LINCLUST } from '../modules/nf-core/mmseqs/linclust/main' -include { MMSEQS_CREATETSV } from '../modules/nf-core/mmseqs/createtsv/main' - +include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -35,27 +36,10 @@ workflow PROTEINFAMILIES { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // Clustering // TODO subworkflow - MMSEQS_CREATEDB(ch_samplesheet) - ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) - - if (params.clustering_tool == 'cluster') { - cluster_res = MMSEQS_CLUSTER(MMSEQS_CREATEDB.out.db) - } else { // fallback: linclust - cluster_res = MMSEQS_LINCLUST(MMSEQS_CREATEDB.out.db) - } - ch_versions = ch_versions.mix( cluster_res.versions ) - - // Join together to ensure in sync - ch_input_for_createtsv = MMSEQS_CREATEDB.out.db - .join(cluster_res.db_cluster) - .multiMap { meta, db, db_cluster -> - db: [ meta, db ] - db_cluster: [ meta, db_cluster ] - } - - MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) - ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + // Clustering + EXECUTE_CLUSTERING( ch_samplesheet ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + ch_clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv // // Collate and save software versions From 0c56473937e7158aca872fdda61f4b1dfd998f89 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 11 Nov 2024 07:21:59 +0000 Subject: [PATCH 008/139] chunk_clusters nf and py init --- bin/chunk_clusters.py | 43 ++++++++++++++++++++++++ conf/test.config | 4 +-- modules/local/chunk_clusters.nf | 28 +++++++++++++++ nextflow.config | 3 +- subworkflows/local/execute_clustering.nf | 1 + 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100755 bin/chunk_clusters.py create mode 100644 modules/local/chunk_clusters.nf diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py new file mode 100755 index 0000000..cf004ca --- /dev/null +++ b/bin/chunk_clusters.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +import sys +import argparse +import pandas as pd + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-c", + "--clustering", + required=True, + metavar="FILE", + type=str, + help="TSV clustering file input.", + ) + parser.add_argument( + "-t", + "--threshold", + required=True, + metavar="INT", + type=int, + help="Minimum cluster size to keep.", + ) + parser.add_argument( + "-o", + "--out_folder", + required=True, + metavar="FOLDER", + type=str, + help="Name of the output folder to be created.", + ) + return parser.parse_args(args) + + +def main(args=None): + args = parse_args(args) + # TODO + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/test.config b/conf/test.config index 2f2d25d..3e0bf18 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,6 +26,6 @@ params { // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed // input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - clustering_tool = 'linclust' - + clustering_tool = 'linclust' + cluster_size_threshold = 3 } diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf new file mode 100644 index 0000000..6e316e0 --- /dev/null +++ b/modules/local/chunk_clusters.nf @@ -0,0 +1,28 @@ +process CHUNK_CLUSTERS { + + conda "conda-forge::pandas=1.4.3" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pandas:1.4.3' : + 'biocontainers/pandas:1.4.3' }" + + input: + path(clustering) + val(size_threshold) + + output: + path("chunked_clusters"), emit: chunked_clusters + path "versions.yml" , emit: versions + + script: + """ + combine_tables.py --clustering ${clustering} \ + --threshold ${size_threshold} \ + --out_folder chunked_clusters + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + pandas: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('pandas').version)") + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index cea5bc0..b66fc65 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,7 +14,8 @@ params { input = null // Pipeline parameters - clustering_tool = 'cluster' + clustering_tool = 'cluster' + cluster_size_threshold = 4 // MultiQC options multiqc_config = null diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index 2c131d4..08907be 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -6,6 +6,7 @@ include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' +include { CHUNK_CLUSTERS } from '../../modules/local/chunk_clusters.nf' workflow EXECUTE_CLUSTERING { take: From ace2dbd979acb4e636d29e4433a0cdca49574b47 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 11 Nov 2024 11:46:19 +0000 Subject: [PATCH 009/139] cluster chunkcs complete --- bin/chunk_clusters.py | 18 +++++++++++++++++- modules/local/chunk_clusters.nf | 8 ++++---- nextflow_schema.json | 5 +++++ subworkflows/local/execute_clustering.nf | 7 ++++++- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index cf004ca..7622b76 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import sys +import os import argparse import pandas as pd @@ -36,7 +37,22 @@ def parse_args(args=None): def main(args=None): args = parse_args(args) - # TODO + + # Load the clustering file + clustering_df = pd.read_csv(args.clustering, sep='\t', header=None, names=['representative', 'member']) + + # Group by cluster representative and filter by threshold + grouped = clustering_df.groupby('representative') + clusters = {rep: members for rep, members in grouped if len(members) >= args.threshold} + + # Create the output folder if it doesn't exist + os.makedirs(args.out_folder, exist_ok=True) + + # Save each cluster to a separate TSV file + for i, (rep, members) in enumerate(clusters.items(), start=1): + output_file = os.path.join(args.out_folder, f"{i}.tsv") + members.to_csv(output_file, sep='\t', index=False, header=False) + print(f"Saved cluster {rep} with {len(members)} members to {output_file}") if __name__ == "__main__": diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 6e316e0..7148eb6 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -6,16 +6,16 @@ process CHUNK_CLUSTERS { 'biocontainers/pandas:1.4.3' }" input: - path(clustering) + tuple val(meta), path(clustering) val(size_threshold) output: - path("chunked_clusters"), emit: chunked_clusters - path "versions.yml" , emit: versions + tuple val(meta), path("chunked_clusters/*"), emit: chunked_clusters + path "versions.yml" , emit: versions script: """ - combine_tables.py --clustering ${clustering} \ + chunk_clusters.py --clustering ${clustering} \ --threshold ${size_threshold} \ --out_folder chunked_clusters diff --git a/nextflow_schema.json b/nextflow_schema.json index 6b4f5a1..df45840 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -192,6 +192,11 @@ "description": "Choose clustering algorithm. Either simple 'cluster' for medium size inputs, or 'linclust' for less sensitive clustering of larger datasets.", "help_text": "mmseqs algorithms available: 'cluster' or 'linclust'.", "enum": ["cluster", "linclust"] + }, + "cluster_size_threshold": { + "type": "integer", + "default": 4, + "description": "Minimum clustering chunk size threshold to create seed multiple sequence alignments upon." } } } diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index 08907be..c77b790 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -35,10 +35,15 @@ workflow EXECUTE_CLUSTERING { } MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) - ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv + CHUNK_CLUSTERS(MMSEQS_CREATETSV.out.tsv, params.cluster_size_threshold) + ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) + ch_cluster_chunks = CHUNK_CLUSTERS.out.chunked_clusters + emit: versions = ch_versions clustering_tsv = ch_clustering_tsv // channel: [ val(meta), tsv ] + cluster_chunks = ch_cluster_chunks } From b1309f555b45dffeed10b9f5f6e43ef46fdc67f1 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 11 Nov 2024 14:33:46 +0000 Subject: [PATCH 010/139] seqera container for local python module --- assets/samplesheet.csv | 2 +- modules/local/chunk_clusters.nf | 9 +++++---- subworkflows/local/execute_clustering.nf | 10 +++++++++- workflows/proteinfamilies.nf | 10 +++++++++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 58016d6..8a83664 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,3 @@ sample,fasta mgnifams_test,input/mgnifams_input.fa -mgnifams_test_copy,input/mgnifams_input.fa +mgnifams_test_copy,input/mgnifams_input_copy.fa diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 7148eb6..6b10905 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -1,12 +1,13 @@ process CHUNK_CLUSTERS { - conda "conda-forge::pandas=1.4.3" + conda "conda-forge::biopython=1.84 conda-forge::pandas=2.2.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/pandas:1.4.3' : - 'biocontainers/pandas:1.4.3' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e2/e25bf39c3ebfbf72a1ddcaeea8f246c03e6da84b240ec0f3b2814d9719ec66b1/data' : + 'community.wave.seqera.io/library/biopython_pandas:641c5796a40a11b9' }" input: - tuple val(meta), path(clustering) + tuple val(meta) , path(clustering) + tuple val(meta2), path(sequences) val(size_threshold) output: diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index c77b790..d6c52af 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -38,7 +38,15 @@ workflow EXECUTE_CLUSTERING { ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv - CHUNK_CLUSTERS(MMSEQS_CREATETSV.out.tsv, params.cluster_size_threshold) + // Join together to ensure in sync + ch_input_for_cluster_chunking = sequences + .join(ch_clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [ meta, seqs ] + clusters: [ meta, clusters ] + } + + CHUNK_CLUSTERS(ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold) ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) ch_cluster_chunks = CHUNK_CLUSTERS.out.chunked_clusters diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 87560f9..ff09e45 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -21,6 +21,11 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' +// +// MODULE: Installed directly from nf-core/modules +// +include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -39,7 +44,10 @@ workflow PROTEINFAMILIES { // Clustering EXECUTE_CLUSTERING( ch_samplesheet ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - ch_clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv + + // Multiple sequence alignment + // FAMSA_ALIGN(EXECUTE_CLUSTERING.out.cluster_chunks, [[:],[]], false) + // ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) // // Collate and save software versions From a84dbe649422681615ad91a78fa83cd6ebacb04c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 11 Nov 2024 15:09:31 +0000 Subject: [PATCH 011/139] clustering parameters added, chunking fasta instead of tsv to then feed MSA tools --- bin/chunk_clusters.py | 49 +++++++++++++++++------- conf/modules.config | 16 ++++++++ conf/test.config | 2 +- modules/local/chunk_clusters.nf | 8 ++-- nextflow.config | 7 +++- nextflow_schema.json | 15 ++++++++ subworkflows/local/execute_clustering.nf | 16 ++++---- workflows/proteinfamilies.nf | 3 +- 8 files changed, 87 insertions(+), 29 deletions(-) diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index 7622b76..433128f 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -4,7 +4,7 @@ import os import argparse import pandas as pd - +from Bio import SeqIO def parse_args(args=None): parser = argparse.ArgumentParser() @@ -16,6 +16,14 @@ def parse_args(args=None): type=str, help="TSV clustering file input.", ) + parser.add_argument( + "-s", + "--sequences", + required=True, + metavar="FILE", + type=str, + help="Initial sequences fasta file.", + ) parser.add_argument( "-t", "--threshold", @@ -34,26 +42,41 @@ def parse_args(args=None): ) return parser.parse_args(args) +def load_sequences(sequences_file): + # Load sequences from the input FASTA file into a dictionary for quick lookup + return {record.id: record for record in SeqIO.parse(sequences_file, "fasta")} def main(args=None): args = parse_args(args) - # Load the clustering file - clustering_df = pd.read_csv(args.clustering, sep='\t', header=None, names=['representative', 'member']) + # Create output directory if it doesn't exist + os.makedirs(args.out_folder, exist_ok=True) - # Group by cluster representative and filter by threshold - grouped = clustering_df.groupby('representative') - clusters = {rep: members for rep, members in grouped if len(members) >= args.threshold} + # Load the sequences from the input FASTA file + sequences = load_sequences(args.sequences) - # Create the output folder if it doesn't exist - os.makedirs(args.out_folder, exist_ok=True) + # Read clustering file and filter by threshold + clusters = pd.read_csv(args.clustering, sep='\t', header=None, names=["rep", "member"]) + cluster_groups = clusters.groupby("rep") + + # Process each cluster and output sequences to chunked FASTA files + chunk_num = 1 + for rep, group in cluster_groups: + members = group["member"].tolist() + + # Filter by threshold + if len(members) >= args.threshold: + output_file = os.path.join(args.out_folder, f"{chunk_num}.fasta") - # Save each cluster to a separate TSV file - for i, (rep, members) in enumerate(clusters.items(), start=1): - output_file = os.path.join(args.out_folder, f"{i}.tsv") - members.to_csv(output_file, sep='\t', index=False, header=False) - print(f"Saved cluster {rep} with {len(members)} members to {output_file}") + # Write sequences to the chunked FASTA file + with open(output_file, "w") as fasta_out: + for member in members: + if member in sequences: + SeqIO.write(sequences[member], fasta_out, "fasta") + else: + print(f"Warning: Sequence {member} not found in the input FASTA file.") + chunk_num += 1 if __name__ == "__main__": sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index f0b0d55..0b1703d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,22 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: 'MMSEQS_CLUSTER' { + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity}", + "-c ${params.cluster_coverage}", + "--cov-mode ${params.cluster_cov_mode}", + ].join(' ').trim() + } + + withName: 'MMSEQS_LINCLUST' { + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity}", + "-c ${params.cluster_coverage}", + "--cov-mode ${params.cluster_cov_mode}", + ].join(' ').trim() + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index 3e0bf18..4ba249d 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,5 +27,5 @@ params { // TODO nf-core: Give any required params for the test so that command line flags are not needed // input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' clustering_tool = 'linclust' - cluster_size_threshold = 3 + cluster_size_threshold = 5 } diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 6b10905..a08ebfe 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -1,4 +1,5 @@ process CHUNK_CLUSTERS { + tag "$meta.id" conda "conda-forge::biopython=1.84 conda-forge::pandas=2.2.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -11,14 +12,15 @@ process CHUNK_CLUSTERS { val(size_threshold) output: - tuple val(meta), path("chunked_clusters/*"), emit: chunked_clusters - path "versions.yml" , emit: versions + tuple val(meta), path("chunked_fasta/*"), emit: fasta_chunks + path "versions.yml" , emit: versions script: """ chunk_clusters.py --clustering ${clustering} \ + --sequences ${sequences} \ --threshold ${size_threshold} \ - --out_folder chunked_clusters + --out_folder chunked_fasta cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index b66fc65..6ec06ff 100644 --- a/nextflow.config +++ b/nextflow.config @@ -9,13 +9,16 @@ // Global default params, used in configs params { - // TODO nf-core: Specify your pipeline's command line flags // Input options input = null // Pipeline parameters + // Clustering clustering_tool = 'cluster' - cluster_size_threshold = 4 + cluster_seq_identity = 0.5 + cluster_coverage = 0.9 + cluster_cov_mode = 0 + cluster_size_threshold = 25 // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index df45840..17e3c91 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -193,6 +193,21 @@ "help_text": "mmseqs algorithms available: 'cluster' or 'linclust'.", "enum": ["cluster", "linclust"] }, + "cluster_seq_identity": { + "type": "number", + "default": 0.5, + "description": "mmseqs parameter for minimum sequence identity" + }, + "cluster_coverage": { + "type": "number", + "default": 0.9, + "description": "mmseqs parameter for minimum sequence coverage ratio" + }, + "cluster_cov_mode": { + "type": "integer", + "default": 0, + "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" + }, "cluster_size_threshold": { "type": "integer", "default": 4, diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index d6c52af..8e4bef3 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -13,8 +13,8 @@ workflow EXECUTE_CLUSTERING { sequences // tuple val(meta), path(fasta) main: - ch_versions = Channel.empty() - ch_clustering_tsv = Channel.empty() + ch_versions = Channel.empty() + ch_chunked_fasta = Channel.empty() MMSEQS_CREATEDB( sequences ) ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) @@ -36,22 +36,20 @@ workflow EXECUTE_CLUSTERING { MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) - ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv // Join together to ensure in sync ch_input_for_cluster_chunking = sequences - .join(ch_clustering_tsv) + .join(MMSEQS_CREATETSV.out.tsv) .multiMap { meta, seqs, clusters -> seqs: [ meta, seqs ] clusters: [ meta, clusters ] } CHUNK_CLUSTERS(ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold) - ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) - ch_cluster_chunks = CHUNK_CLUSTERS.out.chunked_clusters + ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) + ch_fasta_chunks = CHUNK_CLUSTERS.out.fasta_chunks emit: - versions = ch_versions - clustering_tsv = ch_clustering_tsv // channel: [ val(meta), tsv ] - cluster_chunks = ch_cluster_chunks + versions = ch_versions + fasta_chunks = ch_fasta_chunks } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index ff09e45..68d20bf 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -46,7 +46,8 @@ workflow PROTEINFAMILIES { ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) // Multiple sequence alignment - // FAMSA_ALIGN(EXECUTE_CLUSTERING.out.cluster_chunks, [[:],[]], false) + EXECUTE_CLUSTERING.out.fasta_chunks.view() + // FAMSA_ALIGN(EXECUTE_CLUSTERING.out.fasta_chunks, [[:],[]], false) // ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) // From 2e46012377efd9a84e2f2581ba1d79cf2f598675 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 11 Nov 2024 15:17:31 +0000 Subject: [PATCH 012/139] removed pandas from chunking script, optimised for memory --- bin/chunk_clusters.py | 51 +++++++++++++++------------------ modules/local/chunk_clusters.nf | 6 ++-- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index 433128f..cbe3e14 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -3,7 +3,7 @@ import sys import os import argparse -import pandas as pd +from collections import defaultdict from Bio import SeqIO def parse_args(args=None): @@ -22,7 +22,7 @@ def parse_args(args=None): required=True, metavar="FILE", type=str, - help="Initial sequences fasta file.", + help="Initial sequences FASTA file.", ) parser.add_argument( "-t", @@ -42,9 +42,16 @@ def parse_args(args=None): ) return parser.parse_args(args) -def load_sequences(sequences_file): - # Load sequences from the input FASTA file into a dictionary for quick lookup - return {record.id: record for record in SeqIO.parse(sequences_file, "fasta")} +def collect_clusters(clustering_file, threshold): + # Collect clusters with a size threshold, storing in a defaultdict + clusters = defaultdict(list) + with open(clustering_file) as f: + for line in f: + rep, member = line.strip().split("\t") + clusters[rep].append(member) + + # Filter clusters by threshold + return {rep: members for rep, members in clusters.items() if len(members) >= threshold} def main(args=None): args = parse_args(args) @@ -52,31 +59,19 @@ def main(args=None): # Create output directory if it doesn't exist os.makedirs(args.out_folder, exist_ok=True) - # Load the sequences from the input FASTA file - sequences = load_sequences(args.sequences) - - # Read clustering file and filter by threshold - clusters = pd.read_csv(args.clustering, sep='\t', header=None, names=["rep", "member"]) - cluster_groups = clusters.groupby("rep") + # Collect clusters that meet the threshold + clusters = collect_clusters(args.clustering, args.threshold) - # Process each cluster and output sequences to chunked FASTA files + # Stream through the FASTA file and write out sequences that match clusters chunk_num = 1 - for rep, group in cluster_groups: - members = group["member"].tolist() - - # Filter by threshold - if len(members) >= args.threshold: - output_file = os.path.join(args.out_folder, f"{chunk_num}.fasta") - - # Write sequences to the chunked FASTA file - with open(output_file, "w") as fasta_out: - for member in members: - if member in sequences: - SeqIO.write(sequences[member], fasta_out, "fasta") - else: - print(f"Warning: Sequence {member} not found in the input FASTA file.") - - chunk_num += 1 + for rep, members in clusters.items(): + output_file = os.path.join(args.out_folder, f"{chunk_num}.fasta") + with open(output_file, "w") as fasta_out: + with open(args.sequences) as seq_file: + for record in SeqIO.parse(seq_file, "fasta"): + if record.id in members: + SeqIO.write(record, fasta_out, "fasta") + chunk_num += 1 if __name__ == "__main__": sys.exit(main()) diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index a08ebfe..98fbfd3 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -1,10 +1,10 @@ process CHUNK_CLUSTERS { tag "$meta.id" - conda "conda-forge::biopython=1.84 conda-forge::pandas=2.2.3" + conda "conda-forge::biopython=1.84" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e2/e25bf39c3ebfbf72a1ddcaeea8f246c03e6da84b240ec0f3b2814d9719ec66b1/data' : - 'community.wave.seqera.io/library/biopython_pandas:641c5796a40a11b9' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" input: tuple val(meta) , path(clustering) From f2983bcfb4f920d6d24ba989fedf1071c2bac8f0 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 12 Nov 2024 09:22:20 +0000 Subject: [PATCH 013/139] msa input formatted, famsa run properly --- workflows/proteinfamilies.nf | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 68d20bf..c85cb6a 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -43,12 +43,14 @@ workflow PROTEINFAMILIES { // Clustering EXECUTE_CLUSTERING( ch_samplesheet ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) // Multiple sequence alignment - EXECUTE_CLUSTERING.out.fasta_chunks.view() - // FAMSA_ALIGN(EXECUTE_CLUSTERING.out.fasta_chunks, [[:],[]], false) - // ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) + EXECUTE_CLUSTERING.out.fasta_chunks + .transpose() + .set { msa_input_ch } + FAMSA_ALIGN(msa_input_ch, [[:],[]], false) + ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) // // Collate and save software versions From 6f52683d1cf51f53cc0740a0041a33af53492a77 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 12 Nov 2024 09:50:06 +0000 Subject: [PATCH 014/139] meta updated to chunks level, hmmbuild chained to workflow --- workflows/proteinfamilies.nf | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index c85cb6a..695c44a 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -24,7 +24,8 @@ include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' // // MODULE: Installed directly from nf-core/modules // -include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' +include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' +include { HMMER_HMMBUILD } from '../modules/nf-core/hmmer/hmmbuild/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -48,10 +49,20 @@ workflow PROTEINFAMILIES { // Multiple sequence alignment EXECUTE_CLUSTERING.out.fasta_chunks .transpose() + .map { meta, file -> + def baseName = file.toString().split('/')[-1].split('\\.')[0] + def id = "${meta.id}_${baseName}" + [ [id: id], file ] + } .set { msa_input_ch } + FAMSA_ALIGN(msa_input_ch, [[:],[]], false) ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) + HMMER_HMMBUILD( FAMSA_ALIGN.out.alignment, [] ) + ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) + HMMER_HMMBUILD.out.hmm.view() + // // Collate and save software versions // From 2d48faf5a4a57e1618f161204cb30743dd25a31c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 12 Nov 2024 10:44:55 +0000 Subject: [PATCH 015/139] HMMER_HMMSEARCH chained, inputs combined successfully on meta id, meta tags updated to chunk level --- conf/modules.config | 22 +++++++++++++++++++ modules/local/chunk_clusters.nf | 2 +- nextflow.config | 4 ++++ nextflow_schema.json | 39 +++++++++++++++++++++++++++++---- workflows/proteinfamilies.nf | 19 +++++++++++----- 5 files changed, 76 insertions(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 0b1703d..2cf8770 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -34,6 +34,28 @@ process { ].join(' ').trim() } + withName: 'CHUNK_CLUSTERS' { + publishDir = [ + path: { "${params.outdir}/chunked_fasta/${meta.id}/" }, + mode: params.publish_dir_mode + ] + } + + withName: 'FAMSA_ALIGN' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + } + + withName: 'HMMER_HMMBUILD' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + } + + withName: 'HMMER_HMMSEARCH' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 98fbfd3..5607758 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -25,7 +25,7 @@ process CHUNK_CLUSTERS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - pandas: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('pandas').version)") + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") END_VERSIONS """ } diff --git a/nextflow.config b/nextflow.config index 6ec06ff..ff0d3d0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -19,6 +19,10 @@ params { cluster_coverage = 0.9 cluster_cov_mode = 0 cluster_size_threshold = 25 + // Alignment + hmmsearch_write_align = false + hmmsearch_write_target = false + hmmsearch_write_domain = true // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 17e3c91..6ccb43c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -182,10 +182,10 @@ } } }, - "pipeline_params": { - "title": "Pipeline parameters", + "clustering_params": { + "title": "Clustering parameters", "type": "object", - "description": "Use these parameters to control the flow of the pipeline execution.", + "description": "Use these parameters to control the flow of the clustering subworkflow execution.", "properties": { "clustering_tool": { "type": "string", @@ -214,6 +214,34 @@ "description": "Minimum clustering chunk size threshold to create seed multiple sequence alignments upon." } } + }, + "alignment_params": { + "title": "Alignment parameters", + "type": "object", + "description": "Use these parameters to control the multiple sequence alignment subworkflow execution.", + "properties": { + "hmmsearch_write_align": { + "type": "boolean", + "description": "Boolean whether to generate alignment results file of hmmsearch", + "default": false, + "fa_icon": "fas fa-check-square", + "hidden": true + }, + "hmmsearch_write_target": { + "type": "boolean", + "description": "Boolean whether to generate target results file of hmmsearch", + "default": false, + "fa_icon": "fas fa-check-square", + "hidden": true + }, + "hmmsearch_write_domain": { + "type": "boolean", + "description": "Boolean whether to generate domain results file of hmmsearch", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + } + } } }, "allOf": [ @@ -227,7 +255,10 @@ "$ref": "#/$defs/generic_options" }, { - "$ref": "#/$defs/pipeline_params" + "$ref": "#/$defs/clustering_params" + }, + { + "$ref": "#/$defs/alignment_params" } ] } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 695c44a..377ddfe 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -24,8 +24,9 @@ include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' // // MODULE: Installed directly from nf-core/modules // -include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' -include { HMMER_HMMBUILD } from '../modules/nf-core/hmmer/hmmbuild/main' +include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' +include { HMMER_HMMBUILD } from '../modules/nf-core/hmmer/hmmbuild/main' +include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -51,8 +52,7 @@ workflow PROTEINFAMILIES { .transpose() .map { meta, file -> def baseName = file.toString().split('/')[-1].split('\\.')[0] - def id = "${meta.id}_${baseName}" - [ [id: id], file ] + [ [id: meta.id, chunk: baseName], file ] } .set { msa_input_ch } @@ -61,7 +61,16 @@ workflow PROTEINFAMILIES { HMMER_HMMBUILD( FAMSA_ALIGN.out.alignment, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) - HMMER_HMMBUILD.out.hmm.view() + + // Combine with same id to ensure in sync + HMMER_HMMBUILD.out.hmm + .map{ meta, hmm -> [ [id: meta.id], meta, hmm ] } + .combine(ch_samplesheet, by: 0) + .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, params.hmmsearch_write_align, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } + .set { ch_input_for_hmmsearch } + + HMMER_HMMSEARCH{ ch_input_for_hmmsearch } + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) // // Collate and save software versions From 54f7a0542e2480aecb0b14277eaa3ccf704aa9e8 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 12 Nov 2024 10:47:55 +0000 Subject: [PATCH 016/139] minor publish path change --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 2cf8770..8d6e387 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,7 +36,7 @@ process { withName: 'CHUNK_CLUSTERS' { publishDir = [ - path: { "${params.outdir}/chunked_fasta/${meta.id}/" }, + path: { "${params.outdir}/chunks/${meta.id}/" }, mode: params.publish_dir_mode ] } From 5d9e7e9e53ac768a485645f4e61eea9719a450a0 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 13 Nov 2024 07:56:56 +0000 Subject: [PATCH 017/139] hmmsearch evalue cutoff and output full MSA by default --- conf/modules.config | 1 + modules.json | 7 --- .../nf-core/hmmer/hmmalign/environment.yml | 5 -- modules/nf-core/hmmer/hmmalign/main.nf | 35 ------------ modules/nf-core/hmmer/hmmalign/meta.yml | 53 ------------------- nextflow.config | 17 +++--- nextflow_schema.json | 12 ++--- workflows/proteinfamilies.nf | 2 +- 8 files changed, 16 insertions(+), 116 deletions(-) delete mode 100644 modules/nf-core/hmmer/hmmalign/environment.yml delete mode 100644 modules/nf-core/hmmer/hmmalign/main.nf delete mode 100644 modules/nf-core/hmmer/hmmalign/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 8d6e387..f275754 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -52,6 +52,7 @@ process { } withName: 'HMMER_HMMSEARCH' { + ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } } diff --git a/modules.json b/modules.json index 192e51d..55e4436 100644 --- a/modules.json +++ b/modules.json @@ -12,13 +12,6 @@ "modules" ] }, - "hmmer/hmmalign": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] - }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/hmmer/hmmalign/environment.yml b/modules/nf-core/hmmer/hmmalign/environment.yml deleted file mode 100644 index 7c62eac..0000000 --- a/modules/nf-core/hmmer/hmmalign/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::hmmer=3.3.2 diff --git a/modules/nf-core/hmmer/hmmalign/main.nf b/modules/nf-core/hmmer/hmmalign/main.nf deleted file mode 100644 index 00ae8da..0000000 --- a/modules/nf-core/hmmer/hmmalign/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -process HMMER_HMMALIGN { - tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/hmmer:3.3.2--h1b792b2_1' : - 'biocontainers/hmmer:3.3.2--h1b792b2_1' }" - - input: - tuple val(meta), path(fasta) - path hmm - - output: - tuple val(meta), path("*.sthlm.gz"), emit: sthlm - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - hmmalign \\ - $args \\ - $hmm \\ - $fasta | gzip -c > ${prefix}.sthlm.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hmmer: \$(hmmalign -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/hmmer/hmmalign/meta.yml b/modules/nf-core/hmmer/hmmalign/meta.yml deleted file mode 100644 index 366cf4f..0000000 --- a/modules/nf-core/hmmer/hmmalign/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: hmmer_hmmalign -description: hmmalign from the HMMER suite aligns a number of sequences to an HMM - profile -keywords: - - alignment - - HMMER - - profile - - amino acid - - nucleotide -tools: - - hmmer: - description: Biosequence analysis using profile hidden Markov models - homepage: http://hmmer.org/ - documentation: http://hmmer.org/documentation.html - doi: "10.1371/journal.pcbi.1002195" - licence: ["BSD-3-Clause"] - identifier: "" -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - fasta: - type: file - description: Amino acid or nucleotide gzipped compressed fasta file - pattern: "*.{fna.gz,faa.gz,fasta.gz,fa.gz}" - - - hmm: - type: file - description: A gzipped HMM file - pattern: "*.hmm.gz" -output: - - sthlm: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.sthlm.gz": - type: file - description: Multiple alignment in gzipped Stockholm format - pattern: "*.sthlm.gz" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@erikrikarddaniel" - - "@jfy133" -maintainers: - - "@erikrikarddaniel" - - "@jfy133" diff --git a/nextflow.config b/nextflow.config index ff0d3d0..69971b4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,15 +14,16 @@ params { // Pipeline parameters // Clustering - clustering_tool = 'cluster' - cluster_seq_identity = 0.5 - cluster_coverage = 0.9 - cluster_cov_mode = 0 - cluster_size_threshold = 25 + clustering_tool = 'cluster' + cluster_seq_identity = 0.5 + cluster_coverage = 0.9 + cluster_cov_mode = 0 + cluster_size_threshold = 25 // Alignment - hmmsearch_write_align = false - hmmsearch_write_target = false - hmmsearch_write_domain = true + hmmsearch_write_align = false + hmmsearch_write_target = false + hmmsearch_write_domain = true + hmmsearch_evalue_cutoff = 0.001 // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 6ccb43c..b2e3f26 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -220,13 +220,6 @@ "type": "object", "description": "Use these parameters to control the multiple sequence alignment subworkflow execution.", "properties": { - "hmmsearch_write_align": { - "type": "boolean", - "description": "Boolean whether to generate alignment results file of hmmsearch", - "default": false, - "fa_icon": "fas fa-check-square", - "hidden": true - }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", @@ -240,6 +233,11 @@ "default": true, "fa_icon": "fas fa-check-square", "hidden": true + }, + "hmmsearch_evalue_cutoff": { + "type": "number", + "default": 0.001, + "description": "hmmsearch e-value cutoff threshold for reported results" } } } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 377ddfe..4cf7248 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -66,7 +66,7 @@ workflow PROTEINFAMILIES { HMMER_HMMBUILD.out.hmm .map{ meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(ch_samplesheet, by: 0) - .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, params.hmmsearch_write_align, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } + .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true .set { ch_input_for_hmmsearch } HMMER_HMMSEARCH{ ch_input_for_hmmsearch } From a39d649372645115ff0fbc0cde89cb1a30896395 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 13 Nov 2024 08:33:40 +0000 Subject: [PATCH 018/139] generate_families converted into subworkflow --- nextflow.config | 1 - subworkflows/local/generate_families.nf | 46 +++++++++++++++++++++++++ workflows/proteinfamilies.nf | 34 +++--------------- 3 files changed, 50 insertions(+), 31 deletions(-) create mode 100644 subworkflows/local/generate_families.nf diff --git a/nextflow.config b/nextflow.config index 69971b4..30af3e3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -20,7 +20,6 @@ params { cluster_cov_mode = 0 cluster_size_threshold = 25 // Alignment - hmmsearch_write_align = false hmmsearch_write_target = false hmmsearch_write_domain = true hmmsearch_evalue_cutoff = 0.001 diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf new file mode 100644 index 0000000..c95de5a --- /dev/null +++ b/subworkflows/local/generate_families.nf @@ -0,0 +1,46 @@ +/* + FAMILY MODEL GENERATION +*/ + +include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' +include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' + +workflow GENERATE_FAMILIES { + take: + sequences // tuple val(meta), path(fasta) + fasta_chunks + + main: + ch_versions = Channel.empty() + ch_alignments = Channel.empty() + + fasta_chunks + .transpose() + .map { meta, file -> + def baseName = file.toString().split('/')[-1].split('\\.')[0] + [ [id: meta.id, chunk: baseName], file ] + } + .set { msa_input_ch } + + FAMSA_ALIGN(msa_input_ch, [[:],[]], false) + ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) + + HMMER_HMMBUILD( FAMSA_ALIGN.out.alignment, [] ) + ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) + + // Combine with same id to ensure in sync + HMMER_HMMBUILD.out.hmm + .map{ meta, hmm -> [ [id: meta.id], meta, hmm ] } + .combine(sequences, by: 0) + .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true + .set { ch_input_for_hmmsearch } + + HMMER_HMMSEARCH{ ch_input_for_hmmsearch } + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + ch_alignments = HMMER_HMMSEARCH.out.alignments + + emit: + versions = ch_versions + alignments = ch_alignments +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 4cf7248..ed901ad 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -20,13 +20,7 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' - -// -// MODULE: Installed directly from nf-core/modules -// -include { FAMSA_ALIGN } from '../modules/nf-core/famsa/align/main' -include { HMMER_HMMBUILD } from '../modules/nf-core/hmmer/hmmbuild/main' -include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' +include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -46,31 +40,11 @@ workflow PROTEINFAMILIES { // Clustering EXECUTE_CLUSTERING( ch_samplesheet ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + fasta_chunks = EXECUTE_CLUSTERING.out.fasta_chunks // Multiple sequence alignment - EXECUTE_CLUSTERING.out.fasta_chunks - .transpose() - .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0] - [ [id: meta.id, chunk: baseName], file ] - } - .set { msa_input_ch } - - FAMSA_ALIGN(msa_input_ch, [[:],[]], false) - ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) - - HMMER_HMMBUILD( FAMSA_ALIGN.out.alignment, [] ) - ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) - - // Combine with same id to ensure in sync - HMMER_HMMBUILD.out.hmm - .map{ meta, hmm -> [ [id: meta.id], meta, hmm ] } - .combine(ch_samplesheet, by: 0) - .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true - .set { ch_input_for_hmmsearch } - - HMMER_HMMSEARCH{ ch_input_for_hmmsearch } - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + GENERATE_FAMILIES( ch_samplesheet, fasta_chunks ) + ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) // // Collate and save software versions From e203af37afd05b7d07b3f5349e3544a29a3e9e3e Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 13 Nov 2024 12:02:17 +0000 Subject: [PATCH 019/139] mafft alternative alignment tool --- conf/modules.config | 5 +++++ nextflow.config | 1 + nextflow_schema.json | 6 ++++++ subworkflows/local/generate_families.nf | 13 ++++++++++--- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f275754..fabc518 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -46,6 +46,11 @@ process { tag = { "${meta.id}_${meta.chunk}" } } + withName: 'MAFFT' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + } + withName: 'HMMER_HMMBUILD' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } diff --git a/nextflow.config b/nextflow.config index 30af3e3..7f80022 100644 --- a/nextflow.config +++ b/nextflow.config @@ -20,6 +20,7 @@ params { cluster_cov_mode = 0 cluster_size_threshold = 25 // Alignment + alignment_tool = 'famsa' hmmsearch_write_target = false hmmsearch_write_domain = true hmmsearch_evalue_cutoff = 0.001 diff --git a/nextflow_schema.json b/nextflow_schema.json index b2e3f26..749ffca 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -220,6 +220,12 @@ "type": "object", "description": "Use these parameters to control the multiple sequence alignment subworkflow execution.", "properties": { + "alignment_tool": { + "type": "string", + "description": "Choose alignment tool. FAMSA is recommended as best time-memory-accuracy combination option.", + "help_text": "Available tools: 'famsa' or 'mafft'.", + "enum": ["famsa", "mafft"] + }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index c95de5a..eecc7cc 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -3,6 +3,7 @@ */ include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' +include { MAFFT } from '../../modules/nf-core/mafft/main' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' @@ -23,10 +24,16 @@ workflow GENERATE_FAMILIES { } .set { msa_input_ch } - FAMSA_ALIGN(msa_input_ch, [[:],[]], false) - ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) + if (params.alignment_tool == 'famsa') { + alignment_res = FAMSA_ALIGN(msa_input_ch, [[:],[]], false) + alignment_ch = alignment_res.alignment + } else { // fallback: mafft + alignment_res = MAFFT( msa_input_ch, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) + alignment_ch = alignment_res.fas + } + ch_versions = ch_versions.mix( alignment_res.versions ) - HMMER_HMMBUILD( FAMSA_ALIGN.out.alignment, [] ) + HMMER_HMMBUILD( alignment_ch, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) // Combine with same id to ensure in sync From e24a63bfd3e907a6a66c13de6dbaeb5394c6ffd6 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 14 Nov 2024 12:33:14 +0000 Subject: [PATCH 020/139] hmmbuild updated --- modules.json | 56 +++++-------------- .../nf-core/hmmer/hmmbuild/environment.yml | 2 +- modules/nf-core/hmmer/hmmbuild/main.nf | 4 +- .../nf-core/hmmer/hmmbuild/tests/main.nf.test | 12 ++-- .../hmmer/hmmbuild/tests/main.nf.test.snap | 14 ++--- 5 files changed, 31 insertions(+), 57 deletions(-) diff --git a/modules.json b/modules.json index 55e4436..df5a310 100644 --- a/modules.json +++ b/modules.json @@ -8,75 +8,55 @@ "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmbuild": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", + "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mafft": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "prokka": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -85,26 +65,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/modules/nf-core/hmmer/hmmbuild/environment.yml b/modules/nf-core/hmmer/hmmbuild/environment.yml index 7c62eac..c5ddec5 100644 --- a/modules/nf-core/hmmer/hmmbuild/environment.yml +++ b/modules/nf-core/hmmer/hmmbuild/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::hmmer=3.3.2 + - bioconda::hmmer=3.4 diff --git a/modules/nf-core/hmmer/hmmbuild/main.nf b/modules/nf-core/hmmer/hmmbuild/main.nf index b4629cb..8eed7fc 100644 --- a/modules/nf-core/hmmer/hmmbuild/main.nf +++ b/modules/nf-core/hmmer/hmmbuild/main.nf @@ -4,8 +4,8 @@ process HMMER_HMMBUILD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/hmmer:3.3.2--h87f3376_2': - 'biocontainers/hmmer:3.3.2--h1b792b2_1' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/07/07c4cbd91c4459dc86b13b5cd799cacba96b27d66c276485550d299c7a4c6f8a/data' : + 'community.wave.seqera.io/library/hmmer:3.4--cb5d2dd2e85974ca' }" input: tuple val(meta), path(alignment) diff --git a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test index d7c0582..635f5b6 100644 --- a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test +++ b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test @@ -16,9 +16,9 @@ nextflow_process { process { """ input[0] = [ - [ id: 'PF14720' ], // meta map - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) - ] + [ id: 'PF14720' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) + ] input[1] = [] """ @@ -46,9 +46,9 @@ nextflow_process { process { """ input[0] = [ - [ id: 'PF14720' ], // meta map - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) - ] + [ id: 'PF14720' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) + ] input[1] = [] """ diff --git a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap index 8cdff17..79317b8 100644 --- a/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap +++ b/modules/nf-core/hmmer/hmmbuild/tests/main.nf.test.snap @@ -14,7 +14,7 @@ "PF14720.hmmbuild.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "2": [ - "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + "versions.yml:md5,f8a0bffcbbc58404752849403812905b" ], "hmm": [ [ @@ -28,28 +28,28 @@ "PF14720.hmmbuild.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "versions": [ - "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + "versions.yml:md5,f8a0bffcbbc58404752849403812905b" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nextflow": "23.04.5" }, - "timestamp": "2024-09-05T21:38:44.751216" + "timestamp": "2024-11-13T12:52:29.794123574" }, "test-hmmer-hmmbuild": { "content": [ "PF14720.hmm.gz", "PF14720.hmmbuild.txt", [ - "versions.yml:md5,6f4796b714cb0d5981cd12d9e89cb599" + "versions.yml:md5,f8a0bffcbbc58404752849403812905b" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nextflow": "23.04.5" }, - "timestamp": "2024-09-05T21:49:25.772308" + "timestamp": "2024-11-13T12:52:23.95935055" } } \ No newline at end of file From 4c639f01c28c827db5ace1fd27980f1c30f85d0c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 14 Nov 2024 13:44:34 +0000 Subject: [PATCH 021/139] added support for .gz input fasta --- assets/samplesheet.csv | 2 +- modules/local/chunk_clusters.nf | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 8a83664..e9ca976 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,3 @@ sample,fasta mgnifams_test,input/mgnifams_input.fa -mgnifams_test_copy,input/mgnifams_input_copy.fa +mgnifams_test_copy_gz,input/mgnifams_input_copy.fa.gz diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 5607758..cbb681e 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -16,9 +16,15 @@ process CHUNK_CLUSTERS { path "versions.yml" , emit: versions script: + def is_compressed = sequences.getName().endsWith(".gz") ? true : false + def fasta_name = sequences.name.replace(".gz", "") """ + if [ "$is_compressed" == "true" ]; then + gzip -c -d $sequences > $fasta_name + fi + chunk_clusters.py --clustering ${clustering} \ - --sequences ${sequences} \ + --sequences ${fasta_name} \ --threshold ${size_threshold} \ --out_folder chunked_fasta From b4a054fbcfdc435c9403fcdb215de408fde2778f Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 14 Nov 2024 13:55:02 +0000 Subject: [PATCH 022/139] Preparing input channel to extract family representative sequences for post-processing --- subworkflows/local/generate_families.nf | 4 ++-- workflows/proteinfamilies.nf | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index eecc7cc..aab3f6d 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -38,12 +38,12 @@ workflow GENERATE_FAMILIES { // Combine with same id to ensure in sync HMMER_HMMBUILD.out.hmm - .map{ meta, hmm -> [ [id: meta.id], meta, hmm ] } + .map { meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(sequences, by: 0) .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH{ ch_input_for_hmmsearch } + HMMER_HMMSEARCH ( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) ch_alignments = HMMER_HMMSEARCH.out.alignments diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index ed901ad..44a4e90 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -46,6 +46,14 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES( ch_samplesheet, fasta_chunks ) ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) + // Post-processing + GENERATE_FAMILIES.out.alignments + .map { meta, aln -> [ [id: meta.id], aln ] } + .groupTuple(by: 0) + .set { ch_family_reps } + + ch_family_reps.view() + // // Collate and save software versions // From 2b6b4a855a43cbef53e2325d3d04206a917af3ab Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 14 Nov 2024 15:17:21 +0000 Subject: [PATCH 023/139] added clipkit module, fixing some linting warnings, updated subworkflows --- conf/modules.config | 7 +- modules.json | 9 ++- modules/nf-core/clipkit/environment.yml | 7 ++ modules/nf-core/clipkit/main.nf | 46 +++++++++++++ modules/nf-core/clipkit/meta.yml | 50 ++++++++++++++ modules/nf-core/clipkit/tests/main.nf.test | 66 ++++++++++++++++++ .../nf-core/clipkit/tests/main.nf.test.snap | 68 +++++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 9 ++- subworkflows/local/execute_clustering.nf | 7 +- subworkflows/local/generate_families.nf | 10 ++- .../tests/main.workflow.nf.test | 10 +-- .../utils_nfschema_plugin/tests/main.nf.test | 4 +- 13 files changed, 280 insertions(+), 14 deletions(-) create mode 100644 modules/nf-core/clipkit/environment.yml create mode 100644 modules/nf-core/clipkit/main.nf create mode 100644 modules/nf-core/clipkit/meta.yml create mode 100644 modules/nf-core/clipkit/tests/main.nf.test create mode 100644 modules/nf-core/clipkit/tests/main.nf.test.snap diff --git a/conf/modules.config b/conf/modules.config index fabc518..b08c769 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -51,7 +51,12 @@ process { tag = { "${meta.id}_${meta.chunk}" } } - withName: 'HMMER_HMMBUILD' { + withName: 'MAFFT' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + } + + withName: 'CLIPKIT' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } } diff --git a/modules.json b/modules.json index df5a310..a1b0a7b 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,11 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "clipkit": { + "branch": "master", + "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", + "installed_by": ["modules"] + }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", @@ -64,7 +69,7 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { @@ -74,7 +79,7 @@ }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/clipkit/environment.yml b/modules/nf-core/clipkit/environment.yml new file mode 100644 index 0000000..65c451f --- /dev/null +++ b/modules/nf-core/clipkit/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::clipkit=2.3.0" diff --git a/modules/nf-core/clipkit/main.nf b/modules/nf-core/clipkit/main.nf new file mode 100644 index 0000000..2a9ebe3 --- /dev/null +++ b/modules/nf-core/clipkit/main.nf @@ -0,0 +1,46 @@ +process CLIPKIT { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/clipkit:2.3.0--pyhdfd78af_0': + 'biocontainers/clipkit:2.3.0--pyhdfd78af_0' }" + + input: + tuple val(meta), path(aln) + + output: + tuple val(meta), path("*.clipkit"), emit: clipkit + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + clipkit \\ + $args \\ + $aln \\ + -o ${prefix}.clipkit + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + clipkit: \$(clipkit --version |& sed '1!d ; s/clipkit //') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.clipkit + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + clipkit: \$(clipkit --version |& sed '1!d ; s/clipkit //') + END_VERSIONS + """ +} diff --git a/modules/nf-core/clipkit/meta.yml b/modules/nf-core/clipkit/meta.yml new file mode 100644 index 0000000..5347ad5 --- /dev/null +++ b/modules/nf-core/clipkit/meta.yml @@ -0,0 +1,50 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "clipkit" +description: ClipKIT is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes those that display characteristics poor phylogenetic signal. +keywords: + - sort + - example + - genomics +tools: + - "clipkit": + description: "Alignment trimming software for phylogenetics." + homepage: "https://jlsteenwyk.com/ClipKIT/" + documentation: "https://jlsteenwyk.com/ClipKIT/" + tool_dev_url: "https://github.com/JLSteenwyk/ClipKIT" + doi: "10.1371/journal.pbio.3001007" + licence: ["MIT"] + identifier: "" + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - aln: + type: file + description: Multiple sequence alignment file in various supported formats. + pattern: "*.{fa,fasta,fa,fna,faa,alnfaa,aln,sto,stk,mauve,alignment,clustal}" + +output: + - clipkit: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.clipkit": + type: file + description: Trimmed multiple sequence alignment file + pattern: "*.clipkit" + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@vagkaratzas" +maintainers: + - "@vagkaratzas" diff --git a/modules/nf-core/clipkit/tests/main.nf.test b/modules/nf-core/clipkit/tests/main.nf.test new file mode 100644 index 0000000..46cc8a0 --- /dev/null +++ b/modules/nf-core/clipkit/tests/main.nf.test @@ -0,0 +1,66 @@ +nextflow_process { + + name "Test Process CLIPKIT" + script "../main.nf" + process "CLIPKIT" + + tag "modules" + tag "modules_nfcore" + tag "clipkit" + tag "gunzip" + + setup { + run("GUNZIP") { + script "../../gunzip/main.nf" + process { + """ + input[0] = [ + [ id:'PF14720' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/hmmer/PF14720_seed.alnfaa.gz', checkIfExists: true) + ] + """ + } + } + } + + test("PF14720 - aln") { + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("PF14720 - aln - stub") { + + options "-stub" + + when { + process { + """ + input[0] = GUNZIP.out.gunzip + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/clipkit/tests/main.nf.test.snap b/modules/nf-core/clipkit/tests/main.nf.test.snap new file mode 100644 index 0000000..55f837d --- /dev/null +++ b/modules/nf-core/clipkit/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "PF14720 - aln - stub": { + "content": [ + { + "0": [ + [ + { + "id": "PF14720" + }, + "PF14720.clipkit:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,1eaf2dc589bc08c1e37cbbddbedfcc80" + ], + "clipkit": [ + [ + { + "id": "PF14720" + }, + "PF14720.clipkit:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,1eaf2dc589bc08c1e37cbbddbedfcc80" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "23.04.5" + }, + "timestamp": "2024-11-14T13:11:21.109400968" + }, + "PF14720 - aln": { + "content": [ + { + "0": [ + [ + { + "id": "PF14720" + }, + "PF14720.clipkit:md5,97e4328b5990f5e5a6241c225ed6d922" + ] + ], + "1": [ + "versions.yml:md5,1eaf2dc589bc08c1e37cbbddbedfcc80" + ], + "clipkit": [ + [ + { + "id": "PF14720" + }, + "PF14720.clipkit:md5,97e4328b5990f5e5a6241c225ed6d922" + ] + ], + "versions": [ + "versions.yml:md5,1eaf2dc589bc08c1e37cbbddbedfcc80" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "23.04.5" + }, + "timestamp": "2024-11-14T13:11:14.278212183" + } +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 7f80022..f4ae9c2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,6 +21,7 @@ params { cluster_size_threshold = 25 // Alignment alignment_tool = 'famsa' + trim_seed_msa = true hmmsearch_write_target = false hmmsearch_write_domain = true hmmsearch_evalue_cutoff = 0.001 diff --git a/nextflow_schema.json b/nextflow_schema.json index 749ffca..de22bcf 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -210,7 +210,7 @@ }, "cluster_size_threshold": { "type": "integer", - "default": 4, + "default": 25, "description": "Minimum clustering chunk size threshold to create seed multiple sequence alignments upon." } } @@ -226,6 +226,13 @@ "help_text": "Available tools: 'famsa' or 'mafft'.", "enum": ["famsa", "mafft"] }, + "trim_seed_msa": { + "type": "boolean", + "description": "Boolean whether to trim the seed MSA gaps", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index 8e4bef3..d536fed 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -13,18 +13,19 @@ workflow EXECUTE_CLUSTERING { sequences // tuple val(meta), path(fasta) main: - ch_versions = Channel.empty() - ch_chunked_fasta = Channel.empty() + ch_versions = Channel.empty() + ch_fasta_chunks = Channel.empty() MMSEQS_CREATEDB( sequences ) ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) if (params.clustering_tool == 'cluster') { cluster_res = MMSEQS_CLUSTER( MMSEQS_CREATEDB.out.db ) + ch_versions = ch_versions.mix( MMSEQS_CLUSTER.out.versions ) } else { // fallback: linclust cluster_res = MMSEQS_LINCLUST( MMSEQS_CREATEDB.out.db ) + ch_versions = ch_versions.mix( MMSEQS_LINCLUST.out.versions ) } - ch_versions = ch_versions.mix( cluster_res.versions ) // Join together to ensure in sync ch_input_for_createtsv = MMSEQS_CREATEDB.out.db diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index aab3f6d..eccb849 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -4,6 +4,7 @@ include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' include { MAFFT } from '../../modules/nf-core/mafft/main' +include { CLIPKIT } from '../../modules/nf-core/clipkit/main' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' @@ -26,12 +27,19 @@ workflow GENERATE_FAMILIES { if (params.alignment_tool == 'famsa') { alignment_res = FAMSA_ALIGN(msa_input_ch, [[:],[]], false) + ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) alignment_ch = alignment_res.alignment } else { // fallback: mafft alignment_res = MAFFT( msa_input_ch, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) + ch_versions = ch_versions.mix( MAFFT.out.versions ) alignment_ch = alignment_res.fas } - ch_versions = ch_versions.mix( alignment_res.versions ) + + if (params.trim_seed_msa) { + CLIPKIT(alignment_ch) + ch_versions = ch_versions.mix( CLIPKIT.out.versions ) + alignment_ch = CLIPKIT.out.clipkit + } HMMER_HMMBUILD( alignment_ch, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce..02dbf09 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 842dc43..8fb3016 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -94,7 +94,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { From c136435a0eb095aa00d791e0cbf0afd56e40e28a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 19 Nov 2024 08:12:02 +0000 Subject: [PATCH 024/139] extract family reps script --- bin/extract_family_reps.py | 58 ++++++++++++++++++++++++++++ modules.json | 58 +++++++++++++++++++++------- modules/local/extract_family_reps.nf | 27 +++++++++++++ workflows/proteinfamilies.nf | 12 +++++- 4 files changed, 138 insertions(+), 17 deletions(-) create mode 100755 bin/extract_family_reps.py create mode 100644 modules/local/extract_family_reps.nf diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py new file mode 100755 index 0000000..68e6f35 --- /dev/null +++ b/bin/extract_family_reps.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +import sys +import os +import gzip +import argparse +from Bio import SeqIO +from Bio.Seq import Seq +from Bio.SeqRecord import SeqRecord + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-f", + "--full_msa_folder", + required=True, + metavar="FOLDER", + type=str, + help="Input folder with Stockholm full alignments.", + ) + parser.add_argument( + "-o", + "--out_file", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with family representative sequences.", + ) + return parser.parse_args(args) + +def extract_first_sequences(msa_folder, out_file): + # Open the output file in write mode + with open(out_file, "w") as outfile: + # Iterate over all files in the MSA folder + for filename in os.listdir(msa_folder): + filepath = os.path.join(msa_folder, filename) + # Parse the Stockholm file and extract the first sequence + with gzip.open(filepath, "rt") as sto_file: + records = list(SeqIO.parse(sto_file, "stockholm")) + if records: + first_record = records[0] + # Remove gaps from the sequence + cleaned_sequence = str(first_record.seq).replace("-", "").replace(".", "") + # Create a new SeqRecord with the cleaned sequence + cleaned_record = SeqRecord( + Seq(cleaned_sequence), + id=first_record.id, + description=first_record.description + ) + # Write the cleaned sequence to the output file + SeqIO.write(cleaned_record, outfile, "fasta") + +def main(args=None): + args = parse_args(args) + extract_first_sequences(args.full_msa_folder, args.out_file) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/modules.json b/modules.json index a1b0a7b..739b2d5 100644 --- a/modules.json +++ b/modules.json @@ -8,60 +8,82 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mafft": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "prokka": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -70,20 +92,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf new file mode 100644 index 0000000..70d1dfe --- /dev/null +++ b/modules/local/extract_family_reps.nf @@ -0,0 +1,27 @@ +process EXTRACT_FAMILY_REPS { + tag "$meta.id" + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta), path(sto, stageAs: "sto/*") + + output: + tuple val(meta), path("${meta.id}_reps.fa"), emit: fasta + path "versions.yml" , emit: versions + + script: + """ + extract_family_reps.py --full_msa_folder sto \ + --out_file ${meta.id}_reps.fa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 44a4e90..5a07bc4 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -22,6 +22,12 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' + +// +// MODULE: Local to the pipeline +// +include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -50,9 +56,11 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES.out.alignments .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_family_reps } + .set { ch_msa_sto } - ch_family_reps.view() + EXTRACT_FAMILY_REPS( ch_msa_sto ) + ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + // ch_family_reps = EXTRACT_FAMILY_REPS.out.fasta // // Collate and save software versions From 5e068d17263da511a47a0e235e6927dcca0bd6a6 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 19 Nov 2024 13:47:53 +0000 Subject: [PATCH 025/139] removed prokka module --- conf/modules.config | 5 - modules.json | 7 - modules/nf-core/prokka/environment.yml | 5 - modules/nf-core/prokka/main.nf | 52 ------ modules/nf-core/prokka/meta.yml | 161 ------------------ modules/nf-core/prokka/tests/main.nf.test | 50 ------ .../nf-core/prokka/tests/main.nf.test.snap | 95 ----------- modules/nf-core/prokka/tests/tags.yml | 2 - workflows/proteinfamilies.nf | 2 - 9 files changed, 379 deletions(-) delete mode 100644 modules/nf-core/prokka/environment.yml delete mode 100644 modules/nf-core/prokka/main.nf delete mode 100644 modules/nf-core/prokka/meta.yml delete mode 100644 modules/nf-core/prokka/tests/main.nf.test delete mode 100644 modules/nf-core/prokka/tests/main.nf.test.snap delete mode 100644 modules/nf-core/prokka/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index b08c769..026abf8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -51,11 +51,6 @@ process { tag = { "${meta.id}_${meta.chunk}" } } - withName: 'MAFFT' { - ext.prefix = { "${meta.id}_${meta.chunk}" } - tag = { "${meta.id}_${meta.chunk}" } - } - withName: 'CLIPKIT' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } diff --git a/modules.json b/modules.json index 739b2d5..18c2ab5 100644 --- a/modules.json +++ b/modules.json @@ -77,13 +77,6 @@ "installed_by": [ "modules" ] - }, - "prokka": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] } } }, diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml deleted file mode 100644 index 7c9753f..0000000 --- a/modules/nf-core/prokka/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::prokka=1.14.6 diff --git a/modules/nf-core/prokka/main.nf b/modules/nf-core/prokka/main.nf deleted file mode 100644 index adfda03..0000000 --- a/modules/nf-core/prokka/main.nf +++ /dev/null @@ -1,52 +0,0 @@ -process PROKKA { - tag "$meta.id" - label 'process_low' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/prokka:1.14.6--pl5321hdfd78af_4' : - 'biocontainers/prokka:1.14.6--pl5321hdfd78af_4' }" - - input: - tuple val(meta), path(fasta) - path proteins - path prodigal_tf - - output: - tuple val(meta), path("${prefix}/*.gff"), emit: gff - tuple val(meta), path("${prefix}/*.gbk"), emit: gbk - tuple val(meta), path("${prefix}/*.fna"), emit: fna - tuple val(meta), path("${prefix}/*.faa"), emit: faa - tuple val(meta), path("${prefix}/*.ffn"), emit: ffn - tuple val(meta), path("${prefix}/*.sqn"), emit: sqn - tuple val(meta), path("${prefix}/*.fsa"), emit: fsa - tuple val(meta), path("${prefix}/*.tbl"), emit: tbl - tuple val(meta), path("${prefix}/*.err"), emit: err - tuple val(meta), path("${prefix}/*.log"), emit: log - tuple val(meta), path("${prefix}/*.txt"), emit: txt - tuple val(meta), path("${prefix}/*.tsv"), emit: tsv - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def proteins_opt = proteins ? "--proteins ${proteins[0]}" : "" - def prodigal_tf = prodigal_tf ? "--prodigaltf ${prodigal_tf[0]}" : "" - """ - prokka \\ - $args \\ - --cpus $task.cpus \\ - --prefix $prefix \\ - $proteins_opt \\ - $prodigal_tf \\ - $fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - prokka: \$(echo \$(prokka --version 2>&1) | sed 's/^.*prokka //') - END_VERSIONS - """ -} diff --git a/modules/nf-core/prokka/meta.yml b/modules/nf-core/prokka/meta.yml deleted file mode 100644 index 9074573..0000000 --- a/modules/nf-core/prokka/meta.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: prokka -description: Whole genome annotation of small genomes (bacterial, archeal, viral) -keywords: - - annotation - - fasta - - prokka -tools: - - prokka: - description: Rapid annotation of prokaryotic genomes - homepage: https://github.com/tseemann/prokka - doi: "10.1093/bioinformatics/btu153" - licence: ["GPL v2"] - identifier: biotools:prokka -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: | - FASTA file to be annotated. Has to contain at least a non-empty string dummy value. - - - proteins: - type: file - description: FASTA file of trusted proteins to first annotate from (optional) - - - prodigal_tf: - type: file - description: Training file to use for Prodigal (optional) -output: - - gff: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.gff: - type: file - description: annotation in GFF3 format, containing both sequences and annotations - pattern: "*.{gff}" - - gbk: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.gbk: - type: file - description: annotation in GenBank format, containing both sequences and annotations - pattern: "*.{gbk}" - - fna: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.fna: - type: file - description: nucleotide FASTA file of the input contig sequences - pattern: "*.{fna}" - - faa: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.faa: - type: file - description: protein FASTA file of the translated CDS sequences - pattern: "*.{faa}" - - ffn: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.ffn: - type: file - description: nucleotide FASTA file of all the prediction transcripts (CDS, rRNA, - tRNA, tmRNA, misc_RNA) - pattern: "*.{ffn}" - - sqn: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.sqn: - type: file - description: an ASN1 format "Sequin" file for submission to Genbank - pattern: "*.{sqn}" - - fsa: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.fsa: - type: file - description: nucleotide FASTA file of the input contig sequences, used by "tbl2asn" - to create the .sqn file - pattern: "*.{fsa}" - - tbl: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.tbl: - type: file - description: feature Table file, used by "tbl2asn" to create the .sqn file - pattern: "*.{tbl}" - - err: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.err: - type: file - description: unacceptable annotations - the NCBI discrepancy report. - pattern: "*.{err}" - - log: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.log: - type: file - description: contains all the output that Prokka produced during its run - pattern: "*.{log}" - - txt: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.txt: - type: file - description: statistics relating to the annotated features found - pattern: "*.{txt}" - - tsv: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}/*.tsv: - type: file - description: tab-separated file of all features (locus_tag,ftype,len_bp,gene,EC_number,COG,product) - pattern: "*.{tsv}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@rpetit3" -maintainers: - - "@rpetit3" diff --git a/modules/nf-core/prokka/tests/main.nf.test b/modules/nf-core/prokka/tests/main.nf.test deleted file mode 100644 index dca19bb..0000000 --- a/modules/nf-core/prokka/tests/main.nf.test +++ /dev/null @@ -1,50 +0,0 @@ -nextflow_process { - - name "Test Process PROKKA" - script "../main.nf" - process "PROKKA" - - tag "modules" - tag "modules_nfcore" - tag "prokka" - - test("Prokka - sarscov2 - genome.fasta") { - - when { - process { - """ - input[0] = Channel.fromList([ - tuple([ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)) - ]) - input[1] = [] - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.gbk.get(0).get(1)).exists() }, - { assert path(process.out.log.get(0).get(1)).exists() }, - { assert path(process.out.sqn.get(0).get(1)).exists() }, - { assert snapshot( - process.out.gff, - process.out.fna, - process.out.faa, - process.out.ffn, - process.out.fsa, - process.out.tbl, - process.out.err, - process.out.txt, - process.out.tsv, - process.out.versions - ).match() - } - ) - } - - } - -} diff --git a/modules/nf-core/prokka/tests/main.nf.test.snap b/modules/nf-core/prokka/tests/main.nf.test.snap deleted file mode 100644 index 874c989..0000000 --- a/modules/nf-core/prokka/tests/main.nf.test.snap +++ /dev/null @@ -1,95 +0,0 @@ -{ - "Prokka - sarscov2 - genome.fasta": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,5dbfb8fcf2db020564c16045976a0933" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fna:md5,787307f29a263e5657cc276ebbf7e2b3" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.faa:md5,a4ceda83262b3c222a6b1f508fb9e24b" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.ffn:md5,80f474b5367b7ea5ed23791935f65e34" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fsa:md5,71bbefcb7f12046bcd3263f58cfd5404" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d8f816a066ced94b62d9618b13fb8add" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.err:md5,b3daedc646fddd422824e2b3e5e9229d" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.txt:md5,b40e485ffc8eaf1feacf8d79d9751a33" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.tsv:md5,da7c720c3018c5081d6a70b517b7d450" - ] - ], - [ - "versions.yml:md5,e83a22fe02167e290d90853b45650db9" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-30T12:34:20.447734" - } -} \ No newline at end of file diff --git a/modules/nf-core/prokka/tests/tags.yml b/modules/nf-core/prokka/tests/tags.yml deleted file mode 100644 index a2dc7bd..0000000 --- a/modules/nf-core/prokka/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -prokka: - - "modules/nf-core/prokka/**" diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 5a07bc4..30915e2 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -22,7 +22,6 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' - // // MODULE: Local to the pipeline // @@ -60,7 +59,6 @@ workflow PROTEINFAMILIES { EXTRACT_FAMILY_REPS( ch_msa_sto ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) - // ch_family_reps = EXTRACT_FAMILY_REPS.out.fasta // // Collate and save software versions From b0ee92d0ee3ccd96f727482499ea15a92ca21bf7 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 21 Nov 2024 14:00:45 +0000 Subject: [PATCH 026/139] export fam to rep mapping --- bin/extract_family_reps.py | 37 ++++++++++++++++++++-------- modules/local/chunk_clusters.nf | 6 ++--- modules/local/extract_family_reps.nf | 6 +++-- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index 68e6f35..c068cd1 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -4,6 +4,7 @@ import os import gzip import argparse +import csv from Bio import SeqIO from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord @@ -18,9 +19,17 @@ def parse_args(args=None): type=str, help="Input folder with Stockholm full alignments.", ) + parser.add_argument( + "-m", + "--map", + required=True, + metavar="FILE", + type=str, + help="Name of the output csv file with representative sequences to family id mapping.", + ) parser.add_argument( "-o", - "--out_file", + "--out_fasta", required=True, metavar="FILE", type=str, @@ -28,9 +37,13 @@ def parse_args(args=None): ) return parser.parse_args(args) -def extract_first_sequences(msa_folder, out_file): - # Open the output file in write mode - with open(out_file, "w") as outfile: +def extract_first_sequences(msa_folder, map_file, out_fasta): + # Open the output FASTA file in write mode + with open(out_fasta, "w") as fasta_out, open(map_file, "w", newline="") as csv_out: + csv_writer = csv.writer(csv_out) + # Write the CSV header + csv_writer.writerow(["family", "representative_sequence"]) + # Iterate over all files in the MSA folder for filename in os.listdir(msa_folder): filepath = os.path.join(msa_folder, filename) @@ -41,18 +54,22 @@ def extract_first_sequences(msa_folder, out_file): first_record = records[0] # Remove gaps from the sequence cleaned_sequence = str(first_record.seq).replace("-", "").replace(".", "") - # Create a new SeqRecord with the cleaned sequence + # Modify the ID to only include the part before the first space + cleaned_id = first_record.id.split(" ")[0] + # Create a new SeqRecord with the cleaned sequence and ID cleaned_record = SeqRecord( Seq(cleaned_sequence), - id=first_record.id, - description=first_record.description + id=cleaned_id, + description="" ) - # Write the cleaned sequence to the output file - SeqIO.write(cleaned_record, outfile, "fasta") + # Write the cleaned sequence to the FASTA file + SeqIO.write(cleaned_record, fasta_out, "fasta") + # Write the mapping to the CSV file + csv_writer.writerow([os.path.splitext(os.path.splitext(filename)[0])[0], cleaned_id]) def main(args=None): args = parse_args(args) - extract_first_sequences(args.full_msa_folder, args.out_file) + extract_first_sequences(args.full_msa_folder, args.map, args.out_fasta) if __name__ == "__main__": sys.exit(main()) diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index cbb681e..9ff8692 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -23,9 +23,9 @@ process CHUNK_CLUSTERS { gzip -c -d $sequences > $fasta_name fi - chunk_clusters.py --clustering ${clustering} \ - --sequences ${fasta_name} \ - --threshold ${size_threshold} \ + chunk_clusters.py --clustering ${clustering} \\ + --sequences ${fasta_name} \\ + --threshold ${size_threshold} \\ --out_folder chunked_fasta cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf index 70d1dfe..2d0a9fe 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps.nf @@ -11,12 +11,14 @@ process EXTRACT_FAMILY_REPS { output: tuple val(meta), path("${meta.id}_reps.fa"), emit: fasta + tuple val(meta), path("${meta.id}_map.csv"), emit: map path "versions.yml" , emit: versions script: """ - extract_family_reps.py --full_msa_folder sto \ - --out_file ${meta.id}_reps.fa + extract_family_reps.py --full_msa_folder sto \\ + --map ${meta.id}_map.csv \\ + --out_fasta ${meta.id}_reps.fa cat <<-END_VERSIONS > versions.yml "${task.process}": From 82742e7770e72a56f892a6f5b5ec8bba42d9b52c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 21 Nov 2024 14:06:47 +0000 Subject: [PATCH 027/139] EXTRACT_FAMILY_REPS publishDir --- conf/modules.config | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 026abf8..b7622b2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -62,6 +62,13 @@ process { tag = { "${meta.id}_${meta.chunk}" } } + withName: 'EXTRACT_FAMILY_REPS' { + publishDir = [ + path: { "${params.outdir}/family_reps/${meta.id}/" }, + mode: params.publish_dir_mode + ] + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ From ea8e3009871eb19104c1f680b25f0a3a79ee63c8 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 22 Nov 2024 10:01:43 +0000 Subject: [PATCH 028/139] custom multiqc with family metadata --- bin/extract_family_reps.py | 24 +++++++++++++++++------- modules/local/extract_family_reps.nf | 8 ++++---- workflows/proteinfamilies.nf | 2 ++ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index c068cd1..a05d175 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -21,11 +21,11 @@ def parse_args(args=None): ) parser.add_argument( "-m", - "--map", + "--metadata", required=True, metavar="FILE", type=str, - help="Name of the output csv file with representative sequences to family id mapping.", + help="Name of the output csv file with family ids, sizes and representative sequences.", ) parser.add_argument( "-o", @@ -37,12 +37,20 @@ def parse_args(args=None): ) return parser.parse_args(args) -def extract_first_sequences(msa_folder, map_file, out_fasta): +def extract_first_sequences(msa_folder, metadata_file, out_fasta): # Open the output FASTA file in write mode - with open(out_fasta, "w") as fasta_out, open(map_file, "w", newline="") as csv_out: + with open(out_fasta, "w") as fasta_out, open(metadata_file, "w", newline="") as csv_out: + # Write custom metadata lines to the metadata file + csv_out.write( + "# id: \"family_metadata\"\n" + "# section_name: \"Family Metadata\"\n" + "# description: \"Family metadata table containing family ids and sizes along with representative sequences, ids and lengths.\"\n" + "# format: \"csv\"\n" + "# plot_type: \"table\"\n" + ) csv_writer = csv.writer(csv_out) # Write the CSV header - csv_writer.writerow(["family", "representative_sequence"]) + csv_writer.writerow(["Sample Name", "Family Id", "Size", "Representative Length", "Representative Id", "Sequence"]) # Iterate over all files in the MSA folder for filename in os.listdir(msa_folder): @@ -50,6 +58,7 @@ def extract_first_sequences(msa_folder, map_file, out_fasta): # Parse the Stockholm file and extract the first sequence with gzip.open(filepath, "rt") as sto_file: records = list(SeqIO.parse(sto_file, "stockholm")) + family_size = len(records) if records: first_record = records[0] # Remove gaps from the sequence @@ -65,11 +74,12 @@ def extract_first_sequences(msa_folder, map_file, out_fasta): # Write the cleaned sequence to the FASTA file SeqIO.write(cleaned_record, fasta_out, "fasta") # Write the mapping to the CSV file - csv_writer.writerow([os.path.splitext(os.path.splitext(filename)[0])[0], cleaned_id]) + family_name = os.path.splitext(os.path.splitext(filename)[0])[0] + csv_writer.writerow([family_name, family_name, family_size, len(cleaned_sequence), cleaned_id, cleaned_sequence]) def main(args=None): args = parse_args(args) - extract_first_sequences(args.full_msa_folder, args.map, args.out_fasta) + extract_first_sequences(args.full_msa_folder, args.metadata, args.out_fasta) if __name__ == "__main__": sys.exit(main()) diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf index 2d0a9fe..5cd4669 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps.nf @@ -10,14 +10,14 @@ process EXTRACT_FAMILY_REPS { tuple val(meta), path(sto, stageAs: "sto/*") output: - tuple val(meta), path("${meta.id}_reps.fa"), emit: fasta - tuple val(meta), path("${meta.id}_map.csv"), emit: map - path "versions.yml" , emit: versions + tuple val(meta), path("${meta.id}_reps.fa") , emit: fasta + tuple val(meta), path("${meta.id}_meta_mqc.csv"), emit: map + path "versions.yml" , emit: versions script: """ extract_family_reps.py --full_msa_folder sto \\ - --map ${meta.id}_map.csv \\ + --metadata ${meta.id}_meta_mqc.csv \\ --out_fasta ${meta.id}_reps.fa cat <<-END_VERSIONS > versions.yml diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 30915e2..35de0fb 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -103,6 +103,8 @@ workflow PROTEINFAMILIES { ) ) + ch_multiqc_files = ch_multiqc_files.mix(EXTRACT_FAMILY_REPS.out.map.collect{it[1]}.ifEmpty([])) + MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), From dfaae4152c5784268b3b521fb01c8fd6fd995b46 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 22 Nov 2024 14:12:24 +0000 Subject: [PATCH 029/139] added label and when blocks to custom modules to fix linting warnings --- modules.json | 54 ++++++++-------------------- modules/local/chunk_clusters.nf | 4 +++ modules/local/extract_family_reps.nf | 4 +++ 3 files changed, 22 insertions(+), 40 deletions(-) diff --git a/modules.json b/modules.json index 18c2ab5..75691ed 100644 --- a/modules.json +++ b/modules.json @@ -8,75 +8,55 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mafft": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -85,26 +65,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 9ff8692..1e0e897 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -1,5 +1,6 @@ process CHUNK_CLUSTERS { tag "$meta.id" + label 'process_single' conda "conda-forge::biopython=1.84" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -15,6 +16,9 @@ process CHUNK_CLUSTERS { tuple val(meta), path("chunked_fasta/*"), emit: fasta_chunks path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def is_compressed = sequences.getName().endsWith(".gz") ? true : false def fasta_name = sequences.name.replace(".gz", "") diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf index 5cd4669..1a88e2f 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps.nf @@ -1,5 +1,6 @@ process EXTRACT_FAMILY_REPS { tag "$meta.id" + label 'process_single' conda "conda-forge::biopython=1.84" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -14,6 +15,9 @@ process EXTRACT_FAMILY_REPS { tuple val(meta), path("${meta.id}_meta_mqc.csv"), emit: map path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: """ extract_family_reps.py --full_msa_folder sto \\ From 53ea42fb1ae46cf3b8c09516177bd6ca60968099 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 22 Nov 2024 14:50:49 +0000 Subject: [PATCH 030/139] input samplesheet and test data hosted in nf-core test-datasets repo, linclust as default faster algorithm for cluster --- assets/samplesheet.csv | 3 --- conf/test.config | 5 +---- nextflow.config | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 assets/samplesheet.csv diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index e9ca976..0000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,3 +0,0 @@ -sample,fasta -mgnifams_test,input/mgnifams_input.fa -mgnifams_test_copy_gz,input/mgnifams_input_copy.fa.gz diff --git a/conf/test.config b/conf/test.config index 4ba249d..6b47a2f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,9 +23,6 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - // input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - clustering_tool = 'linclust' + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' cluster_size_threshold = 5 } diff --git a/nextflow.config b/nextflow.config index f4ae9c2..d893b0b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,7 +14,7 @@ params { // Pipeline parameters // Clustering - clustering_tool = 'cluster' + clustering_tool = 'linclust' cluster_seq_identity = 0.5 cluster_coverage = 0.9 cluster_cov_mode = 0 From eb08a3c6671aa1bc2e3b98fd9c32c837ff3a6339 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 09:13:28 +0000 Subject: [PATCH 031/139] updated mafft module to mafft-align --- conf/modules.config | 2 +- modules.json | 58 ++++++++++---- .../nf-core/mafft/{ => align}/environment.yml | 0 modules/nf-core/mafft/{ => align}/main.nf | 2 +- modules/nf-core/mafft/{ => align}/meta.yml | 2 +- .../mafft/{ => align}/tests/main.nf.test | 5 +- .../mafft/{ => align}/tests/main.nf.test.snap | 80 +++++++++++++------ modules/nf-core/mafft/align/tests/tags.yml | 2 + modules/nf-core/mafft/tests/tags.yml | 2 - subworkflows/local/generate_families.nf | 6 +- 10 files changed, 109 insertions(+), 50 deletions(-) rename modules/nf-core/mafft/{ => align}/environment.yml (100%) rename modules/nf-core/mafft/{ => align}/main.nf (99%) rename modules/nf-core/mafft/{ => align}/meta.yml (99%) rename modules/nf-core/mafft/{ => align}/tests/main.nf.test (99%) rename modules/nf-core/mafft/{ => align}/tests/main.nf.test.snap (74%) create mode 100644 modules/nf-core/mafft/align/tests/tags.yml delete mode 100644 modules/nf-core/mafft/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index b7622b2..227e9a0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -46,7 +46,7 @@ process { tag = { "${meta.id}_${meta.chunk}" } } - withName: 'MAFFT' { + withName: 'MAFFT_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } } diff --git a/modules.json b/modules.json index 75691ed..476ef6e 100644 --- a/modules.json +++ b/modules.json @@ -8,55 +8,75 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, - "mafft": { + "mafft/align": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -65,20 +85,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/mafft/environment.yml b/modules/nf-core/mafft/align/environment.yml similarity index 100% rename from modules/nf-core/mafft/environment.yml rename to modules/nf-core/mafft/align/environment.yml diff --git a/modules/nf-core/mafft/main.nf b/modules/nf-core/mafft/align/main.nf similarity index 99% rename from modules/nf-core/mafft/main.nf rename to modules/nf-core/mafft/align/main.nf index f09a0c9..6031dd4 100644 --- a/modules/nf-core/mafft/main.nf +++ b/modules/nf-core/mafft/align/main.nf @@ -1,4 +1,4 @@ -process MAFFT { +process MAFFT_ALIGN { tag "$meta.id" label 'process_high' diff --git a/modules/nf-core/mafft/meta.yml b/modules/nf-core/mafft/align/meta.yml similarity index 99% rename from modules/nf-core/mafft/meta.yml rename to modules/nf-core/mafft/align/meta.yml index ed5e1ea..30d8053 100644 --- a/modules/nf-core/mafft/meta.yml +++ b/modules/nf-core/mafft/align/meta.yml @@ -1,4 +1,4 @@ -name: mafft +name: mafft_align description: Multiple sequence alignment using MAFFT keywords: - fasta diff --git a/modules/nf-core/mafft/tests/main.nf.test b/modules/nf-core/mafft/align/tests/main.nf.test similarity index 99% rename from modules/nf-core/mafft/tests/main.nf.test rename to modules/nf-core/mafft/align/tests/main.nf.test index 683979f..660a897 100644 --- a/modules/nf-core/mafft/tests/main.nf.test +++ b/modules/nf-core/mafft/align/tests/main.nf.test @@ -1,11 +1,12 @@ nextflow_process { - name "Test Process MAFFT" + name "Test Process MAFFT_ALIGN" script "../main.nf" - process "MAFFT" + process "MAFFT_ALIGN" tag "modules" tag "modules_nfcore" tag "mafft" + tag "mafft/align" test("SARS-CoV-2 scaffolds fasta - uncompressed") { when { diff --git a/modules/nf-core/mafft/tests/main.nf.test.snap b/modules/nf-core/mafft/align/tests/main.nf.test.snap similarity index 74% rename from modules/nf-core/mafft/tests/main.nf.test.snap rename to modules/nf-core/mafft/align/tests/main.nf.test.snap index c14ad08..fd1c213 100644 --- a/modules/nf-core/mafft/tests/main.nf.test.snap +++ b/modules/nf-core/mafft/align/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -24,11 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:08:41.735774847" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:35:37.370628782" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta multiple": { "content": [ @@ -43,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -55,11 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:10:38.940555785" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:37:18.354500948" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta normal": { "content": [ @@ -74,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -86,11 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:09:35.656248409" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:36:15.023267596" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta long": { "content": [ @@ -105,7 +117,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -117,11 +129,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:10:26.372655394" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:37:05.79514229" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta profile": { "content": [ @@ -136,7 +152,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -148,11 +164,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:10:14.039053212" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:36:52.893313726" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta fragments": { "content": [ @@ -167,7 +187,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -179,11 +199,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:09:49.737364197" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:36:27.678238997" }, "SARS-CoV-2 scaffolds fasta - add informative sites fasta full": { "content": [ @@ -198,7 +222,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -210,11 +234,15 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:10:02.952480822" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:36:41.02801897" }, "SARS-CoV-2 scaffolds fasta - compressed": { "content": [ @@ -229,7 +257,7 @@ ] ], "1": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ], "fas": [ [ @@ -241,10 +269,14 @@ ] ], "versions": [ - "versions.yml:md5,6e930f6a5acc19ff3a7849536a9fd0ee" + "versions.yml:md5,87ac79c217c88dbdc575ad66e868c8c0" ] } ], - "timestamp": "2024-02-09T19:09:21.096197597" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.1" + }, + "timestamp": "2024-11-26T16:36:03.570717213" } } \ No newline at end of file diff --git a/modules/nf-core/mafft/align/tests/tags.yml b/modules/nf-core/mafft/align/tests/tags.yml new file mode 100644 index 0000000..97b6666 --- /dev/null +++ b/modules/nf-core/mafft/align/tests/tags.yml @@ -0,0 +1,2 @@ +mafft/align: + - modules/nf-core/mafft/align/** diff --git a/modules/nf-core/mafft/tests/tags.yml b/modules/nf-core/mafft/tests/tags.yml deleted file mode 100644 index caddc3c..0000000 --- a/modules/nf-core/mafft/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mafft: - - modules/nf-core/mafft/** diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index eccb849..5eb9e84 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -3,7 +3,7 @@ */ include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' -include { MAFFT } from '../../modules/nf-core/mafft/main' +include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' include { CLIPKIT } from '../../modules/nf-core/clipkit/main' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' @@ -30,8 +30,8 @@ workflow GENERATE_FAMILIES { ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) alignment_ch = alignment_res.alignment } else { // fallback: mafft - alignment_res = MAFFT( msa_input_ch, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) - ch_versions = ch_versions.mix( MAFFT.out.versions ) + alignment_res = MAFFT_ALIGN( msa_input_ch, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) + ch_versions = ch_versions.mix( MAFFT_ALIGN.out.versions ) alignment_ch = alignment_res.fas } From 5283390244fae0189eef908f0a2ba57ea8ea9e6b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 11:42:40 +0000 Subject: [PATCH 032/139] subworkflows updated --- modules.json | 58 ++++-------- .../nf-core/utils_nextflow_pipeline/main.nf | 2 + .../nf-core/utils_nfcore_pipeline/main.nf | 89 +++++-------------- .../tests/main.function.nf.test | 52 ----------- .../tests/main.function.nf.test.snap | 30 ------- 5 files changed, 42 insertions(+), 189 deletions(-) diff --git a/modules.json b/modules.json index 476ef6e..3746eb6 100644 --- a/modules.json +++ b/modules.json @@ -8,75 +8,55 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/cluster": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -84,27 +64,21 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "56372688d8979092cafbe0c5c3895b491166ca1c", - "installed_by": [ - "subworkflows" - ] + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", - "installed_by": [ - "subworkflows" - ] + "git_sha": "d588e574e40a8aeba3636e2b766358091bfa3aa0", + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b..d6e593e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7baf..c2926b4 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) { } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - def manifest_doi = workflow.manifest.doi.tokenize(",") - // Handling multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - manifest_doi.each { doi_ref -> - temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // @@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) { return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // @@ -245,28 +203,26 @@ def logColours(monochrome_logs=true) { return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + switch (multiqc_reports) { + case Path: + return multiqc_reports + case List: + switch (multiqc_reports.size()) { + case 0: + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + case 1: + return multiqc_reports.first() + default: log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - } - mqc_report = mqc_report[0] + return multiqc_reports.first() } - } + default: + return null } - catch (Exception all) { - if (multiqc_report) { - log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") - } - } - return mqc_report } // @@ -320,7 +276,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -340,7 +296,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -351,14 +307,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi if (email_address) { try { if (plaintext_email) { -new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f..e43d208 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,58 +41,6 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { - - function "nfCoreLogo" - - when { - function { - """ - input[0] = false - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function dashedLine") { - - function "dashedLine" - - when { - function { - """ - input[0] = false - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - test("Test Function without logColours") { function "logColours" diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232..02c6701 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { From 18be6dab873ae2b05c0c57ae81111008b7377448 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 12:51:37 +0000 Subject: [PATCH 033/139] updated readme and citations doc --- CITATIONS.md | 18 +++++++++++ README.md | 38 +++++++++-------------- docs/images/proteinfamilies_workflow.png | Bin 0 -> 151952 bytes nextflow.config | 4 --- 4 files changed, 33 insertions(+), 27 deletions(-) create mode 100644 docs/images/proteinfamilies_workflow.png diff --git a/CITATIONS.md b/CITATIONS.md index ff1c092..27cc24f 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,7 +10,25 @@ ## Pipeline tools +- [MMseqs2](https://pubmed.ncbi.nlm.nih.gov/33734313/) +> Mirdita M, Steinegger M, Breitwieser F, Söding J, Levy Karin E. Fast and sensitive taxonomic assignment to metagenomic contigs. Bioinformatics. 2021 Sep 15;37(18):3029-31. doi: 10.1093/bioinformatics/btab184. PubMed PMID: 33734313; PubMed Central PMCID: PMC8479651. + +- [FAMSA](https://pubmed.ncbi.nlm.nih.gov/27670777/) + +> Deorowicz S, Debudaj-Grabysz A, GudyÅ› A. FAMSA: Fast and accurate multiple sequence alignment of huge protein families. Scientific reports. 2016 Sep 27;6(1):33964. doi: 10.1038/srep33964. PubMed PMID: 27670777; PubMed Central PMCID: PMC5037421. + +- [mafft](https://pubmed.ncbi.nlm.nih.gov/23329690/) + +> Katoh K, Standley DM. MAFFT multiple sequence alignment software version 7: improvements in performance and usability. Molecular biology and evolution. 2013 Jan 16;30(4):772-80. doi: 10.1093/molbev/mst010. PubMed PMID: 23329690; PubMed Central PMCID: PMC3603318. + +- [ClipKIT](https://pubmed.ncbi.nlm.nih.gov/33264284/) + +> Steenwyk JL, Buida III TJ, Li Y, Shen XX, Rokas A. ClipKIT: a multiple sequence alignment trimming software for accurate phylogenomic inference. PLoS biology. 2020 Dec 2;18(12):e3001007. doi: 10.1371/journal.pbio.3001007. PubMed PMID: 33264284; PubMed Central PMCID: PMC7735675. + +- [hmmer](https://pubmed.ncbi.nlm.nih.gov/29905871/) + +> Potter SC, Luciani A, Eddy SR, Park Y, Lopez R, Finn RD. . Nucleic acids research. 2018 Jul 2;46(W1):W200-4. doi: 10.1093/nar/gky448. PubMed PMID: 29905871; PubMed Central PMCID: PMC6030962. - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) diff --git a/README.md b/README.md index 906610b..5dfbd46 100644 --- a/README.md +++ b/README.md @@ -19,46 +19,40 @@ ## Introduction -**nf-core/proteinfamilies** is a bioinformatics pipeline that ... +**nf-core/proteinfamilies** is a bioinformatics pipeline that generates protein families from amino acid sequences. +It takes a protein fasta file as input, clusters the sequences and then generates protein family models along with their multiple sequence alignments and HMM files. - - - +

    + nf-core/proteinfamilies workflow overview +

    - -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) +2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) +3. Optionally clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) +4. Generate family HMMs ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +5. Present QC for family size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) ## Usage > [!NOTE] > If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - +Each row represents a fasta file (can be zipped or unzipped). Now, you can run the pipeline using: - - ```bash nextflow run nf-core/proteinfamilies \ -profile \ @@ -83,7 +77,7 @@ nf-core/proteinfamilies was originally written by Evangelos Karatzas. We thank the following people for their extensive assistance in the development of this pipeline: - +- [Martin Beracochea](https://github.com/mberacochea) ## Contributions and Support @@ -96,8 +90,6 @@ For further information or help, don't hesitate to get in touch on the [Slack `# - - An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. You can cite the `nf-core` publication as follows: diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8b7db59868a6b3029fb0cc86b6948fe7ec7289 GIT binary patch literal 151952 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 Date: Thu, 5 Dec 2024 13:18:18 +0000 Subject: [PATCH 034/139] usage.md updated --- conf/base.config | 2 - conf/test_full.config | 9 ++-- docs/usage.md | 44 ++++--------------- .../main.nf | 4 +- 4 files changed, 13 insertions(+), 46 deletions(-) diff --git a/conf/base.config b/conf/base.config index 10003ee..6b4281e 100644 --- a/conf/base.config +++ b/conf/base.config @@ -10,7 +10,6 @@ process { - // TODO nf-core: Check the defaults for all processes cpus = { 1 * task.attempt } memory = { 6.GB * task.attempt } time = { 4.h * task.attempt } @@ -24,7 +23,6 @@ process { // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { cpus = { 1 } diff --git a/conf/test_full.config b/conf/test_full.config index 50cab15..47a432c 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,10 +15,7 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' - - // Fasta references - fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' + // Input data + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + cluster_size_threshold = 5 } diff --git a/docs/usage.md b/docs/usage.md index d72fb89..adb57fb 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -6,58 +6,33 @@ ## Introduction - +The input data can be passed to nf-core/proteinfamilies using the `--input` parameter of amino acid fasta files. ## Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 2 columns, and a header row as shown in the examples below. ```bash --input '[path to samplesheet file]' ``` -### Multiple runs of the same sample - -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: - -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz -``` - -### Full samplesheet - -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. - -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. - -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +```csv +sample,fasta +CONTROL_REP1,input/mgnifams_input.fa +CONTROL_REP2,input/mgnifams_input_copy.fa.gz ``` | Column | Description | | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | - -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | +| `fasta` | Full path to amino acid fasta file. File can be gzipped and allowed extensions include ".fasta", ".fasta.gz", ".fa" or ".fa.gz". | ## Running the pipeline The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/proteinfamilies --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +nextflow run nf-core/proteinfamilies --input ./samplesheet.csv --outdir ./results -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -90,7 +65,6 @@ with: ```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' -genome: 'GRCh37' <...> ``` diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 416da3f..43bde97 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -147,7 +147,6 @@ def validateInputSamplesheet(input) { // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ @@ -161,7 +160,6 @@ def toolCitationText() { } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ @@ -196,7 +194,7 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["tool_citations"] = "" meta["tool_bibliography"] = "" - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! + // Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") // meta["tool_bibliography"] = toolBibliographyText() From fb549768b5b4dd0d321cc92b930f44770b5a2fd3 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 13:56:34 +0000 Subject: [PATCH 035/139] clustering outputs updated and written in output.md --- conf/modules.config | 34 ++++++++++++++++++++++++++++++++-- docs/output.md | 27 ++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 227e9a0..c37cd63 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,12 +18,27 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: 'MMSEQS_CREATEDB' { + publishDir = [ + path: { "${params.outdir}/mmseqs/mmseqs_createdb/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'MMSEQS_CLUSTER' { ext.args = [ "--min-seq-id ${params.cluster_seq_identity}", "-c ${params.cluster_coverage}", "--cov-mode ${params.cluster_cov_mode}", ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/mmseqs_cluster/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'MMSEQS_LINCLUST' { @@ -32,12 +47,27 @@ process { "-c ${params.cluster_coverage}", "--cov-mode ${params.cluster_cov_mode}", ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/mmseqs_linclust/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'MMSEQS_CREATETSV' { + publishDir = [ + path: { "${params.outdir}/mmseqs/mmseqs_createtsv/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'CHUNK_CLUSTERS' { publishDir = [ - path: { "${params.outdir}/chunks/${meta.id}/" }, - mode: params.publish_dir_mode + path: { "${params.outdir}/fasta_chunks/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/docs/output.md b/docs/output.md index 44ec631..e77cfb3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,11 +12,32 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - +- [MMseqs2 clustering](#mmseqs2-clustering) of input amino acid sequences +- [Chunked fasta clusters](#chunked-fasta-clusters) derived from the MMseqs2 clusters - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution +### MMseqs2 clustering + +
    +Output files + +- `mmseqs/mmseqs2_createtsv/` + - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members +
    + +[MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. +### Chunked fasta clusters + +
    +Output files + +- `fasta_chunks/` + - `/` + - `chunked_fasta/` + - `*.fasta`: fasta files with amino acid sequences of each cluster +
    ### MultiQC @@ -34,6 +55,10 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +Custom output MultiQC data includes a metadata file (multiqc_data/multiqc_family_metadata.txt) with family information such as: Sample,Family Id,Size,Representative Length,Representative Id,Sequence + +This custom metadata is presented as a data table on the web page. + ### Pipeline information
    From c9ac121c9211dc673b6504c28f20dbc73f3d39eb Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 14:15:23 +0000 Subject: [PATCH 036/139] aligners outputs updated --- conf/modules.config | 15 ++++++++++++++ docs/output.md | 50 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index c37cd63..944645c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -74,16 +74,31 @@ process { withName: 'FAMSA_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/famsa_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'MAFFT_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/mafft_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'CLIPKIT' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/clipkit/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'HMMER_HMMSEARCH' { diff --git a/docs/output.md b/docs/output.md index e77cfb3..8e47b1f 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,8 +12,22 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +Clustering: + - [MMseqs2 clustering](#mmseqs2-clustering) of input amino acid sequences - [Chunked fasta clusters](#chunked-fasta-clusters) derived from the MMseqs2 clusters + +Multiple sequence alignment: + +- [FAMSA aligner](#famsa-aligner) option. Best speed and sensitivity option. +- [mafft aligner](#mafft-aligner) option. Fast but not as sensitive as FAMSA. +- [ClipKIT](#clipkit) to optionally clip gapped portions of the MSA (start, middle, end) + +Generating family models: + + +Reporting: + - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution @@ -39,6 +53,42 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `*.fasta`: fasta files with amino acid sequences of each cluster
    +### FAMSA aligner + +
    +Output files + +- `famsa_align/` + - `/` + - `*.aln`: fasta files with aligned amino acid sequences +
    + +[FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. + +### mafft aligner + +
    +Output files + +- `mafft_align/` + - `/` + - `*.fas`: fasta files with aligned amino acid sequences +
    + +[mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. + +### ClipKIT + +
    +Output files + +- `mafft_align/` + - `/` + - `*.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences +
    + +[ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. + ### MultiQC
    From 1aa92cd575bc860c6e3cab64ee86b023f9e9c92b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 5 Dec 2024 15:14:37 +0000 Subject: [PATCH 037/139] hmmer outputs updated + documentation --- conf/modules.config | 20 +++++++++++++++- docs/output.md | 56 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 944645c..367f1b2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -101,16 +101,34 @@ process { ] } + withName: 'HMMER_HMMBUILD' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/hmmer/hmmbuild/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.{hmm.gz}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'HMMER_HMMSEARCH' { ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/hmmer/hmmsearch/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.{sto.gz}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'EXTRACT_FAMILY_REPS' { publishDir = [ path: { "${params.outdir}/family_reps/${meta.id}/" }, - mode: params.publish_dir_mode + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/docs/output.md b/docs/output.md index 8e47b1f..1bf5dc0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,30 +14,42 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Clustering: -- [MMseqs2 clustering](#mmseqs2-clustering) of input amino acid sequences -- [Chunked fasta clusters](#chunked-fasta-clusters) derived from the MMseqs2 clusters +- [MMseqs2](#mmseqs2) clustering of input amino acid sequences +- [Chunked fasta clusters](#chunked-fasta-clusters) derived from the MMseqs2 clusters for parallel downstream processing. Multiple sequence alignment: -- [FAMSA aligner](#famsa-aligner) option. Best speed and sensitivity option. -- [mafft aligner](#mafft-aligner) option. Fast but not as sensitive as FAMSA. +- [FAMSA](#famsa) aligner option. Best speed and sensitivity option to build seed multiple sequence alignment for the families. +- [mafft](#mafft) aligner option. Fast but not as sensitive as FAMSA to build seed multiple sequence alignment for the families. - [ClipKIT](#clipkit) to optionally clip gapped portions of the MSA (start, middle, end) Generating family models: +- [hmmer](#hmmer) to build the family HMM (hmmbuild) and to 'fish' additional sequences from the input fasta file into the family and also build the full MSA (hmmsearch). +- [Extract family representatives](#extract-family-representatives) to produce the final metadata file along with a fasta of all family representative sequences (can be used downstream for structural prediction). Reporting: - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### MMseqs2 clustering +### MMseqs2
    Output files -- `mmseqs/mmseqs2_createtsv/` - - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members +- `mmseqs/` + - `mmseqs_createtsv/` + - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members + - `mmseqs_createdb/` + - `/` + - `*`: (optional) mmseqs format db of fasta sequences + - `mmseqs_linclust/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `mmseqs_cluster/` + - `/` + - `*`: (optional) mmseqs format clustered db
    [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. @@ -89,6 +101,36 @@ Reporting: [ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. +### hmmer + +
    +Output files + +- `hmmer/` + - `hmmbuild/` + - `/` + - `_*.hmm.gz`: compressed hmm model for the family + - `_*.hmmbuild.txt`: (optional) hmmbuild execution log + - `hmmsearch/` + - `/` + - `_*.sto.gz`: full multiple sequence alignment of the family + - `_*.domtbl.gz`: (optional) hmmsearch results along parameters info + - `_*.txt.gz`: (optional) hmmsearch execution log +
    + +[hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. + +### Extract family representatives + +
    +Output files + +- `family_reps/` + - `/` + - `_meta_mqc.csv`: csv with metadata to print with MultiQC (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) + - `_reps.fa`: fasta file of all family representative sequences (one sequence per family) +
    + ### MultiQC
    From 619f7014745b77d21e8692313bb3df9333214e9a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 6 Dec 2024 07:49:29 +0000 Subject: [PATCH 038/139] gap_threshold aprameter for clipkit --- conf/modules.config | 1 + nextflow.config | 1 + nextflow_schema.json | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 367f1b2..d286177 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -92,6 +92,7 @@ process { } withName: 'CLIPKIT' { + ext.args = { "-m gappy --gaps ${params.gap_threshold}" } ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ diff --git a/nextflow.config b/nextflow.config index de00544..ea8ea01 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Alignment alignment_tool = 'famsa' trim_seed_msa = true + gap_threshold = 0.5 hmmsearch_write_target = false hmmsearch_write_domain = true hmmsearch_evalue_cutoff = 0.001 diff --git a/nextflow_schema.json b/nextflow_schema.json index de22bcf..7c2f882 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -233,6 +233,11 @@ "fa_icon": "fas fa-check-square", "hidden": true }, + "gap_threshold": { + "type": "number", + "default": 0.5, + "description": "Seed MSA positions with gappyness greater than this threshold will be trimmed" + }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", From 39a037fc444f3e7e8de7b4b007c3b5e35617251d Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 6 Dec 2024 08:28:18 +0000 Subject: [PATCH 039/139] mmseqs suite version bump --- modules.json | 62 +++++++++++++------ .../nf-core/mmseqs/cluster/environment.yml | 2 +- modules/nf-core/mmseqs/cluster/main.nf | 4 +- .../mmseqs/cluster/mmseqs-cluster.diff | 5 +- .../nf-core/mmseqs/cluster/tests/main.nf.test | 56 +++++++++++++++++ .../mmseqs/cluster/tests/main.nf.test.snap | 22 +++++++ .../mmseqs/cluster/tests/nextflow.config | 10 +++ .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 4 +- .../mmseqs/createdb/tests/main.nf.test.snap | 16 ++--- .../nf-core/mmseqs/createdb/tests/tags.yml | 2 - .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 4 +- .../mmseqs/createtsv/mmseqs-createtsv.diff | 1 - .../mmseqs/createtsv/tests/main.nf.test.snap | 40 ++++++------ .../nf-core/mmseqs/createtsv/tests/tags.yml | 2 - .../nf-core/mmseqs/linclust/environment.yml | 2 +- modules/nf-core/mmseqs/linclust/main.nf | 4 +- .../mmseqs/linclust/mmseqs-linclust.diff | 3 +- .../mmseqs/linclust/tests/main.nf.test.snap | 8 +-- .../nf-core/mmseqs/linclust/tests/tags.yml | 2 - 21 files changed, 181 insertions(+), 72 deletions(-) create mode 100644 modules/nf-core/mmseqs/cluster/tests/main.nf.test create mode 100644 modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap create mode 100644 modules/nf-core/mmseqs/cluster/tests/nextflow.config delete mode 100644 modules/nf-core/mmseqs/createdb/tests/tags.yml delete mode 100644 modules/nf-core/mmseqs/createtsv/tests/tags.yml delete mode 100644 modules/nf-core/mmseqs/linclust/tests/tags.yml diff --git a/modules.json b/modules.json index 3746eb6..3a8a938 100644 --- a/modules.json +++ b/modules.json @@ -8,55 +8,75 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"], + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -65,20 +85,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "d588e574e40a8aeba3636e2b766358091bfa3aa0", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/cluster/environment.yml b/modules/nf-core/mmseqs/cluster/environment.yml index 1854759..235ad03 100644 --- a/modules/nf-core/mmseqs/cluster/environment.yml +++ b/modules/nf-core/mmseqs/cluster/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/cluster/main.nf b/modules/nf-core/mmseqs/cluster/main.nf index c821802..3010fef 100644 --- a/modules/nf-core/mmseqs/cluster/main.nf +++ b/modules/nf-core/mmseqs/cluster/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CLUSTER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_input, stageAs: "db_input") diff --git a/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff index 76b78df..ed5c31c 100644 --- a/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff +++ b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff @@ -5,7 +5,7 @@ Changes in 'mmseqs/cluster/main.nf': --- modules/nf-core/mmseqs/cluster/main.nf +++ modules/nf-core/mmseqs/cluster/main.nf @@ -8,7 +8,7 @@ - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: - tuple val(meta), path(db_input) @@ -14,4 +14,7 @@ Changes in 'mmseqs/cluster/main.nf': output: tuple val(meta), path("${prefix}/"), emit: db_cluster +'modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap' is unchanged +'modules/nf-core/mmseqs/cluster/tests/nextflow.config' is unchanged +'modules/nf-core/mmseqs/cluster/tests/main.nf.test' is unchanged ************************************************************ diff --git a/modules/nf-core/mmseqs/cluster/tests/main.nf.test b/modules/nf-core/mmseqs/cluster/tests/main.nf.test new file mode 100644 index 0000000..0788221 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process MMSEQS_CLUSTER" + script "../main.nf" + process "MMSEQS_CLUSTER" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "mmseqs" + tag "mmseqs/cluster" + tag "untar" + + test("Should cluster an mmseqs database") { + + setup { + run("UNTAR") { + script "modules/nf-core/untar/main.nf" + process { + """ + input[0] = [ [id:'test'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/mmseqs.tar.gz', checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = UNTAR.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.db_cluster.size() == 1 }, + { + def all_files = file(process.out.db_cluster[0][1]).listFiles() + def all_file_names = all_files.collect { it.name }.toSorted() + def stable_file_names = [ + 'test_output_cluster.dbtype', + 'test_output_cluster.index' + ] + def stable_files = all_files.findAll { it.name in stable_file_names }.toSorted() + + assert snapshot( + all_file_names, + stable_files, + process.out.versions[0] + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap b/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap new file mode 100644 index 0000000..6fc9869 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap @@ -0,0 +1,22 @@ +{ + "Should cluster an mmseqs database": { + "content": [ + [ + "test_output_cluster.0", + "test_output_cluster.1", + "test_output_cluster.dbtype", + "test_output_cluster.index" + ], + [ + "test_output_cluster.dbtype:md5,5c879eb8a8613fd4537b919e7d68d089", + "test_output_cluster.index:md5,ca7e1f0967222b06d7e05e47bcbe1e50" + ], + "versions.yml:md5,4acad55952c6d1fb41ad7f5a44468aed" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-05T10:44:45.713270981" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/cluster/tests/nextflow.config b/modules/nf-core/mmseqs/cluster/tests/nextflow.config new file mode 100644 index 0000000..a43cb18 --- /dev/null +++ b/modules/nf-core/mmseqs/cluster/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: UNTAR { + publishDir = [ enabled : false ] + } + + withName: MMSEQS_CLUSTER { + ext.prefix = "test_output_cluster" + ext.args = '--remove-tmp-files 1 -v 3 ' + } +} diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 1854759..235ad03 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index 9487e5b..b1d6caf 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(sequence) diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap index a24c411..92f1e6d 100644 --- a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -20,14 +20,14 @@ ] ], [ - "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-08-09T10:01:44.163384" + "timestamp": "2024-12-05T10:35:27.322864475" }, "Should build an mmseqs db from a zipped amino acid sequence file": { "content": [ @@ -49,13 +49,13 @@ ] ], [ - "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-08-09T10:01:48.894044" + "timestamp": "2024-12-05T10:35:33.418552595" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/tests/tags.yml b/modules/nf-core/mmseqs/createdb/tests/tags.yml deleted file mode 100644 index 1f511ab..0000000 --- a/modules/nf-core/mmseqs/createdb/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mmseqs/createdb: - - modules/nf-core/mmseqs/createdb/** diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 1854759..235ad03 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 448d0ea..2fdd85c 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_result) diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff index 0cf78bc..6c677f6 100644 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -18,7 +18,6 @@ Changes in 'mmseqs/createtsv/main.nf': 'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/tags.yml' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged ************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index 1087de8..6192fa1 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -24,15 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:17.642787" + "timestamp": "2024-12-05T10:50:48.386202112" }, "mmseqs/createtsv - sarscov2 - cluster - stub": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -59,15 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:33.645454" + "timestamp": "2024-12-05T10:50:56.33475153" }, "mmseqs/createtsv - bacteroides_fragilis - taxonomy": { "content": [ @@ -82,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -94,15 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:54:45.718678" + "timestamp": "2024-12-05T11:25:54.741775111" }, "mmseqs/createtsv - sarscov2 - cluster": { "content": [ @@ -117,7 +117,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -129,14 +129,14 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:02.731974" + "timestamp": "2024-12-05T10:50:42.432284995" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/tests/tags.yml b/modules/nf-core/mmseqs/createtsv/tests/tags.yml deleted file mode 100644 index e27827f..0000000 --- a/modules/nf-core/mmseqs/createtsv/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mmseqs/createtsv: - - "modules/nf-core/mmseqs/createtsv/**" diff --git a/modules/nf-core/mmseqs/linclust/environment.yml b/modules/nf-core/mmseqs/linclust/environment.yml index 1854759..235ad03 100644 --- a/modules/nf-core/mmseqs/linclust/environment.yml +++ b/modules/nf-core/mmseqs/linclust/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/linclust/main.nf b/modules/nf-core/mmseqs/linclust/main.nf index 69abb7c..d51cbd6 100644 --- a/modules/nf-core/mmseqs/linclust/main.nf +++ b/modules/nf-core/mmseqs/linclust/main.nf @@ -4,8 +4,8 @@ process MMSEQS_LINCLUST { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_input, stageAs: "db_input") diff --git a/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff index c17c35a..bd6092f 100644 --- a/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff +++ b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff @@ -5,7 +5,7 @@ Changes in 'mmseqs/linclust/main.nf': --- modules/nf-core/mmseqs/linclust/main.nf +++ modules/nf-core/mmseqs/linclust/main.nf @@ -8,7 +8,7 @@ - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: - tuple val(meta), path(db_input) @@ -14,7 +14,6 @@ Changes in 'mmseqs/linclust/main.nf': output: tuple val(meta), path("${prefix}/"), emit: db_cluster -'modules/nf-core/mmseqs/linclust/tests/tags.yml' is unchanged 'modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap' is unchanged 'modules/nf-core/mmseqs/linclust/tests/nextflow.config' is unchanged 'modules/nf-core/mmseqs/linclust/tests/main.nf.test' is unchanged diff --git a/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap index 4d7fb8b..e1622d4 100644 --- a/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap @@ -11,12 +11,12 @@ "test_output_cluster.dbtype:md5,5c879eb8a8613fd4537b919e7d68d089", "test_output_cluster.index:md5,38908275cdd5727ae0eb9be017f9ca13" ], - "versions.yml:md5,65ce4e8b36259f881d11b0d8caaee69a" + "versions.yml:md5,969cb26241f66ac758c104f9561860b1" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-08-13T10:40:19.482219" + "timestamp": "2024-12-05T10:43:26.020522437" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/linclust/tests/tags.yml b/modules/nf-core/mmseqs/linclust/tests/tags.yml deleted file mode 100644 index 4aa9f30..0000000 --- a/modules/nf-core/mmseqs/linclust/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mmseqs/linclust: - - modules/nf-core/mmseqs/linclust/** From e95a1ff71448b047bcfefcc2791b11d6cf3ef45a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 6 Dec 2024 11:20:56 +0000 Subject: [PATCH 040/139] clip_ends only local module --- bin/clip_ends.py | 81 +++++++++++++++++++++++++ conf/modules.config | 10 +++ modules/local/clip_ends.nf | 34 +++++++++++ nextflow.config | 1 + nextflow_schema.json | 6 ++ subworkflows/local/generate_families.nf | 13 +++- 6 files changed, 142 insertions(+), 3 deletions(-) create mode 100755 bin/clip_ends.py create mode 100644 modules/local/clip_ends.nf diff --git a/bin/clip_ends.py b/bin/clip_ends.py new file mode 100755 index 0000000..630ab7c --- /dev/null +++ b/bin/clip_ends.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import sys +import numpy as np +import argparse +from Bio import SeqIO +from Bio.Seq import Seq + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-a", + "--alignment", + required=True, + metavar="FILE", + type=str, + help="Multiple sequence alignment file in fasta format.", + ) + parser.add_argument( + "-g", + "--gap_threshold", + required=True, + metavar="FLOAT", + type=float, + help="Minimum gap occupancy across sequences to keep.", + ) + parser.add_argument( + "-o", + "--out_fasta", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with the trimmed multiple sequence alignment.", + ) + return parser.parse_args(args) + +def read_fasta_to_matrix(file_path): + records = list(SeqIO.parse(file_path, "fasta")) + max_length = max(len(record.seq) for record in records) + matrix = np.zeros((len(records), max_length), dtype=np.dtype('U1')) + original_names = [] + + for i, record in enumerate(records): + original_names.append(record.id) + matrix[i, :len(record.seq)] = list(str(record.seq)) + + return matrix, original_names + +def calculate_trim_positions(sequence_matrix, gap_threshold): + numeric_matrix = np.where(sequence_matrix == '-', 0, 1) + num_rows = numeric_matrix.shape[0] + column_sums = np.sum(numeric_matrix, axis=0) + column_sums_percentage = column_sums / num_rows + start_position = np.argmax(column_sums_percentage > gap_threshold) + end_position = len(column_sums_percentage) - np.argmax(column_sums_percentage[::-1] > gap_threshold) - 1 + + return start_position, end_position + +def write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta): + trimmed_records = [] + for i, sequence in enumerate(sequence_matrix_trimmed): + trimmed_sequence = ''.join(map(str, sequence)) + original_name = original_sequence_names[i] + trimmed_record = SeqIO.SeqRecord(Seq(trimmed_sequence), id=original_name, description="") + trimmed_records.append(trimmed_record) + + with open(out_fasta, "w") as output_fasta: + SeqIO.write(trimmed_records, output_fasta, "fasta") + +def trim_msa(alignment, gap_threshold, out_fasta): + sequence_matrix, original_sequence_names = read_fasta_to_matrix(alignment) + start_position, end_position = calculate_trim_positions(sequence_matrix, gap_threshold) + sequence_matrix_trimmed = sequence_matrix[:, start_position:end_position+1] + write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta) + +def main(args=None): + args = parse_args(args) + trim_msa(args.alignment, args.gap_threshold, args.out_fasta) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index d286177..295f9d5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -102,6 +102,16 @@ process { ] } + withName: 'CLIP_ENDS' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/clip_ends/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'HMMER_HMMBUILD' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } diff --git a/modules/local/clip_ends.nf b/modules/local/clip_ends.nf new file mode 100644 index 0000000..cbd6348 --- /dev/null +++ b/modules/local/clip_ends.nf @@ -0,0 +1,34 @@ +process CLIP_ENDS { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta), path(aln) + val(gap_threshold) + + output: + tuple val(meta), path("*_clipped.fas"), emit: fas + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + clip_ends.py --alignment ${aln} \\ + --gap_threshold ${gap_threshold} \\ + --out_fasta ${prefix}_clipped.fas + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index ea8ea01..6732dd3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,6 +21,7 @@ params { cluster_size_threshold = 25 // Alignment alignment_tool = 'famsa' + clipping_tool = 'clip_ends' trim_seed_msa = true gap_threshold = 0.5 hmmsearch_write_target = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 7c2f882..0de6fef 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -233,6 +233,12 @@ "fa_icon": "fas fa-check-square", "hidden": true }, + "clipping_tool": { + "type": "string", + "description": "Choose clipping tool. ClipKIT clips gaps throughout the sequence while clip_ends only at the ends.", + "help_text": "Available tools: local module 'clip_ends' or nf-core 'clipkit'.", + "enum": ["clip_ends", "clipkit"] + }, "gap_threshold": { "type": "number", "default": 0.5, diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 5eb9e84..7f9a01a 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -5,6 +5,7 @@ include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' include { CLIPKIT } from '../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' @@ -36,9 +37,15 @@ workflow GENERATE_FAMILIES { } if (params.trim_seed_msa) { - CLIPKIT(alignment_ch) - ch_versions = ch_versions.mix( CLIPKIT.out.versions ) - alignment_ch = CLIPKIT.out.clipkit + if (params.clipping_tool == 'clipkit') { + CLIPKIT(alignment_ch) + ch_versions = ch_versions.mix( CLIPKIT.out.versions ) + alignment_ch = CLIPKIT.out.clipkit + } else { // fallback: local module clip_ends + CLIP_ENDS(alignment_ch, params.gap_threshold) + ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) + alignment_ch = CLIP_ENDS.out.fas + } } HMMER_HMMBUILD( alignment_ch, [] ) From 86a950b58d2c3fdf524f1c04861bc9c682d1b687 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Sun, 8 Dec 2024 15:04:10 +0000 Subject: [PATCH 041/139] nf-core subworkflows update --- modules.json | 56 +++++-------------- nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 28 +++++----- .../tests/main.function.nf.test | 44 +++++++++++++++ 4 files changed, 73 insertions(+), 57 deletions(-) diff --git a/modules.json b/modules.json index 3a8a938..625761e 100644 --- a/modules.json +++ b/modules.json @@ -8,75 +8,55 @@ "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/cluster": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -85,26 +65,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "d588e574e40a8aeba3636e2b766358091bfa3aa0", - "installed_by": [ - "subworkflows" - ] + "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/nextflow.config b/nextflow.config index 6732dd3..0b36aa0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,8 +21,8 @@ params { cluster_size_threshold = 25 // Alignment alignment_tool = 'famsa' - clipping_tool = 'clip_ends' trim_seed_msa = true + clipping_tool = 'clip_ends' gap_threshold = 0.5 hmmsearch_write_target = false hmmsearch_write_domain = true diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index c2926b4..bfd2587 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -206,22 +206,20 @@ def logColours(monochrome_logs=true) { // Return a single report from an object that may be a Path or List // def getSingleReport(multiqc_reports) { - switch (multiqc_reports) { - case Path: - return multiqc_reports - case List: - switch (multiqc_reports.size()) { - case 0: - log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") - return null - case 1: - return multiqc_reports.first() - default: - log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - return multiqc_reports.first() - } - default: + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() + } + } else { + return null } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index e43d208..f117040 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -79,4 +79,48 @@ nextflow_function { ) } } + + test("Test Function getSingleReport with a single file") { + function "getSingleReport" + + when { + function { + """ + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert function.result.contains("test.tsv") } + ) + } + } + + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" + + when { + function { + """ + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } + ) + } + } } From 2df0b3481e2065993e6eb01840e001aa7f05f854 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 9 Dec 2024 08:37:02 +0000 Subject: [PATCH 042/139] hmmsearch results filtering by length, fasta instead of stockholm reformatting --- bin/extract_family_reps.py | 6 +- bin/filter_recruited.py | 88 +++++++++++++++++++++++++ conf/modules.config | 21 ++++-- modules/local/chunk_clusters.nf | 3 +- modules/local/clip_ends.nf | 3 +- modules/local/extract_family_reps.nf | 3 +- modules/local/filter_recruited.nf | 37 +++++++++++ nextflow.config | 26 ++++---- nextflow_schema.json | 10 +++ subworkflows/local/generate_families.nf | 20 +++--- workflows/proteinfamilies.nf | 4 +- 11 files changed, 188 insertions(+), 33 deletions(-) create mode 100755 bin/filter_recruited.py create mode 100644 modules/local/filter_recruited.nf diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index a05d175..fa1c8c0 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -17,7 +17,7 @@ def parse_args(args=None): required=True, metavar="FOLDER", type=str, - help="Input folder with Stockholm full alignments.", + help="Input folder with fasta full alignments.", ) parser.add_argument( "-m", @@ -55,9 +55,9 @@ def extract_first_sequences(msa_folder, metadata_file, out_fasta): # Iterate over all files in the MSA folder for filename in os.listdir(msa_folder): filepath = os.path.join(msa_folder, filename) - # Parse the Stockholm file and extract the first sequence + # Parse the MSA fasta file and extract the first sequence with gzip.open(filepath, "rt") as sto_file: - records = list(SeqIO.parse(sto_file, "stockholm")) + records = list(SeqIO.parse(sto_file, "fasta")) family_size = len(records) if records: first_record = records[0] diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py new file mode 100755 index 0000000..accb6eb --- /dev/null +++ b/bin/filter_recruited.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +import sys +import argparse +import gzip +from Bio import AlignIO, SeqIO + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-a", + "--alignment", + required=True, + metavar="FILE", + type=str, + help="Stockholm format multiple sequence alignment from hmmsearch.", + ) + parser.add_argument( + "-d", + "--domtbl", + required=True, + metavar="FILE", + type=str, + help="Domain summary annotations result from hmmsearch.", + ) + parser.add_argument( + "-l", + "--length_threshold", + required=True, + metavar="FLOAT", + type=float, + help="Minimum length percentage threshold of annotated domain (env) against query to keep.", + ) + parser.add_argument( + "-o", + "--out_fasta", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with the fasta converted multiple sequence alignment.", + ) + return parser.parse_args(args) + +def filter_sequences(domtbl, length_threshold): + filtered_sequences = [] + with gzip.open(domtbl, 'rt', encoding='utf-8') as file: + for line in file: + if line.startswith('#'): + continue # Skip comments + + columns = line.split() + try: + qlen = float(columns[5]) + env_from = int(columns[19]) + env_to = int(columns[20]) + env_length = env_to - env_from + 1 + + if env_length >= length_threshold * qlen: + sequence_name = columns[0] + ali_from = int(columns[17]) + ali_to = int(columns[18]) + + filtered_sequences.append(f"{sequence_name}/{ali_from}-{ali_to}") + except (IndexError, ValueError): + continue # Skip malformed lines + + return filtered_sequences + +def filter_stockholm_to_fasta(alignment, filtered_sequences, out_fasta): + with gzip.open(alignment, 'rt', encoding='utf-8') as file: + alignment_data = AlignIO.read(file, "stockholm") + filtered_records = [record for record in alignment_data if record.id in filtered_sequences] + for record in filtered_records: + record.description = "" + with gzip.open(out_fasta, 'wt') as gz_file: + SeqIO.write(filtered_records, gz_file, "fasta") + print(f"Filtered alignment saved to {out_fasta}") + +def filter_recruited(alignment, domtbl, length_threshold, out_fasta): + filtered_sequences = filter_sequences(domtbl, length_threshold) + filter_stockholm_to_fasta(alignment, filtered_sequences, out_fasta) + +def main(args=None): + args = parse_args(args) + filter_recruited(args.alignment, args.domtbl, args.length_threshold, args.out_fasta) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 295f9d5..19d0751 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -75,7 +75,7 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/famsa_align/${meta.id}/" }, + path: { "${params.outdir}/seed_msa/famsa_align/${meta.id}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -85,7 +85,7 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/mafft_align/${meta.id}/" }, + path: { "${params.outdir}/seed_msa/mafft_align/${meta.id}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -96,7 +96,7 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/clipkit/${meta.id}/" }, + path: { "${params.outdir}/seed_msa/clipkit/${meta.id}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -106,7 +106,7 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/clip_ends/${meta.id}/" }, + path: { "${params.outdir}/seed_msa/clip_ends/${meta.id}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -130,7 +130,18 @@ process { publishDir = [ path: { "${params.outdir}/hmmer/hmmsearch/${meta.id}/" }, mode: params.publish_dir_mode, - pattern: "*.{sto.gz}", + pattern: "*.{sto.gz,domtbl.gz}", + enabled: params.save_hmmsearch_results, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'FILTER_RECRUITED' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/full_msa/${meta.id}/" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters.nf index 1e0e897..6b30d33 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters.nf @@ -27,7 +27,8 @@ process CHUNK_CLUSTERS { gzip -c -d $sequences > $fasta_name fi - chunk_clusters.py --clustering ${clustering} \\ + chunk_clusters.py \\ + --clustering ${clustering} \\ --sequences ${fasta_name} \\ --threshold ${size_threshold} \\ --out_folder chunked_fasta diff --git a/modules/local/clip_ends.nf b/modules/local/clip_ends.nf index cbd6348..7515c42 100644 --- a/modules/local/clip_ends.nf +++ b/modules/local/clip_ends.nf @@ -21,7 +21,8 @@ process CLIP_ENDS { script: def prefix = task.ext.prefix ?: "${meta.id}" """ - clip_ends.py --alignment ${aln} \\ + clip_ends.py \\ + --alignment ${aln} \\ --gap_threshold ${gap_threshold} \\ --out_fasta ${prefix}_clipped.fas diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf index 1a88e2f..e8a900f 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps.nf @@ -20,7 +20,8 @@ process EXTRACT_FAMILY_REPS { script: """ - extract_family_reps.py --full_msa_folder sto \\ + extract_family_reps.py \\ + --full_msa_folder sto \\ --metadata ${meta.id}_meta_mqc.csv \\ --out_fasta ${meta.id}_reps.fa diff --git a/modules/local/filter_recruited.nf b/modules/local/filter_recruited.nf new file mode 100644 index 0000000..00cf8b8 --- /dev/null +++ b/modules/local/filter_recruited.nf @@ -0,0 +1,37 @@ +process FILTER_RECRUITED { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta) , path(sto) + tuple val(meta2), path(domtbl) + val(length_threshold) + + output: + tuple val(meta), path("*.fas.gz"), emit: full_msa + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + filter_recruited.py \\ + --alignment ${sto} \\ + --domtbl ${domtbl} \\ + --length_threshold ${length_threshold} \\ + --out_fasta ${prefix}.fas.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index 0b36aa0..1824bd4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,19 +14,21 @@ params { // Pipeline parameters // Clustering - clustering_tool = 'linclust' - cluster_seq_identity = 0.5 - cluster_coverage = 0.9 - cluster_cov_mode = 0 - cluster_size_threshold = 25 + clustering_tool = 'linclust' + cluster_seq_identity = 0.5 + cluster_coverage = 0.9 + cluster_cov_mode = 0 + cluster_size_threshold = 25 // Alignment - alignment_tool = 'famsa' - trim_seed_msa = true - clipping_tool = 'clip_ends' - gap_threshold = 0.5 - hmmsearch_write_target = false - hmmsearch_write_domain = true - hmmsearch_evalue_cutoff = 0.001 + alignment_tool = 'famsa' + trim_seed_msa = true + clipping_tool = 'clip_ends' + gap_threshold = 0.5 + hmmsearch_write_target = false + hmmsearch_write_domain = true + hmmsearch_evalue_cutoff = 0.001 + save_hmmsearch_results = false + hmmsearch_query_length_threshold = 0.8 // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 0de6fef..761a117 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -262,6 +262,16 @@ "type": "number", "default": 0.001, "description": "hmmsearch e-value cutoff threshold for reported results" + }, + "save_hmmsearch_results": { + "type": "boolean", + "description": "Save the output of hmmsearch (stockholm msa and domtblout)", + "help_text": "Specify to save the .sto.gz and .domtbl.gz files generated by running hmmsearch on the family model against the input set of sequences." + }, + "hmmsearch_query_length_threshold": { + "type": "number", + "default": 0.8, + "description": "hmmsearch minimum length percentage filter of hit env vs query length" } } } diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 7f9a01a..ac4013f 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -2,12 +2,13 @@ FAMILY MODEL GENERATION */ -include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' -include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' -include { CLIPKIT } from '../../modules/nf-core/clipkit/main' -include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' -include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' +include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' +include { CLIPKIT } from '../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' +include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { FILTER_RECRUITED } from '../../modules/local/filter_recruited.nf' workflow GENERATE_FAMILIES { take: @@ -58,9 +59,12 @@ workflow GENERATE_FAMILIES { .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH ( ch_input_for_hmmsearch ) + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - ch_alignments = HMMER_HMMSEARCH.out.alignments + + FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + ch_alignments = FILTER_RECRUITED.out.full_msa emit: versions = ch_versions diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 35de0fb..ef8d1b1 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -55,9 +55,9 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES.out.alignments .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_msa_sto } + .set { ch_full_msa } - EXTRACT_FAMILY_REPS( ch_msa_sto ) + EXTRACT_FAMILY_REPS( ch_full_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) // From 1a2d333ce71d8281157c13275a652f30be99838b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 9 Dec 2024 11:38:03 +0000 Subject: [PATCH 043/139] init redundancy_check subworkflow --- subworkflows/local/generate_families.nf | 10 +++++----- subworkflows/local/remove_redundancy.nf | 25 +++++++++++++++++++++++++ workflows/proteinfamilies.nf | 7 ++++++- 3 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 subworkflows/local/remove_redundancy.nf diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index ac4013f..f3decf3 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -60,13 +60,13 @@ workflow GENERATE_FAMILIES { .set { ch_input_for_hmmsearch } HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - ch_alignments = FILTER_RECRUITED.out.full_msa + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + ch_full_msa = FILTER_RECRUITED.out.full_msa emit: - versions = ch_versions - alignments = ch_alignments + versions = ch_versions + full_msa = ch_full_msa } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf new file mode 100644 index 0000000..a52b95c --- /dev/null +++ b/subworkflows/local/remove_redundancy.nf @@ -0,0 +1,25 @@ +/* + REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES +*/ + +include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' +include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' +include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' +include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' +// include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +// include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' + +workflow REMOVE_REDUNDANCY { + take: + full_msa // tuple val(meta), path(fasta) + + main: + ch_versions = Channel.empty() + + // TODO + full_msa.view() + + emit: + versions = ch_versions + full_msa = full_msa +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index ef8d1b1..6ee4459 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -21,6 +21,7 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' +include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' // // MODULE: Local to the pipeline @@ -51,8 +52,12 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES( ch_samplesheet, fasta_chunks ) ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) + // Remove redundant sequences and families + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + // Post-processing - GENERATE_FAMILIES.out.alignments + REMOVE_REDUNDANCY.out.full_msa .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) .set { ch_full_msa } From 98fb26c8d462a0c6387a76fd708c9acb24aadd6d Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 10 Dec 2024 10:55:55 +0000 Subject: [PATCH 044/139] execute_clustering subworkflow updated and reused in redundancy removal subworkflow. selectors udpated to account for different subworkflow usage (mmseqs modules). filter_recruited module outputs both msa and fasta now. remove_redundancy subworkflow parameters added --- bin/filter_recruited.py | 30 +++++++++++--- conf/modules.config | 53 ++++++++++++++++++++++-- modules/local/filter_recruited.nf | 8 ++-- nextflow.config | 34 ++++++++------- nextflow_schema.json | 39 +++++++++++++++++ subworkflows/local/execute_clustering.nf | 22 +++------- subworkflows/local/generate_families.nf | 2 + subworkflows/local/remove_redundancy.nf | 22 +++++++--- workflows/proteinfamilies.nf | 18 ++++++-- 9 files changed, 175 insertions(+), 53 deletions(-) diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index accb6eb..179245a 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -31,13 +31,21 @@ def parse_args(args=None): type=float, help="Minimum length percentage threshold of annotated domain (env) against query to keep.", ) + parser.add_argument( + "-m", + "--out_msa", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with the fasta converted multiple sequence alignment (includes gaps).", + ) parser.add_argument( "-o", "--out_fasta", required=True, metavar="FILE", type=str, - help="Name of the output fasta file with the fasta converted multiple sequence alignment.", + help="Name of the output fasta file with the fasta converted sequences (no gaps).", ) return parser.parse_args(args) @@ -66,23 +74,33 @@ def filter_sequences(domtbl, length_threshold): return filtered_sequences -def filter_stockholm_to_fasta(alignment, filtered_sequences, out_fasta): +def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta): with gzip.open(alignment, 'rt', encoding='utf-8') as file: alignment_data = AlignIO.read(file, "stockholm") filtered_records = [record for record in alignment_data if record.id in filtered_sequences] + for record in filtered_records: record.description = "" + + with gzip.open(out_msa, 'wt') as gz_file: + SeqIO.write(filtered_records, gz_file, "fasta") + + for record in filtered_records: + record.letter_annotations = {} # Clear annotations + record.seq = record.seq.replace('-', '') + with gzip.open(out_fasta, 'wt') as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") - print(f"Filtered alignment saved to {out_fasta}") -def filter_recruited(alignment, domtbl, length_threshold, out_fasta): + print(f"Filtered alignment saved to {out_msa}") + +def filter_recruited(alignment, domtbl, length_threshold, out_msa, out_fasta): filtered_sequences = filter_sequences(domtbl, length_threshold) - filter_stockholm_to_fasta(alignment, filtered_sequences, out_fasta) + filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) def main(args=None): args = parse_args(args) - filter_recruited(args.alignment, args.domtbl, args.length_threshold, args.out_fasta) + filter_recruited(args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta) if __name__ == "__main__": sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 19d0751..05d6f80 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -20,7 +20,16 @@ process { withName: 'MMSEQS_CREATEDB' { publishDir = [ - path: { "${params.outdir}/mmseqs/mmseqs_createdb/" }, + path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_createdb/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATEDB' { + publishDir = [ + path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_createdb/" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -34,7 +43,21 @@ process { "--cov-mode ${params.cluster_cov_mode}", ].join(' ').trim() publishDir = [ - path: { "${params.outdir}/mmseqs/mmseqs_cluster/" }, + path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_cluster/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CLUSTER' { + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", + "-c ${params.cluster_coverage_for_redundancy}", + "--cov-mode ${params.cluster_cov_mode_for_redundancy}", + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_cluster/" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -48,7 +71,21 @@ process { "--cov-mode ${params.cluster_cov_mode}", ].join(' ').trim() publishDir = [ - path: { "${params.outdir}/mmseqs/mmseqs_linclust/" }, + path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_linclust/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_LINCLUST' { + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", + "-c ${params.cluster_coverage_for_redundancy}", + "--cov-mode ${params.cluster_cov_mode_for_redundancy}", + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_linclust/" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -57,7 +94,15 @@ process { withName: 'MMSEQS_CREATETSV' { publishDir = [ - path: { "${params.outdir}/mmseqs/mmseqs_createtsv/" }, + path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_createtsv/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATETSV' { + publishDir = [ + path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_createtsv/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/modules/local/filter_recruited.nf b/modules/local/filter_recruited.nf index 00cf8b8..3bc510c 100644 --- a/modules/local/filter_recruited.nf +++ b/modules/local/filter_recruited.nf @@ -13,8 +13,9 @@ process FILTER_RECRUITED { val(length_threshold) output: - tuple val(meta), path("*.fas.gz"), emit: full_msa - path "versions.yml" , emit: versions + tuple val(meta), path("*.fas.gz") , emit: full_msa + tuple val(meta), path("*.fasta.gz"), emit: fasta + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -26,7 +27,8 @@ process FILTER_RECRUITED { --alignment ${sto} \\ --domtbl ${domtbl} \\ --length_threshold ${length_threshold} \\ - --out_fasta ${prefix}.fas.gz + --out_msa ${prefix}.fas.gz \\ + --out_fasta ${prefix}.fasta.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index 1824bd4..1655cf0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,21 +14,27 @@ params { // Pipeline parameters // Clustering - clustering_tool = 'linclust' - cluster_seq_identity = 0.5 - cluster_coverage = 0.9 - cluster_cov_mode = 0 - cluster_size_threshold = 25 + clustering_tool = 'linclust' + cluster_seq_identity = 0.5 + cluster_coverage = 0.9 + cluster_cov_mode = 0 + cluster_size_threshold = 25 // Alignment - alignment_tool = 'famsa' - trim_seed_msa = true - clipping_tool = 'clip_ends' - gap_threshold = 0.5 - hmmsearch_write_target = false - hmmsearch_write_domain = true - hmmsearch_evalue_cutoff = 0.001 - save_hmmsearch_results = false - hmmsearch_query_length_threshold = 0.8 + alignment_tool = 'famsa' + trim_seed_msa = true + clipping_tool = 'clip_ends' + gap_threshold = 0.5 + hmmsearch_write_target = false + hmmsearch_write_domain = true + hmmsearch_evalue_cutoff = 0.001 + save_hmmsearch_results = false + hmmsearch_query_length_threshold = 0.8 + // Redundancy + remove_sequence_redundancy = true + cluster_seq_identity_for_redundancy = 0.95 + cluster_coverage_for_redundancy = 0.95 + cluster_cov_mode_for_redundancy = 0 + remove_family_redundancy = true // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 761a117..b865bf0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -274,6 +274,42 @@ "description": "hmmsearch minimum length percentage filter of hit env vs query length" } } + }, + "redundancy_params": { + "title": "Redundancy removal parameters", + "type": "object", + "description": "Use these parameters to control the redundancy removal subworkflow execution.", + "properties": { + "remove_sequence_redundancy": { + "type": "boolean", + "description": "Removal of inside-family redundancy of sequences via mmseqs clustering.", + "default": true, + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "cluster_seq_identity_for_redundancy": { + "type": "number", + "default": 0.95, + "description": "mmseqs parameter for minimum sequence identity" + }, + "cluster_coverage_for_redundancy": { + "type": "number", + "default": 0.95, + "description": "mmseqs parameter for minimum sequence coverage ratio" + }, + "cluster_cov_mode_for_redundancy": { + "type": "integer", + "default": 0, + "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" + }, + "remove_family_redundancy": { + "type": "boolean", + "description": "Removal of between-family redundancy via hmmsearch.", + "default": true, + "fa_icon": "fas fa-question-circle", + "hidden": true + } + } } }, "allOf": [ @@ -291,6 +327,9 @@ }, { "$ref": "#/$defs/alignment_params" + }, + { + "$ref": "#/$defs/redundancy_params" } ] } diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index d536fed..698176f 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -6,15 +6,14 @@ include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' -include { CHUNK_CLUSTERS } from '../../modules/local/chunk_clusters.nf' workflow EXECUTE_CLUSTERING { take: sequences // tuple val(meta), path(fasta) main: - ch_versions = Channel.empty() - ch_fasta_chunks = Channel.empty() + ch_versions = Channel.empty() + ch_clustering_tsv = Channel.empty() MMSEQS_CREATEDB( sequences ) ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) @@ -37,20 +36,9 @@ workflow EXECUTE_CLUSTERING { MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) - - // Join together to ensure in sync - ch_input_for_cluster_chunking = sequences - .join(MMSEQS_CREATETSV.out.tsv) - .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] - } - - CHUNK_CLUSTERS(ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold) - ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) - ch_fasta_chunks = CHUNK_CLUSTERS.out.fasta_chunks + ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv emit: - versions = ch_versions - fasta_chunks = ch_fasta_chunks + versions = ch_versions + clustering_tsv = ch_clustering_tsv } diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index f3decf3..3765e77 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -65,8 +65,10 @@ workflow GENERATE_FAMILIES { FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) ch_full_msa = FILTER_RECRUITED.out.full_msa + ch_fasta = FILTER_RECRUITED.out.fasta emit: versions = ch_versions full_msa = ch_full_msa + fasta = ch_fasta } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index a52b95c..bd45518 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,22 +2,32 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' -include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' -include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' -include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' // include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' // include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' workflow REMOVE_REDUNDANCY { take: - full_msa // tuple val(meta), path(fasta) + full_msa // tuple val(meta), path(fas) + fasta // tuple val(meta), path(fasta) main: ch_versions = Channel.empty() // TODO - full_msa.view() + if (params.remove_sequence_redundancy) { + fasta = fasta + .map { meta, aln -> + def id = meta.id + "_" + meta.chunk + return[ [id: id], aln ] + } + params.cluster_seq_identity = 0.95 + params.cluster_coverage = 0.95 + EXECUTE_CLUSTERING(fasta) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv + clustering_tsv.view() + } emit: versions = ch_versions diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 6ee4459..a46fb4f 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -4,6 +4,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters.nf' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' @@ -46,14 +47,25 @@ workflow PROTEINFAMILIES { // Clustering EXECUTE_CLUSTERING( ch_samplesheet ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - fasta_chunks = EXECUTE_CLUSTERING.out.fasta_chunks + clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv + + // Join together to ensure in sync + ch_input_for_cluster_chunking = ch_samplesheet + .join(clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [ meta, seqs ] + clusters: [ meta, clusters ] + } + + CHUNK_CLUSTERS(ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold) + ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) // Multiple sequence alignment - GENERATE_FAMILIES( ch_samplesheet, fasta_chunks ) + GENERATE_FAMILIES( ch_samplesheet, CHUNK_CLUSTERS.out.fasta_chunks ) ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa ) + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa, GENERATE_FAMILIES.out.fasta ) ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing From 8ae64104291c77c2b4da3a0b48b4d330c769e24a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 10 Dec 2024 11:08:13 +0000 Subject: [PATCH 045/139] TODOs added to continue with redundancy mechanisms --- subworkflows/local/remove_redundancy.nf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index bd45518..81fc38b 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -15,6 +15,11 @@ workflow REMOVE_REDUNDANCY { ch_versions = Channel.empty() // TODO + // if (params.remove_family_redundancy) { + // + // } + + // TODO only for remaining families (after removal of redundant ones) if (params.remove_sequence_redundancy) { fasta = fasta .map { meta, aln -> @@ -26,6 +31,7 @@ workflow REMOVE_REDUNDANCY { EXECUTE_CLUSTERING(fasta) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv + // TODO continue with producing MSAs from cluster reps only clustering_tsv.view() } From b42db21e1d3aefd5e1c8650f37d221764eb37d98 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 12:47:50 +0000 Subject: [PATCH 046/139] remove_redundant_seqs module done, sequence align converted to subworkflow to reuse --- bin/extract_family_reps.py | 4 +- bin/remove_redundant_seqs.py | 62 +++++++++++++++++++++++++ conf/modules.config | 40 +++++++++++++++- modules/local/extract_family_reps.nf | 4 +- modules/local/remove_redundant_seqs.nf | 40 ++++++++++++++++ subworkflows/local/align_sequences.nf | 29 ++++++++++++ subworkflows/local/generate_families.nf | 23 ++++----- subworkflows/local/remove_redundancy.nf | 31 ++++++++----- workflows/proteinfamilies.nf | 2 +- 9 files changed, 202 insertions(+), 33 deletions(-) create mode 100755 bin/remove_redundant_seqs.py create mode 100644 modules/local/remove_redundant_seqs.nf create mode 100644 subworkflows/local/align_sequences.nf diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index fa1c8c0..88b5d41 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -56,8 +56,8 @@ def extract_first_sequences(msa_folder, metadata_file, out_fasta): for filename in os.listdir(msa_folder): filepath = os.path.join(msa_folder, filename) # Parse the MSA fasta file and extract the first sequence - with gzip.open(filepath, "rt") as sto_file: - records = list(SeqIO.parse(sto_file, "fasta")) + with gzip.open(filepath, 'rt') if filepath.endswith('.gz') else open(filepath, 'r') as fasta_file: + records = list(SeqIO.parse(fasta_file, "fasta")) family_size = len(records) if records: first_record = records[0] diff --git a/bin/remove_redundant_seqs.py b/bin/remove_redundant_seqs.py new file mode 100755 index 0000000..3385134 --- /dev/null +++ b/bin/remove_redundant_seqs.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import sys +import gzip +import argparse +import csv +from Bio import SeqIO + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-c", + "--clustering", + required=True, + metavar="FILE", + type=str, + help="TSV clustering file input.", + ) + parser.add_argument( + "-s", + "--sequences", + required=True, + metavar="FILE", + type=str, + help="Initial sequences FASTA file.", + ) + parser.add_argument( + "-o", + "--out_fasta", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with family representative sequences.", + ) + return parser.parse_args(args) + +def extract_rep_sequences(clustering, sequences, out_fasta): + # Read the clustering file and extract unique values from column 1 + unique_representatives = set() + with open(clustering, 'r') as tsv_file: + reader = csv.reader(tsv_file, delimiter='\t') + for row in reader: + if row: # Ensure the row is not empty + unique_representatives.add(row[0]) + + # Read the sequences file and filter for representatives + matching_records = [] + with gzip.open(sequences, 'rt') if sequences.endswith('.gz') else open(sequences, 'r') as fasta_file: + for record in SeqIO.parse(fasta_file, 'fasta'): + if record.id in unique_representatives: + matching_records.append(record) + + # Write the matching sequences to the output fasta file + with open(out_fasta, 'w') as output_file: + SeqIO.write(matching_records, output_file, 'fasta') + +def main(args=None): + args = parse_args(args) + extract_rep_sequences(args.clustering, args.sequences, args.out_fasta) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 05d6f80..dd01341 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -28,6 +28,8 @@ process { } withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATEDB' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } publishDir = [ path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_createdb/" }, mode: params.publish_dir_mode, @@ -51,6 +53,8 @@ process { } withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CLUSTER' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } ext.args = [ "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", "-c ${params.cluster_coverage_for_redundancy}", @@ -79,6 +83,8 @@ process { } withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_LINCLUST' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } ext.args = [ "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", "-c ${params.cluster_coverage_for_redundancy}", @@ -101,6 +107,8 @@ process { } withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATETSV' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } publishDir = [ path: { "${params.outdir}/mmseqs/redundancy_clustering/mmseqs_createtsv/" }, mode: params.publish_dir_mode, @@ -126,6 +134,16 @@ process { ] } + withName: '.*:REMOVE_REDUNDANCY:ALIGN_SEQUENCES:FAMSA_ALIGN' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/full_msa/non_redundant/famsa_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'MAFFT_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -136,6 +154,16 @@ process { ] } + withName: '.*:REMOVE_REDUNDANCY:ALIGN_SEQUENCES:MAFFT_ALIGN' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/full_msa/non_redundant/mafft_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'CLIPKIT' { ext.args = { "-m gappy --gaps ${params.gap_threshold}" } ext.prefix = { "${meta.id}_${meta.chunk}" } @@ -185,8 +213,18 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/full_msa/${meta.id}/" }, + path: { "${params.outdir}/full_msa/pre_non_redundant/${meta.id}/" }, mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'REMOVE_REDUNDANT_SEQS' { + publishDir = [ + path: { "${params.outdir}/remove_redundancy/reps_fasta/${meta.id}/" }, + mode: params.publish_dir_mode, + enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps.nf index e8a900f..b4f5985 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps.nf @@ -8,7 +8,7 @@ process EXTRACT_FAMILY_REPS { 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" input: - tuple val(meta), path(sto, stageAs: "sto/*") + tuple val(meta), path(aln, stageAs: "aln/*") output: tuple val(meta), path("${meta.id}_reps.fa") , emit: fasta @@ -21,7 +21,7 @@ process EXTRACT_FAMILY_REPS { script: """ extract_family_reps.py \\ - --full_msa_folder sto \\ + --full_msa_folder aln \\ --metadata ${meta.id}_meta_mqc.csv \\ --out_fasta ${meta.id}_reps.fa diff --git a/modules/local/remove_redundant_seqs.nf b/modules/local/remove_redundant_seqs.nf new file mode 100644 index 0000000..6e853d5 --- /dev/null +++ b/modules/local/remove_redundant_seqs.nf @@ -0,0 +1,40 @@ +process REMOVE_REDUNDANT_SEQS { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta) , path(clustering) + tuple val(meta2), path(sequences) + + output: + tuple val(meta), path("${meta.id}_reps.fa"), emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def is_compressed = sequences.getName().endsWith(".gz") ? true : false + def fasta_name = sequences.name.replace(".gz", "") + """ + if [ "$is_compressed" == "true" ]; then + gzip -c -d $sequences > $fasta_name + fi + + remove_redundant_seqs.py \\ + --clustering ${clustering} \\ + --sequences ${fasta_name} \\ + --out_fasta ${meta.id}_reps.fa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/subworkflows/local/align_sequences.nf b/subworkflows/local/align_sequences.nf new file mode 100644 index 0000000..3b9f87f --- /dev/null +++ b/subworkflows/local/align_sequences.nf @@ -0,0 +1,29 @@ +/* + MULTIPLE SEQUENCE ALIGNMENT +*/ + +include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' +include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' + +workflow ALIGN_SEQUENCES { + take: + sequences // tuple val(meta), path(fasta) + + main: + ch_versions = Channel.empty() + ch_alignments = Channel.empty() + + if (params.alignment_tool == 'famsa') { + alignment_res = FAMSA_ALIGN( sequences, [[:],[]], false ) + ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) + ch_alignments = alignment_res.alignment + } else { // fallback: mafft + alignment_res = MAFFT_ALIGN( sequences, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) + ch_versions = ch_versions.mix( MAFFT_ALIGN.out.versions ) + ch_alignments = alignment_res.fas + } + + emit: + versions = ch_versions + alignments = ch_alignments +} diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 3765e77..915657d 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -2,7 +2,7 @@ FAMILY MODEL GENERATION */ -include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' +include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' include { CLIPKIT } from '../../modules/nf-core/clipkit/main' include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' @@ -27,29 +27,22 @@ workflow GENERATE_FAMILIES { } .set { msa_input_ch } - if (params.alignment_tool == 'famsa') { - alignment_res = FAMSA_ALIGN(msa_input_ch, [[:],[]], false) - ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) - alignment_ch = alignment_res.alignment - } else { // fallback: mafft - alignment_res = MAFFT_ALIGN( msa_input_ch, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) - ch_versions = ch_versions.mix( MAFFT_ALIGN.out.versions ) - alignment_ch = alignment_res.fas - } + ALIGN_SEQUENCES( msa_input_ch ) + ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) if (params.trim_seed_msa) { if (params.clipping_tool == 'clipkit') { - CLIPKIT(alignment_ch) + CLIPKIT( ALIGN_SEQUENCES.out.alignments ) ch_versions = ch_versions.mix( CLIPKIT.out.versions ) - alignment_ch = CLIPKIT.out.clipkit + ch_alignments = CLIPKIT.out.clipkit } else { // fallback: local module clip_ends - CLIP_ENDS(alignment_ch, params.gap_threshold) + CLIP_ENDS( ALIGN_SEQUENCES.out.alignments, params.gap_threshold ) ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) - alignment_ch = CLIP_ENDS.out.fas + ch_alignments = CLIP_ENDS.out.fas } } - HMMER_HMMBUILD( alignment_ch, [] ) + HMMER_HMMBUILD( ch_alignments, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) // Combine with same id to ensure in sync diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 81fc38b..8d87b47 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,9 +2,10 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' -// include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' // include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' +include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' workflow REMOVE_REDUNDANCY { take: @@ -21,18 +22,24 @@ workflow REMOVE_REDUNDANCY { // TODO only for remaining families (after removal of redundant ones) if (params.remove_sequence_redundancy) { - fasta = fasta - .map { meta, aln -> - def id = meta.id + "_" + meta.chunk - return[ [id: id], aln ] - } - params.cluster_seq_identity = 0.95 - params.cluster_coverage = 0.95 - EXECUTE_CLUSTERING(fasta) + EXECUTE_CLUSTERING( fasta ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv - // TODO continue with producing MSAs from cluster reps only - clustering_tsv.view() + + // Join together to ensure in sync + ch_input_for_seq_removal = fasta + .join(clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [ meta, seqs ] + clusters: [ meta, clusters ] + } + + REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + + ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) + ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + full_msa = ALIGN_SEQUENCES.out.alignments } emit: diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index a46fb4f..fb5396e 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -57,7 +57,7 @@ workflow PROTEINFAMILIES { clusters: [ meta, clusters ] } - CHUNK_CLUSTERS(ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold) + CHUNK_CLUSTERS( ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold ) ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) // Multiple sequence alignment From 7aa1e3c187f391939cdea1a4502ca025dcc69d5f Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 13:41:03 +0000 Subject: [PATCH 047/139] concat_hmms module --- conf/modules.config | 8 +++++++ modules/local/concat_hmms.nf | 29 +++++++++++++++++++++++++ subworkflows/local/generate_families.nf | 4 +++- subworkflows/local/remove_redundancy.nf | 21 +++++++++++++----- workflows/proteinfamilies.nf | 2 +- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 modules/local/concat_hmms.nf diff --git a/conf/modules.config b/conf/modules.config index dd01341..9329855 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -220,6 +220,14 @@ process { ] } + withName: 'CONCAT_HMMS' { + publishDir = [ + path: { "${params.outdir}/hmm/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'REMOVE_REDUNDANT_SEQS' { publishDir = [ path: { "${params.outdir}/remove_redundancy/reps_fasta/${meta.id}/" }, diff --git a/modules/local/concat_hmms.nf b/modules/local/concat_hmms.nf new file mode 100644 index 0000000..fe9acf7 --- /dev/null +++ b/modules/local/concat_hmms.nf @@ -0,0 +1,29 @@ +process CONCAT_HMMS { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::sed=4.7" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : + 'nf-core/ubuntu:20.04' }" + + input: + tuple val(meta), path(hmm, stageAs: "hmm/*") + + output: + tuple val(meta), path("${meta.id}.hmm.gz"), emit: hmm + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + zcat hmm/*.hmm.gz | gzip > ${meta.id}.hmm.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 915657d..56edbb0 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -44,9 +44,10 @@ workflow GENERATE_FAMILIES { HMMER_HMMBUILD( ch_alignments, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) + ch_hmm = HMMER_HMMBUILD.out.hmm // Combine with same id to ensure in sync - HMMER_HMMBUILD.out.hmm + ch_hmm .map { meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(sequences, by: 0) .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true @@ -64,4 +65,5 @@ workflow GENERATE_FAMILIES { versions = ch_versions full_msa = ch_full_msa fasta = ch_fasta + hmm = ch_hmm } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 8d87b47..2c31702 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,8 +2,9 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' +include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' // include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' @@ -11,16 +12,24 @@ workflow REMOVE_REDUNDANCY { take: full_msa // tuple val(meta), path(fas) fasta // tuple val(meta), path(fasta) + hmm // tuple val(meta), path(hmm) main: ch_versions = Channel.empty() - // TODO - // if (params.remove_family_redundancy) { - // - // } + if (params.remove_family_redundancy) { + hmm + .map { meta, model -> [ [id: meta.id], model ] } + .groupTuple(by: 0) + .set { ch_hmm } + CONCAT_HMMS( ch_hmm ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + + // TODO + + } - // TODO only for remaining families (after removal of redundant ones) + // TODO only for remaining families (after removal of redundant ones)..fasta = ... if (params.remove_sequence_redundancy) { EXECUTE_CLUSTERING( fasta ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index fb5396e..784a910 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -65,7 +65,7 @@ workflow PROTEINFAMILIES { ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa, GENERATE_FAMILIES.out.fasta ) + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing From 21c3d1907ccab87a2bf6b474075a21ab2d1f5558 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 15:16:21 +0000 Subject: [PATCH 048/139] CONCAT_HMMS module, HMMER_HMMSEARCH for family redundancy checking, REMOVE_REDUNDANT_FAMS module init --- bin/remove_redundant_fams.py | 73 +++++++++++++++++++++++++ conf/modules.config | 31 +++++++++++ modules/local/remove_redundant_fams.nf | 38 +++++++++++++ nextflow.config | 3 +- nextflow_schema.json | 19 ++++--- subworkflows/local/remove_redundancy.nf | 47 ++++++++++++++-- 6 files changed, 199 insertions(+), 12 deletions(-) create mode 100755 bin/remove_redundant_fams.py create mode 100644 modules/local/remove_redundant_fams.nf diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py new file mode 100755 index 0000000..14cb179 --- /dev/null +++ b/bin/remove_redundant_fams.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +import sys +import gzip +import argparse +import csv +import os +import shutil +from Bio import SeqIO + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-m", + "--mapping", + required=True, + metavar="FILE", + type=str, + help="CSV metadata mapping input.", + ) + parser.add_argument( + "-d", + "--domtbl", + required=True, + metavar="FILE", + type=str, + help="TSV hmmsearch domtbl out results for filtering.", + ) + parser.add_argument( + "-f", + "--fasta_folder", + required=True, + metavar="FOLDER", + type=str, + help="Name of the input folder file with the pre-filtered fasta.", + ) + parser.add_argument( + "-l", + "--length_threshold", + required=True, + metavar="FLOAT", + type=str, + help="Minimum length percentage threshold of annotated domain (env) against query to keep.", + ) + parser.add_argument( + "-o", + "--out_folder", + required=True, + metavar="FOLDER", + type=str, + help="Name of the output folder file with the filtered fasta.", + ) + return parser.parse_args(args) + +def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_folder): + for file_name in os.listdir(fasta_folder): + source_file = os.path.join(fasta_folder, file_name) + destination_file = os.path.join(out_folder, file_name) + + # TODO logic with actual family filtering + # Check if it is a file (not a directory) + if os.path.isfile(source_file): + # Copy file to the destination folder + shutil.copy2(source_file, destination_file) + +def main(args=None): + args = parse_args(args) + + os.makedirs(args.out_folder, exist_ok=True) + remove_redundant_fams(args.mapping, args.domtbl, args.fasta_folder, args.length_threshold, args.out_folder) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 9329855..8c4a3b8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -209,6 +209,19 @@ process { ] } + withName: '.*:REMOVE_REDUNDANCY:HMMER_HMMSEARCH' { + ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } + ext.prefix = { "${meta.id}" } + tag = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/remove_redundancy/hmmer/hmmsearch/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.{sto.gz,domtbl.gz}", + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'FILTER_RECRUITED' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -228,6 +241,15 @@ process { ] } + withName: 'REMOVE_REDUNDANT_FAMS' { + publishDir = [ + path: { "${params.outdir}/remove_redundancy/non_redundant_fams/${meta.id}/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'REMOVE_REDUNDANT_SEQS' { publishDir = [ path: { "${params.outdir}/remove_redundancy/reps_fasta/${meta.id}/" }, @@ -245,6 +267,15 @@ process { ] } + withName: '.*:REMOVE_REDUNDANCY:EXTRACT_FAMILY_REPS' { + publishDir = [ + path: { "${params.outdir}/remove_redundancy/family_reps/${meta.id}/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/modules/local/remove_redundant_fams.nf b/modules/local/remove_redundant_fams.nf new file mode 100644 index 0000000..bb059ba --- /dev/null +++ b/modules/local/remove_redundant_fams.nf @@ -0,0 +1,38 @@ +process REMOVE_REDUNDANT_FAMS { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta) , path(mapping) + tuple val(meta2), path(domtbl) + tuple val(meta3), path(fasta, stageAs: "fasta_folder/*") + val(length_threshold) + + output: + tuple val(meta), path("non_redundant/*"), emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + remove_redundant_fams.py \\ + --mapping ${mapping} \\ + --domtbl ${domtbl} \\ + --fasta_folder fasta_folder \\ + --length_threshold ${length_threshold} \\ + --out_folder non_redundant + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index 1655cf0..cf25689 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,11 +30,12 @@ params { save_hmmsearch_results = false hmmsearch_query_length_threshold = 0.8 // Redundancy + remove_family_redundancy = true + hmmsearch_family_length_threshold = 0.8 remove_sequence_redundancy = true cluster_seq_identity_for_redundancy = 0.95 cluster_coverage_for_redundancy = 0.95 cluster_cov_mode_for_redundancy = 0 - remove_family_redundancy = true // MultiQC options multiqc_config = null diff --git a/nextflow_schema.json b/nextflow_schema.json index b865bf0..0d4bab9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -280,6 +280,18 @@ "type": "object", "description": "Use these parameters to control the redundancy removal subworkflow execution.", "properties": { + "remove_family_redundancy": { + "type": "boolean", + "description": "Removal of between-family redundancy via hmmsearch.", + "default": true, + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "hmmsearch_family_length_threshold": { + "type": "number", + "default": 0.8, + "description": "hmmsearch minimum length percentage filter of hit env vs query length, for redundant family removal" + }, "remove_sequence_redundancy": { "type": "boolean", "description": "Removal of inside-family redundancy of sequences via mmseqs clustering.", @@ -301,13 +313,6 @@ "type": "integer", "default": 0, "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" - }, - "remove_family_redundancy": { - "type": "boolean", - "description": "Removal of between-family redundancy via hmmsearch.", - "default": true, - "fa_icon": "fas fa-question-circle", - "hidden": true } } } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 2c31702..e3f8c13 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,8 +2,10 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' -// include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' @@ -18,18 +20,55 @@ workflow REMOVE_REDUNDANCY { ch_versions = Channel.empty() if (params.remove_family_redundancy) { + full_msa + .map { meta, aln -> [ [id: meta.id], aln ] } + .groupTuple(by: 0) + .set { ch_full_msa } + EXTRACT_FAMILY_REPS( ch_full_msa ) + ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + hmm .map { meta, model -> [ [id: meta.id], model ] } .groupTuple(by: 0) .set { ch_hmm } CONCAT_HMMS( ch_hmm ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + ch_versions = ch_versions.mix( CONCAT_HMMS.out.versions ) - // TODO + CONCAT_HMMS.out.hmm + .combine(EXTRACT_FAMILY_REPS.out.fasta, by: 0) + .map { meta, model, seqs -> [ meta, model, seqs, false, false, true ] } + .set { ch_input_for_hmmsearch } + + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + + fasta + .map{ meta, fas -> [ [id: meta.id], fas ] } + .groupTuple(by: 0) + .set { fasta } + // Join together to ensure in sync + ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map + .join(HMMER_HMMSEARCH.out.domain_summary) + .join(fasta) + .multiMap { meta, map, domtbl, seqs -> + map: [ meta, map ] + domtbl: [ meta, domtbl ] + seqs: [ meta, seqs ] + } + + REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) + fasta = REMOVE_REDUNDANT_FAMS.out.fasta + fasta + .transpose() + .map { meta, file -> + def baseName = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] + [ [id: meta.id, chunk: baseName], file ] + } + .set { fasta } } - // TODO only for remaining families (after removal of redundant ones)..fasta = ... if (params.remove_sequence_redundancy) { EXECUTE_CLUSTERING( fasta ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) From 39afbb98692998612f6c5c3ce56b4bc9de287164 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 15:49:07 +0000 Subject: [PATCH 049/139] remove_self_hits function --- bin/remove_redundant_fams.py | 39 +++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index 14cb179..0feac96 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -1,12 +1,10 @@ #!/usr/bin/env python +import os import sys -import gzip +import pandas as pd import argparse -import csv -import os import shutil -from Bio import SeqIO def parse_args(args=None): parser = argparse.ArgumentParser() @@ -52,12 +50,43 @@ def parse_args(args=None): ) return parser.parse_args(args) +def remove_self_hits(mapping_set, domtbl_df): + # Filter out these self-hits from domtbl_df based on the set membership + filtered_domtbl_df = domtbl_df[ + ~domtbl_df.apply(lambda row: (row["target name"], row["query name"]) in mapping_set, axis=1) + ] + + return filtered_domtbl_df + def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_folder): + mapping_df = pd.read_csv( + mapping, + comment='#', + usecols=["Family Id", "Size", "Representative Id"] + ) + domtbl_df = pd.read_csv( + domtbl, + sep=r'\s+', + comment='#', + header=None, + usecols=[0, 3, 5, 20, 21] + ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 20: "env from", 21: "env to"}) + # Create a set of (Representative Id, Family Id) pairs from mapping_df + mapping_set = set(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) + + domtbl_df = remove_self_hits(mapping_set, domtbl_df) + + print(domtbl_df) + + # TODO logic with actual family filtering + # 1. remove self-hits, done + # 2. filter_by_length + # 3. keep larger hit + # 4. write out non redundant for file_name in os.listdir(fasta_folder): source_file = os.path.join(fasta_folder, file_name) destination_file = os.path.join(out_folder, file_name) - # TODO logic with actual family filtering # Check if it is a file (not a directory) if os.path.isfile(source_file): # Copy file to the destination folder From 5ddbf776993f130b472b9eae555227698144660a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 15:59:35 +0000 Subject: [PATCH 050/139] filter_by_length --- bin/remove_redundant_fams.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index 0feac96..a0f514c 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -37,7 +37,7 @@ def parse_args(args=None): "--length_threshold", required=True, metavar="FLOAT", - type=str, + type=float, help="Minimum length percentage threshold of annotated domain (env) against query to keep.", ) parser.add_argument( @@ -52,11 +52,16 @@ def parse_args(args=None): def remove_self_hits(mapping_set, domtbl_df): # Filter out these self-hits from domtbl_df based on the set membership - filtered_domtbl_df = domtbl_df[ + domtbl_df = domtbl_df[ ~domtbl_df.apply(lambda row: (row["target name"], row["query name"]) in mapping_set, axis=1) ] - return filtered_domtbl_df + return domtbl_df + +def filter_by_length(domtbl_df, length_threshold): + domtbl_df = domtbl_df[(domtbl_df["env to"] - domtbl_df["env from"] + 1) / domtbl_df["qlen"] >= length_threshold] + + return domtbl_df def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_folder): mapping_df = pd.read_csv( @@ -69,18 +74,18 @@ def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_f sep=r'\s+', comment='#', header=None, - usecols=[0, 3, 5, 20, 21] - ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 20: "env from", 21: "env to"}) + usecols=[0, 3, 5, 19, 20] + ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 19: "env from", 20: "env to"}) # Create a set of (Representative Id, Family Id) pairs from mapping_df mapping_set = set(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) domtbl_df = remove_self_hits(mapping_set, domtbl_df) - + domtbl_df = filter_by_length(domtbl_df, length_threshold) print(domtbl_df) # TODO logic with actual family filtering # 1. remove self-hits, done - # 2. filter_by_length + # 2. filter_by_length, done # 3. keep larger hit # 4. write out non redundant for file_name in os.listdir(fasta_folder): From 69b054ece8d7672bf5bea847ae2ce1b225e76ca1 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 11 Dec 2024 16:33:42 +0000 Subject: [PATCH 051/139] remove_redundant_fams module done and container updated to pandas --- bin/remove_redundant_fams.py | 44 ++++++++++++++------------ modules/local/remove_redundant_fams.nf | 8 ++--- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index a0f514c..22d70e2 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -50,11 +50,9 @@ def parse_args(args=None): ) return parser.parse_args(args) -def remove_self_hits(mapping_set, domtbl_df): - # Filter out these self-hits from domtbl_df based on the set membership - domtbl_df = domtbl_df[ - ~domtbl_df.apply(lambda row: (row["target name"], row["query name"]) in mapping_set, axis=1) - ] +def remove_self_hits(domtbl_df, representative_to_family): + domtbl_df["target name"] = domtbl_df["target name"].map(representative_to_family) + domtbl_df = domtbl_df[domtbl_df["target name"] != domtbl_df["query name"]] return domtbl_df @@ -76,26 +74,32 @@ def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_f header=None, usecols=[0, 3, 5, 19, 20] ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 19: "env from", 20: "env to"}) - # Create a set of (Representative Id, Family Id) pairs from mapping_df - mapping_set = set(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) - domtbl_df = remove_self_hits(mapping_set, domtbl_df) + representative_to_family = dict(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) + family_to_size = dict(zip(mapping_df["Family Id"], mapping_df["Size"])) + + domtbl_df = remove_self_hits(domtbl_df, representative_to_family) domtbl_df = filter_by_length(domtbl_df, length_threshold) - print(domtbl_df) + domtbl_df = domtbl_df.drop(columns=["qlen", "env from", "env to"]) + domtbl_df['query size'] = domtbl_df['query name'].map(family_to_size) + domtbl_df['target size'] = domtbl_df['target name'].map(family_to_size) + + redundant_fam_names = set() + for _, row in domtbl_df.iterrows(): + if row['query size'] < row['target size']: + redundant_fam_names.add(row['query name']) + else: + redundant_fam_names.add(row['target name']) - # TODO logic with actual family filtering - # 1. remove self-hits, done - # 2. filter_by_length, done - # 3. keep larger hit - # 4. write out non redundant for file_name in os.listdir(fasta_folder): - source_file = os.path.join(fasta_folder, file_name) - destination_file = os.path.join(out_folder, file_name) + base_name = os.path.basename(file_name).split(".")[0] + if base_name not in redundant_fam_names: + source_file = os.path.join(fasta_folder, file_name) + destination_file = os.path.join(out_folder, file_name) - # Check if it is a file (not a directory) - if os.path.isfile(source_file): - # Copy file to the destination folder - shutil.copy2(source_file, destination_file) + # Check if it is a file (not a directory) and copy + if os.path.isfile(source_file): + shutil.copy2(source_file, destination_file) def main(args=None): args = parse_args(args) diff --git a/modules/local/remove_redundant_fams.nf b/modules/local/remove_redundant_fams.nf index bb059ba..ae3d041 100644 --- a/modules/local/remove_redundant_fams.nf +++ b/modules/local/remove_redundant_fams.nf @@ -2,10 +2,10 @@ process REMOVE_REDUNDANT_FAMS { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + conda "conda-forge::pandas=1.4.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : - 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + 'https://depot.galaxyproject.org/singularity/pandas:1.4.3' : + 'biocontainers/pandas:1.4.3' }" input: tuple val(meta) , path(mapping) @@ -32,7 +32,7 @@ process REMOVE_REDUNDANT_FAMS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + pandas: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('pandas').version)") END_VERSIONS """ } From 480bc2a887aceb50f6427a4f2810a66d6f1e7dcd Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 12 Dec 2024 12:50:34 +0000 Subject: [PATCH 052/139] filtered sequence names updated, results folder architecture updated --- bin/filter_recruited.py | 15 ++++++++++++++- conf/modules.config | 12 +++++++----- nextflow.config | 2 ++ nextflow_schema.json | 10 ++++++++++ 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index 179245a..1594e48 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -2,6 +2,7 @@ import sys import argparse +import os import gzip from Bio import AlignIO, SeqIO @@ -75,12 +76,24 @@ def filter_sequences(domtbl, length_threshold): return filtered_sequences def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta): + base_filename = os.path.basename(alignment).split('.')[0] + with gzip.open(alignment, 'rt', encoding='utf-8') as file: alignment_data = AlignIO.read(file, "stockholm") filtered_records = [record for record in alignment_data if record.id in filtered_sequences] for record in filtered_records: - record.description = "" + ungapped_length = len(record.seq.replace('-', '')) + # Extract the part after the slash in the name (if present) + if '/' in record.id: + name, range_info = record.id.split('/') + start, end = map(int, range_info.split('-')) + # If the sequence starts at 1 and the end matches the ungapped length, remove the slash and range + if start == 1 and end == ungapped_length: + record.id = name + + # Add the family name to the description field + record.description = base_filename with gzip.open(out_msa, 'wt') as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") diff --git a/conf/modules.config b/conf/modules.config index 8c4a3b8..6c9d8c8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,7 +22,7 @@ process { publishDir = [ path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_createdb/" }, mode: params.publish_dir_mode, - enabled: false, + enabled: params.save_mmseqs_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -47,7 +47,7 @@ process { publishDir = [ path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_cluster/" }, mode: params.publish_dir_mode, - enabled: false, + enabled: params.save_mmseqs_clustering, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -77,7 +77,7 @@ process { publishDir = [ path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_linclust/" }, mode: params.publish_dir_mode, - enabled: false, + enabled: params.save_mmseqs_clustering, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -120,6 +120,7 @@ process { publishDir = [ path: { "${params.outdir}/fasta_chunks/${meta.id}/" }, mode: params.publish_dir_mode, + enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -228,15 +229,16 @@ process { publishDir = [ path: { "${params.outdir}/full_msa/pre_non_redundant/${meta.id}/" }, mode: params.publish_dir_mode, - enabled: false, + enabled: true, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: 'CONCAT_HMMS' { publishDir = [ - path: { "${params.outdir}/hmm/" }, + path: { "${params.outdir}/hmmer/hmmbuild/concatenated/" }, mode: params.publish_dir_mode, + enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/nextflow.config b/nextflow.config index cf25689..d5f8b79 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,10 +14,12 @@ params { // Pipeline parameters // Clustering + save_mmseqs_db = false clustering_tool = 'linclust' cluster_seq_identity = 0.5 cluster_coverage = 0.9 cluster_cov_mode = 0 + save_mmseqs_clustering = false cluster_size_threshold = 25 // Alignment alignment_tool = 'famsa' diff --git a/nextflow_schema.json b/nextflow_schema.json index 0d4bab9..9789fb4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -187,6 +187,11 @@ "type": "object", "description": "Use these parameters to control the flow of the clustering subworkflow execution.", "properties": { + "save_mmseqs_db": { + "type": "boolean", + "description": "Save the db output folder of mmseqs createdb", + "help_text": "Specify to save the mmseqs formatted database of input fasta sequences." + }, "clustering_tool": { "type": "string", "description": "Choose clustering algorithm. Either simple 'cluster' for medium size inputs, or 'linclust' for less sensitive clustering of larger datasets.", @@ -208,6 +213,11 @@ "default": 0, "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" }, + "save_mmseqs_clustering": { + "type": "boolean", + "description": "Save the clustering output folder of mmseqs cluster or linclust", + "help_text": "Specify to save the mmseqs formatted result clustering." + }, "cluster_size_threshold": { "type": "integer", "default": 25, From 2f0e75c12803b7c23fb6ecc8fa0167b9ce7c4033 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 13 Dec 2024 10:32:31 +0000 Subject: [PATCH 053/139] readme and output.md doc updates --- README.md | 6 +- conf/modules.config | 4 +- docs/output.md | 166 ++++++++++++++++++------ subworkflows/local/generate_families.nf | 1 - 4 files changed, 132 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 5dfbd46..be946b0 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,10 @@ It takes a protein fasta file as input, clusters the sequences and then generate 1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) 2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) 3. Optionally clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) -4. Generate family HMMs ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) -5. Present QC for family size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) +4. Generate family HMMs and fish additional sequences in the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +5. Remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +6. From the remaining families, removing in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keeping cluster representatives +7. Present QC for remaining family size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) ## Usage diff --git a/conf/modules.config b/conf/modules.config index 6c9d8c8..0449a2a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -118,7 +118,7 @@ process { withName: 'CHUNK_CLUSTERS' { publishDir = [ - path: { "${params.outdir}/fasta_chunks/${meta.id}/" }, + path: { "${params.outdir}/mmseqs/initial_clustering/filtered_fasta_chunks/${meta.id}/" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -217,7 +217,7 @@ process { publishDir = [ path: { "${params.outdir}/remove_redundancy/hmmer/hmmsearch/${meta.id}/" }, mode: params.publish_dir_mode, - pattern: "*.{sto.gz,domtbl.gz}", + pattern: "*.{domtbl.gz}", enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/docs/output.md b/docs/output.md index 1bf5dc0..9fe59b8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -6,30 +6,34 @@ This document describes the output produced by the pipeline. Most of the plots a The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -Clustering: +Initial clustering: -- [MMseqs2](#mmseqs2) clustering of input amino acid sequences -- [Chunked fasta clusters](#chunked-fasta-clusters) derived from the MMseqs2 clusters for parallel downstream processing. +- [MMseqs2](#mmseqs2) initial clustering of input amino acid sequences and filtering with membership threshold Multiple sequence alignment: - [FAMSA](#famsa) aligner option. Best speed and sensitivity option to build seed multiple sequence alignment for the families. - [mafft](#mafft) aligner option. Fast but not as sensitive as FAMSA to build seed multiple sequence alignment for the families. -- [ClipKIT](#clipkit) to optionally clip gapped portions of the MSA (start, middle, end) +- [ClipKIT](#clipkit) to optionally clip gapped portions of the multiple sequence alignment (MSA) Generating family models: -- [hmmer](#hmmer) to build the family HMM (hmmbuild) and to 'fish' additional sequences from the input fasta file into the family and also build the full MSA (hmmsearch). -- [Extract family representatives](#extract-family-representatives) to produce the final metadata file along with a fasta of all family representative sequences (can be used downstream for structural prediction). +- [hmmer](#hmmer) to build the family HMM (hmmbuild) and to 'fish' additional sequences from the input fasta file, with given thresholds, into the family and also build the family full MSA (hmmsearch). + +Removing redundancy: + +- [hmmer](#hmmer-for-redundancy-removal) to match family representative sequences against other family models in order to keep non redundant ones +- [MMseqs2](#mmseqs2-for-redundancy-removal) to strictly cluster the sequences within each of the remaining families, in order to still capture the evolutionary diversity within a family, but without keeping all the almost identical sequences. +- [FAMSA](#famsa-for-redundancy-removal) aligner option. Re-align full MSA with non-redundant set of sequences. +- [mafft](#mafft-for-redundancy-removal) aligner option. Re-align full MSA with non-redundant set of sequences. Reporting: +- [Extract family representatives](#extract-family-representatives) to produce the final metadata file along with a fasta of all family representative sequences (can be used downstream for structural prediction). - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution @@ -39,40 +43,35 @@ Reporting: Output files - `mmseqs/` - - `mmseqs_createtsv/` - - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members - - `mmseqs_createdb/` - - `/` - - `*`: (optional) mmseqs format db of fasta sequences - - `mmseqs_linclust/` - - `/` - - `*`: (optional) mmseqs format clustered db - - `mmseqs_cluster/` - - `/` - - `*`: (optional) mmseqs format clustered db + - `initial_clustering/` + - `mmseqs_createtsv/` + - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members + - `mmseqs_createdb/` + - `/` + - `*`: (optional) mmseqs format db of fasta sequences + - `mmseqs_linclust/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `mmseqs_cluster/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `filtered_fasta_chunks/` + - `/` + - `chunked_fasta/` + - `*.fasta`: (optional) fasta files with amino acid sequences of each cluster above the membership threshold
    [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. -### Chunked fasta clusters - -
    -Output files - -- `fasta_chunks/` - - `/` - - `chunked_fasta/` - - `*.fasta`: fasta files with amino acid sequences of each cluster -
    - ### FAMSA aligner
    Output files -- `famsa_align/` - - `/` - - `*.aln`: fasta files with aligned amino acid sequences +- `seed_msa/` + - `famsa_align/` + - `/` + - `_*.aln`: fasta files with aligned amino acid sequences
    [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. @@ -82,9 +81,10 @@ Reporting:
    Output files -- `mafft_align/` - - `/` - - `*.fas`: fasta files with aligned amino acid sequences +- `seed_msa/` + - `mafft_align/` + - `/` + - `_*.fas`: fasta files with aligned amino acid sequences
    [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. @@ -94,9 +94,13 @@ Reporting:
    Output files -- `mafft_align/` - - `/` - - `*.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences +- `seed_msa/` + - `clipkit/` + - `/` + - `*.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences + - `clip_ends/` + - `/` + - `*.fas`: gap-clipped (only start and end) fasta files of aligned amino acid sequences
    [ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. @@ -113,13 +117,95 @@ Reporting: - `_*.hmmbuild.txt`: (optional) hmmbuild execution log - `hmmsearch/` - `/` - - `_*.sto.gz`: full multiple sequence alignment of the family + - `_*.sto.gz`: (optional) full multiple sequence alignment of the family - `_*.domtbl.gz`: (optional) hmmsearch results along parameters info - `_*.txt.gz`: (optional) hmmsearch execution log +- `full_msa/` + - `pre_non_redundant/` + - `/` + - `_*.fas.gz`: compressed family full MSA (before checking for redundancy)
    [hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. +### hmmer for redundancy removal + +
    +Output files + +- `remove_redundancy/` + - `hmmer/` + - `hmmbuild/` + - `concatenated/` + - `_*.hmm.gz`: (optional) concatenated compressed hmm model for all families in a given sample (pre redundancy removal) + - `hmmsearch/` + - `/` + - `_*.domtbl.gz`: (optional) hmmsearch results of family reps against families' HMMs + - `family_reps/` + - `/` + - `_meta_mqc.csv`: (optional) csv with metadata (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) + - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) + - `non_redundant_fams/` + - `/` + - `non_redundant/` + - `_*.fasta.gz`: (optional) compressed family full MSA (after checking for family redundancy) + +
    + +[hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. + +### MMseqs2 for redundancy removal + +
    +Output files + +- `mmseqs/` + - `redundancy_clustering/` + - `mmseqs_createtsv/` + - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members + - `mmseqs_createdb/` + - `/` + - `*`: (optional) mmseqs format db of fasta sequences + - `mmseqs_linclust/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `mmseqs_cluster/` + - `/` + - `*`: (optional) mmseqs format clustered db +- `remove_redundancy/` + - `reps_fasta/` + - `/` + - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) +
    + +[MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. + +### FAMSA for redundancy removal + +
    +Output files + +- `full_msa/` + - `non_redundant/` + - `/` + - `_*.aln`: family full MSA (after checking for sequence redundancy) +
    + +[FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. + +### mafft for redundancy removal + +
    +Output files + +- `full_msa/` + - `non_redundant/` + - `/` + - `_*.fas`: fasta files with aligned amino acid sequences (after checking for sequence redundancy) +
    + +[mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. + ### Extract family representatives
    diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 56edbb0..2d3995f 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -3,7 +3,6 @@ */ include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' -include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' include { CLIPKIT } from '../../modules/nf-core/clipkit/main' include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' From 7b16c7c7fdfb81077452d1fd177bc39d69d995a9 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 13 Dec 2024 11:12:47 +0000 Subject: [PATCH 054/139] metro map updated --- docs/images/proteinfamilies_workflow.png | Bin 151952 -> 223350 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index ec8b7db59868a6b3029fb0cc86b6948fe7ec7289..8d5530f92a1bc5d3eb9ab458e316a500acda98d9 100644 GIT binary patch literal 223350 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%0DoX1bl)GE=&xlk<=j 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 Date: Mon, 16 Dec 2024 07:11:03 +0000 Subject: [PATCH 055/139] non redundant hmm filtering --- bin/filter_non_redundant_hmms.py | 58 ++++++++++++++++++++++ conf/modules.config | 12 ++++- modules/local/filter_non_redundant_hmms.nf | 33 ++++++++++++ subworkflows/local/remove_redundancy.nf | 25 +++++++--- 4 files changed, 119 insertions(+), 9 deletions(-) create mode 100755 bin/filter_non_redundant_hmms.py create mode 100644 modules/local/filter_non_redundant_hmms.nf diff --git a/bin/filter_non_redundant_hmms.py b/bin/filter_non_redundant_hmms.py new file mode 100755 index 0000000..e48fcb9 --- /dev/null +++ b/bin/filter_non_redundant_hmms.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +import os +import sys +import argparse +import shutil + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-s", + "--seqs", + required=True, + metavar="FOLDER", + type=str, + help="Filtered fasta files to grab names from.", + ) + parser.add_argument( + "-m", + "--models", + required=True, + metavar="FOLDER", + type=str, + help="All family HMMs.", + ) + parser.add_argument( + "-o", + "--out_folder", + required=True, + metavar="FOLDER", + type=str, + help="Name of the output folder file with the filtered HMMs.", + ) + return parser.parse_args(args) + +def filter_non_redundant_hmms(seqs, models, out_folder): + seq_basenames = { + os.path.basename(f).split(".")[0] + for f in os.listdir(seqs) if f.endswith('.fasta.gz') + } + + # Iterate through the models folder and copy matching files + for model_file in os.listdir(models): + if model_file.endswith('.hmm.gz'): + model_basename = os.path.basename(model_file).split(".")[0] + if model_basename in seq_basenames: + src = os.path.join(models, model_file) + dst = os.path.join(out_folder, model_file) + shutil.copy(src, dst) + +def main(args=None): + args = parse_args(args) + + os.makedirs(args.out_folder, exist_ok=True) + filter_non_redundant_hmms(args.seqs, args.models, args.out_folder) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 0449a2a..c542fae 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -190,7 +190,7 @@ process { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } publishDir = [ - path: { "${params.outdir}/hmmer/hmmbuild/${meta.id}/" }, + path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/${meta.id}/" }, mode: params.publish_dir_mode, pattern: "*.{hmm.gz}", saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -236,7 +236,7 @@ process { withName: 'CONCAT_HMMS' { publishDir = [ - path: { "${params.outdir}/hmmer/hmmbuild/concatenated/" }, + path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -252,6 +252,14 @@ process { ] } + withName: 'FILTER_NON_REDUNDANT_HMMS' { + publishDir = [ + path: { "${params.outdir}/hmmer/hmmbuild/non_redundant/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'REMOVE_REDUNDANT_SEQS' { publishDir = [ path: { "${params.outdir}/remove_redundancy/reps_fasta/${meta.id}/" }, diff --git a/modules/local/filter_non_redundant_hmms.nf b/modules/local/filter_non_redundant_hmms.nf new file mode 100644 index 0000000..d4d369d --- /dev/null +++ b/modules/local/filter_non_redundant_hmms.nf @@ -0,0 +1,33 @@ +process FILTER_NON_REDUNDANT_HMMS { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::python=3.13.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/31/313e1c18a344323886cf97a151ab66d81c1a146fb129558cb9382b69a72d5532/data' : + 'community.wave.seqera.io/library/python:b1b4b1f458c605bb' }" + + input: + tuple val(meta) , path(seqs, stageAs: "seqs/*") + tuple val(meta2), path(models, stageAs: "models/*") + + output: + tuple val(meta), path("non_redundant/*"), emit: hmm + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + filter_non_redundant_hmms.py \\ + --seqs seqs \\ + --models models \\ + --out_folder non_redundant + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + END_VERSIONS + """ +} diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index e3f8c13..2b2f8ed 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,13 +2,14 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' -include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' -include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' -include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' +include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' +include { FILTER_NON_REDUNDANT_HMMS } from '../../modules/local/filter_non_redundant_hmms.nf' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' +include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' workflow REMOVE_REDUNDANCY { take: @@ -60,6 +61,16 @@ workflow REMOVE_REDUNDANCY { REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) fasta = REMOVE_REDUNDANT_FAMS.out.fasta + + // Join together to ensure in sync + ch_input_for_hmm_filtering = fasta + .join(ch_hmm) + .multiMap { meta, seqs, models -> + seqs: [ meta, seqs ] + models: [ meta, models ] + } + FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) + fasta .transpose() .map { meta, file -> From 92a3fdb677b946fd6e56c0c1f18f1488082328fe Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 16 Dec 2024 08:14:44 +0000 Subject: [PATCH 056/139] manifest update and modules config proper sourcing --- bin/chunk_clusters.py | 2 +- nextflow.config | 22 ++++++++++++++++------ subworkflows/local/align_sequences.nf | 4 ++-- subworkflows/local/execute_clustering.nf | 2 +- subworkflows/local/remove_redundancy.nf | 1 + 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index cbe3e14..c699ac5 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -60,7 +60,7 @@ def main(args=None): os.makedirs(args.out_folder, exist_ok=True) # Collect clusters that meet the threshold - clusters = collect_clusters(args.clustering, args.threshold) + clusters = collect_clusters(args.clustering, int(args.threshold)) # Stream through the FASTA file and write out sequences that match clusters chunk_num = 1 diff --git a/nextflow.config b/nextflow.config index c9b8dc3..b66101d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -244,15 +244,22 @@ manifest { name = 'nf-core/proteinfamilies' author = """Evangelos Karatzas""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ - // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ name: 'Evangelos Karatzas', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'EMBL-EBI', + email: 'vangelis@ebi.ac.uk', + github: 'https://github.com/vagkaratzas', + contribution: ['author'], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0001-9132-8981' ], + [ + name: 'Martin Beracochea', + affiliation: 'EMBL-EBI', + email: 'mbc@ebi.ac.uk', + github: 'https://github.com/mberacochea', + contribution: ['contributor'], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0003-3472-3736' + ] ] homePage = 'https://github.com/nf-core/proteinfamilies' description = """Generate protein family level models (MSAs, HMMs) starting from a FASTA amino acid sequence file.""" @@ -263,6 +270,9 @@ manifest { doi = '' } +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + // Nextflow plugins plugins { id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet diff --git a/subworkflows/local/align_sequences.nf b/subworkflows/local/align_sequences.nf index 3b9f87f..b75efdf 100644 --- a/subworkflows/local/align_sequences.nf +++ b/subworkflows/local/align_sequences.nf @@ -16,11 +16,11 @@ workflow ALIGN_SEQUENCES { if (params.alignment_tool == 'famsa') { alignment_res = FAMSA_ALIGN( sequences, [[:],[]], false ) ch_versions = ch_versions.mix( FAMSA_ALIGN.out.versions ) - ch_alignments = alignment_res.alignment + ch_alignments = alignment_res.alignment } else { // fallback: mafft alignment_res = MAFFT_ALIGN( sequences, [[:], []], [[:], []], [[:], []], [[:], []], [[:], []], false ) ch_versions = ch_versions.mix( MAFFT_ALIGN.out.versions ) - ch_alignments = alignment_res.fas + ch_alignments = alignment_res.fas } emit: diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index 698176f..de1d169 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -35,7 +35,7 @@ workflow EXECUTE_CLUSTERING { } MMSEQS_CREATETSV(ch_input_for_createtsv.db_cluster, ch_input_for_createtsv.db, ch_input_for_createtsv.db) - ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv emit: diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 2b2f8ed..47a340b 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -70,6 +70,7 @@ workflow REMOVE_REDUNDANCY { models: [ meta, models ] } FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) + ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) fasta .transpose() From baf48e952f9d9147f900776ec946a98c703ab311 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 16 Dec 2024 12:01:14 +0000 Subject: [PATCH 057/139] future proofing multiqc numeric protein name bug (proper strings will work with next multiqc version update) --- bin/extract_family_reps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index 88b5d41..645080b 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -48,7 +48,7 @@ def extract_first_sequences(msa_folder, metadata_file, out_fasta): "# format: \"csv\"\n" "# plot_type: \"table\"\n" ) - csv_writer = csv.writer(csv_out) + csv_writer = csv.writer(csv_out, quoting=csv.QUOTE_NONNUMERIC) # Write the CSV header csv_writer.writerow(["Sample Name", "Family Id", "Size", "Representative Length", "Representative Id", "Sequence"]) From 97fcd2216bc217e29dcc2379ff8a529f3e17dbd3 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 16 Dec 2024 14:23:19 +0000 Subject: [PATCH 058/139] smallest test skipping clipping of msas and redundancy removal mechanism --- conf/test.config | 10 ++++++++-- conf/test_full.config | 1 + subworkflows/local/generate_families.nf | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/conf/test.config b/conf/test.config index 6b47a2f..c381d28 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,6 +23,12 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' - cluster_size_threshold = 5 + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + // Clustering + cluster_size_threshold = 5 + // Alignment + trim_seed_msa = false + // Redundancy + remove_family_redundancy = false + remove_sequence_redundancy = false } diff --git a/conf/test_full.config b/conf/test_full.config index 47a432c..10a15a2 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -17,5 +17,6 @@ params { // Input data for full size test // Input data input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + // Clustering cluster_size_threshold = 5 } diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 2d3995f..c6497e9 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -28,14 +28,15 @@ workflow GENERATE_FAMILIES { ALIGN_SEQUENCES( msa_input_ch ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + ch_alignments = ALIGN_SEQUENCES.out.alignments if (params.trim_seed_msa) { if (params.clipping_tool == 'clipkit') { - CLIPKIT( ALIGN_SEQUENCES.out.alignments ) + CLIPKIT( ch_alignments ) ch_versions = ch_versions.mix( CLIPKIT.out.versions ) ch_alignments = CLIPKIT.out.clipkit } else { // fallback: local module clip_ends - CLIP_ENDS( ALIGN_SEQUENCES.out.alignments, params.gap_threshold ) + CLIP_ENDS( ch_alignments, params.gap_threshold ) ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) ch_alignments = CLIP_ENDS.out.fas } From ca3b434896ac80c0de50ea408ddfdb6ad7ade85a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 16 Dec 2024 14:53:06 +0000 Subject: [PATCH 059/139] make recruiting of sequences with hmmsearch optional, both tests running properly --- conf/test.config | 11 +++---- conf/test_full.config | 8 ++++++ nextflow.config | 1 + nextflow_schema.json | 7 +++++ subworkflows/local/generate_families.nf | 38 ++++++++++++++----------- subworkflows/local/remove_redundancy.nf | 16 +++++------ workflows/proteinfamilies.nf | 8 +++--- 7 files changed, 55 insertions(+), 34 deletions(-) diff --git a/conf/test.config b/conf/test.config index c381d28..9fbdf02 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,12 +23,13 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' // Clustering - cluster_size_threshold = 5 + cluster_size_threshold = 5 // Alignment - trim_seed_msa = false + trim_seed_msa = false + recruit_sequences_with_models = false // Redundancy - remove_family_redundancy = false - remove_sequence_redundancy = false + remove_family_redundancy = false + remove_sequence_redundancy = false } diff --git a/conf/test_full.config b/conf/test_full.config index 10a15a2..5f06f4c 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,6 +10,14 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' diff --git a/nextflow.config b/nextflow.config index b66101d..fd7403a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,6 +26,7 @@ params { trim_seed_msa = true clipping_tool = 'clip_ends' gap_threshold = 0.5 + recruit_sequences_with_models = true hmmsearch_write_target = false hmmsearch_write_domain = true hmmsearch_evalue_cutoff = 0.001 diff --git a/nextflow_schema.json b/nextflow_schema.json index 93c07a1..274991b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -260,6 +260,13 @@ "default": 0.5, "description": "Seed MSA positions with gappyness greater than this threshold will be trimmed" }, + "recruit_sequences_with_models": { + "type": "boolean", + "description": "Boolean whether to recruit extra sequences from the input fasta file, using the family HMMs, to refine the alignments", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index c6497e9..0d76ed5 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -15,8 +15,10 @@ workflow GENERATE_FAMILIES { fasta_chunks main: - ch_versions = Channel.empty() - ch_alignments = Channel.empty() + ch_versions = Channel.empty() + ch_msa = Channel.empty() + ch_fasta = Channel.empty() + ch_hmm = Channel.empty() fasta_chunks .transpose() @@ -24,25 +26,25 @@ workflow GENERATE_FAMILIES { def baseName = file.toString().split('/')[-1].split('\\.')[0] [ [id: meta.id, chunk: baseName], file ] } - .set { msa_input_ch } + .set { ch_fasta } - ALIGN_SEQUENCES( msa_input_ch ) + ALIGN_SEQUENCES( ch_fasta ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) - ch_alignments = ALIGN_SEQUENCES.out.alignments + ch_msa = ALIGN_SEQUENCES.out.alignments if (params.trim_seed_msa) { if (params.clipping_tool == 'clipkit') { - CLIPKIT( ch_alignments ) + CLIPKIT( ch_msa ) ch_versions = ch_versions.mix( CLIPKIT.out.versions ) - ch_alignments = CLIPKIT.out.clipkit + ch_msa = CLIPKIT.out.clipkit } else { // fallback: local module clip_ends - CLIP_ENDS( ch_alignments, params.gap_threshold ) + CLIP_ENDS( ch_msa, params.gap_threshold ) ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) - ch_alignments = CLIP_ENDS.out.fas + ch_msa = CLIP_ENDS.out.fas } } - HMMER_HMMBUILD( ch_alignments, [] ) + HMMER_HMMBUILD( ch_msa, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) ch_hmm = HMMER_HMMBUILD.out.hmm @@ -53,17 +55,19 @@ workflow GENERATE_FAMILIES { .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + if (params.recruit_sequences_with_models) { + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - ch_full_msa = FILTER_RECRUITED.out.full_msa - ch_fasta = FILTER_RECRUITED.out.fasta + FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) + ch_versions = ch_versions.mix( FILTER_RECRUITED.out.versions ) + ch_msa = FILTER_RECRUITED.out.full_msa + ch_fasta = FILTER_RECRUITED.out.fasta + } emit: versions = ch_versions - full_msa = ch_full_msa + msa = ch_msa fasta = ch_fasta hmm = ch_hmm } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 47a340b..4627854 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -13,19 +13,19 @@ include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_seque workflow REMOVE_REDUNDANCY { take: - full_msa // tuple val(meta), path(fas) - fasta // tuple val(meta), path(fasta) - hmm // tuple val(meta), path(hmm) + msa // tuple val(meta), path(fas) + fasta // tuple val(meta), path(fasta) + hmm // tuple val(meta), path(hmm) main: ch_versions = Channel.empty() if (params.remove_family_redundancy) { - full_msa + msa .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_full_msa } - EXTRACT_FAMILY_REPS( ch_full_msa ) + .set { ch_msa } + EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) hmm @@ -99,10 +99,10 @@ workflow REMOVE_REDUNDANCY { ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) - full_msa = ALIGN_SEQUENCES.out.alignments + msa = ALIGN_SEQUENCES.out.alignments } emit: versions = ch_versions - full_msa = full_msa + msa = msa } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index a2c599e..793f0b2 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -64,16 +64,16 @@ workflow PROTEINFAMILIES { ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing - REMOVE_REDUNDANCY.out.full_msa + REMOVE_REDUNDANCY.out.msa .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_full_msa } + .set { ch_msa } - EXTRACT_FAMILY_REPS( ch_full_msa ) + EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) // From 0f2bda32b9a28cac405a7948b08f4e6ae806e31a Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 17 Dec 2024 06:29:30 +0000 Subject: [PATCH 060/139] minor reformats --- nextflow_schema.json | 2 +- subworkflows/local/generate_families.nf | 5 ++--- subworkflows/local/remove_redundancy.nf | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 274991b..8249dba 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -262,7 +262,7 @@ }, "recruit_sequences_with_models": { "type": "boolean", - "description": "Boolean whether to recruit extra sequences from the input fasta file, using the family HMMs, to refine the alignments", + "description": "Set to true to recruit additional sequences from the input FASTA file using the family HMMs to refine the alignments", "default": true, "fa_icon": "fas fa-check-square", "hidden": true diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 0d76ed5..ad8b666 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -22,9 +22,8 @@ workflow GENERATE_FAMILIES { fasta_chunks .transpose() - .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0] - [ [id: meta.id, chunk: baseName], file ] + .map { meta, file_path -> + [ [id: meta.id, chunk: file(file_path).baseName], file_path ] } .set { ch_fasta } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 4627854..40ae3c9 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -75,8 +75,8 @@ workflow REMOVE_REDUNDANCY { fasta .transpose() .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] - [ [id: meta.id, chunk: baseName], file ] + def chunk_num = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] + [ [id: meta.id, chunk: chunk_num], file ] } .set { fasta } } From ec73bfa498cf3bdedeb3a6727ab422a9e3f1e6ff Mon Sep 17 00:00:00 2001 From: Martin Beracochea Date: Fri, 20 Dec 2024 16:21:03 +0000 Subject: [PATCH 061/139] This changeset included a WIP update workflow. This has to be tested and validated. High level things to test: - Overall logic of the update - Publish files from the updates - Check that the creation workflow wasn't broken by this I was using a local set of HMMs and MSAs for testing, pretty much fake data. But the pipeline worked, both ways (create and update). I left some TODOs and FIXMEs in the code on thigs we should review. There are many changes on python scripts because I ran ruff and black, which are linting and formatting tools. --- assets/schema_input.json | 12 + bin/chunk_clusters.py | 15 +- bin/clip_ends.py | 35 ++- bin/extract_family_reps.py | 54 +++-- bin/filter_non_redundant_hmms.py | 9 +- bin/filter_recruited.py | 40 ++-- bin/get_nonhits_seqs.py | 64 ++++++ bin/remove_redundant_fams.py | 55 +++-- bin/remove_redundant_seqs.py | 20 +- conf/modules.config | 21 +- modules.json | 69 ++++-- modules/local/concat_hmms.nf | 29 --- modules/local/get_nonhits_seqs.nf | 35 +++ modules/nf-core/cat/cat/environment.yml | 5 + modules/nf-core/cat/cat/main.nf | 78 +++++++ modules/nf-core/cat/cat/meta.yml | 43 ++++ modules/nf-core/cat/cat/tests/main.nf.test | 191 ++++++++++++++++ .../nf-core/cat/cat/tests/main.nf.test.snap | 147 ++++++++++++ .../cat/tests/nextflow_unzipped_zipped.config | 6 + .../cat/tests/nextflow_zipped_unzipped.config | 8 + modules/nf-core/cat/cat/tests/tags.yml | 2 + modules/nf-core/seqkit/seq/environment.yml | 7 + modules/nf-core/seqkit/seq/main.nf | 63 ++++++ modules/nf-core/seqkit/seq/meta.yml | 51 +++++ modules/nf-core/seqkit/seq/seqkit-seq.diff | 21 ++ modules/nf-core/seqkit/seq/tests/main.nf.test | 145 ++++++++++++ .../seqkit/seq/tests/main.nf.test.snap | 134 +++++++++++ .../nf-core/seqkit/seq/tests/nextflow.config | 3 + modules/nf-core/seqkit/seq/tests/tags.yml | 2 + subworkflows/local/process_families.nf | 69 ++++++ subworkflows/local/remove_redundancy.nf | 64 +++--- workflows/proteinfamilies.nf | 211 ++++++++++++------ 32 files changed, 1491 insertions(+), 217 deletions(-) create mode 100755 bin/get_nonhits_seqs.py delete mode 100644 modules/local/concat_hmms.nf create mode 100644 modules/local/get_nonhits_seqs.nf create mode 100644 modules/nf-core/cat/cat/environment.yml create mode 100644 modules/nf-core/cat/cat/main.nf create mode 100644 modules/nf-core/cat/cat/meta.yml create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap create mode 100644 modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config create mode 100644 modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config create mode 100644 modules/nf-core/cat/cat/tests/tags.yml create mode 100644 modules/nf-core/seqkit/seq/environment.yml create mode 100644 modules/nf-core/seqkit/seq/main.nf create mode 100644 modules/nf-core/seqkit/seq/meta.yml create mode 100644 modules/nf-core/seqkit/seq/seqkit-seq.diff create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test.snap create mode 100644 modules/nf-core/seqkit/seq/tests/nextflow.config create mode 100644 modules/nf-core/seqkit/seq/tests/tags.yml create mode 100644 subworkflows/local/process_families.nf diff --git a/assets/schema_input.json b/assets/schema_input.json index 96ff7d1..c05dbd5 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -19,6 +19,18 @@ "exists": true, "pattern": "^\\S+\\.f(ast)?a(\\.gz)?$", "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" + }, + "existing_hmms": { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing existing protein family HMM models. These models will be used to update the corresponding families." + }, + "existing_msas": { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process." } }, "required": ["sample", "fasta"] diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index c699ac5..8ede06c 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -4,8 +4,10 @@ import os import argparse from collections import defaultdict +import csv from Bio import SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -42,16 +44,22 @@ def parse_args(args=None): ) return parser.parse_args(args) + def collect_clusters(clustering_file, threshold): # Collect clusters with a size threshold, storing in a defaultdict clusters = defaultdict(list) + with open(clustering_file) as f: - for line in f: - rep, member = line.strip().split("\t") + csv_reader = csv.reader(f, delimiter="\t") + for row in csv_reader: + rep, member = row clusters[rep].append(member) # Filter clusters by threshold - return {rep: members for rep, members in clusters.items() if len(members) >= threshold} + return { + rep: members for rep, members in clusters.items() if len(members) >= threshold + } + def main(args=None): args = parse_args(args) @@ -73,5 +81,6 @@ def main(args=None): SeqIO.write(record, fasta_out, "fasta") chunk_num += 1 + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/clip_ends.py b/bin/clip_ends.py index 630ab7c..da43dcb 100755 --- a/bin/clip_ends.py +++ b/bin/clip_ends.py @@ -6,6 +6,7 @@ from Bio import SeqIO from Bio.Seq import Seq + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -34,48 +35,64 @@ def parse_args(args=None): ) return parser.parse_args(args) + def read_fasta_to_matrix(file_path): records = list(SeqIO.parse(file_path, "fasta")) max_length = max(len(record.seq) for record in records) - matrix = np.zeros((len(records), max_length), dtype=np.dtype('U1')) + matrix = np.zeros((len(records), max_length), dtype=np.dtype("U1")) original_names = [] for i, record in enumerate(records): original_names.append(record.id) - matrix[i, :len(record.seq)] = list(str(record.seq)) + matrix[i, : len(record.seq)] = list(str(record.seq)) return matrix, original_names + def calculate_trim_positions(sequence_matrix, gap_threshold): - numeric_matrix = np.where(sequence_matrix == '-', 0, 1) + numeric_matrix = np.where(sequence_matrix == "-", 0, 1) num_rows = numeric_matrix.shape[0] column_sums = np.sum(numeric_matrix, axis=0) column_sums_percentage = column_sums / num_rows start_position = np.argmax(column_sums_percentage > gap_threshold) - end_position = len(column_sums_percentage) - np.argmax(column_sums_percentage[::-1] > gap_threshold) - 1 + end_position = ( + len(column_sums_percentage) + - np.argmax(column_sums_percentage[::-1] > gap_threshold) + - 1 + ) return start_position, end_position -def write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta): + +def write_trimmed_sequences( + sequence_matrix_trimmed, original_sequence_names, out_fasta +): trimmed_records = [] for i, sequence in enumerate(sequence_matrix_trimmed): - trimmed_sequence = ''.join(map(str, sequence)) + trimmed_sequence = "".join(map(str, sequence)) original_name = original_sequence_names[i] - trimmed_record = SeqIO.SeqRecord(Seq(trimmed_sequence), id=original_name, description="") + trimmed_record = SeqIO.SeqRecord( + Seq(trimmed_sequence), id=original_name, description="" + ) trimmed_records.append(trimmed_record) with open(out_fasta, "w") as output_fasta: SeqIO.write(trimmed_records, output_fasta, "fasta") + def trim_msa(alignment, gap_threshold, out_fasta): sequence_matrix, original_sequence_names = read_fasta_to_matrix(alignment) - start_position, end_position = calculate_trim_positions(sequence_matrix, gap_threshold) - sequence_matrix_trimmed = sequence_matrix[:, start_position:end_position+1] + start_position, end_position = calculate_trim_positions( + sequence_matrix, gap_threshold + ) + sequence_matrix_trimmed = sequence_matrix[:, start_position : end_position + 1] write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta) + def main(args=None): args = parse_args(args) trim_msa(args.alignment, args.gap_threshold, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index 88b5d41..675440a 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -9,6 +9,7 @@ from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -37,49 +38,76 @@ def parse_args(args=None): ) return parser.parse_args(args) + def extract_first_sequences(msa_folder, metadata_file, out_fasta): # Open the output FASTA file in write mode - with open(out_fasta, "w") as fasta_out, open(metadata_file, "w", newline="") as csv_out: + with open(out_fasta, "w") as fasta_out, open( + metadata_file, "w", newline="" + ) as csv_out: # Write custom metadata lines to the metadata file csv_out.write( - "# id: \"family_metadata\"\n" - "# section_name: \"Family Metadata\"\n" - "# description: \"Family metadata table containing family ids and sizes along with representative sequences, ids and lengths.\"\n" - "# format: \"csv\"\n" - "# plot_type: \"table\"\n" + '# id: "family_metadata"\n' + '# section_name: "Family Metadata"\n' + '# description: "Family metadata table containing family ids and sizes along with representative sequences, ids and lengths."\n' + '# format: "csv"\n' + '# plot_type: "table"\n' ) csv_writer = csv.writer(csv_out) # Write the CSV header - csv_writer.writerow(["Sample Name", "Family Id", "Size", "Representative Length", "Representative Id", "Sequence"]) + csv_writer.writerow( + [ + "Sample Name", + "Family Id", + "Size", + "Representative Length", + "Representative Id", + "Sequence", + ] + ) # Iterate over all files in the MSA folder for filename in os.listdir(msa_folder): filepath = os.path.join(msa_folder, filename) # Parse the MSA fasta file and extract the first sequence - with gzip.open(filepath, 'rt') if filepath.endswith('.gz') else open(filepath, 'r') as fasta_file: + with ( + gzip.open(filepath, "rt") + if filepath.endswith(".gz") + else open(filepath, "r") + ) as fasta_file: records = list(SeqIO.parse(fasta_file, "fasta")) family_size = len(records) if records: first_record = records[0] # Remove gaps from the sequence - cleaned_sequence = str(first_record.seq).replace("-", "").replace(".", "") + cleaned_sequence = ( + str(first_record.seq).replace("-", "").replace(".", "") + ) # Modify the ID to only include the part before the first space cleaned_id = first_record.id.split(" ")[0] # Create a new SeqRecord with the cleaned sequence and ID cleaned_record = SeqRecord( - Seq(cleaned_sequence), - id=cleaned_id, - description="" + Seq(cleaned_sequence), id=cleaned_id, description="" ) # Write the cleaned sequence to the FASTA file SeqIO.write(cleaned_record, fasta_out, "fasta") # Write the mapping to the CSV file family_name = os.path.splitext(os.path.splitext(filename)[0])[0] - csv_writer.writerow([family_name, family_name, family_size, len(cleaned_sequence), cleaned_id, cleaned_sequence]) + csv_writer.writerow( + [ + family_name, + family_name, + family_size, + len(cleaned_sequence), + cleaned_id, + cleaned_sequence, + ] + ) + def main(args=None): args = parse_args(args) extract_first_sequences(args.full_msa_folder, args.metadata, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/filter_non_redundant_hmms.py b/bin/filter_non_redundant_hmms.py index e48fcb9..1a626b8 100755 --- a/bin/filter_non_redundant_hmms.py +++ b/bin/filter_non_redundant_hmms.py @@ -5,6 +5,7 @@ import argparse import shutil + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -33,26 +34,30 @@ def parse_args(args=None): ) return parser.parse_args(args) + def filter_non_redundant_hmms(seqs, models, out_folder): seq_basenames = { os.path.basename(f).split(".")[0] - for f in os.listdir(seqs) if f.endswith('.fasta.gz') + for f in os.listdir(seqs) + if f.endswith(".fasta.gz") } # Iterate through the models folder and copy matching files for model_file in os.listdir(models): - if model_file.endswith('.hmm.gz'): + if model_file.endswith(".hmm.gz"): model_basename = os.path.basename(model_file).split(".")[0] if model_basename in seq_basenames: src = os.path.join(models, model_file) dst = os.path.join(out_folder, model_file) shutil.copy(src, dst) + def main(args=None): args = parse_args(args) os.makedirs(args.out_folder, exist_ok=True) filter_non_redundant_hmms(args.seqs, args.models, args.out_folder) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index 1594e48..eb9eec4 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -6,6 +6,7 @@ import gzip from Bio import AlignIO, SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -50,11 +51,12 @@ def parse_args(args=None): ) return parser.parse_args(args) + def filter_sequences(domtbl, length_threshold): filtered_sequences = [] - with gzip.open(domtbl, 'rt', encoding='utf-8') as file: + with gzip.open(domtbl, "rt", encoding="utf-8") as file: for line in file: - if line.startswith('#'): + if line.startswith("#"): continue # Skip comments columns = line.split() @@ -75,19 +77,26 @@ def filter_sequences(domtbl, length_threshold): return filtered_sequences + def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta): - base_filename = os.path.basename(alignment).split('.')[0] + base_filename = os.path.basename(alignment).split(".")[0] - with gzip.open(alignment, 'rt', encoding='utf-8') as file: + with gzip.open(alignment, "rt", encoding="utf-8") as file: alignment_data = AlignIO.read(file, "stockholm") - filtered_records = [record for record in alignment_data if record.id in filtered_sequences] + filtered_records = [ + record for record in alignment_data if record.id in filtered_sequences + ] for record in filtered_records: - ungapped_length = len(record.seq.replace('-', '')) + ungapped_length = len(record.seq.replace("-", "")) # Extract the part after the slash in the name (if present) - if '/' in record.id: - name, range_info = record.id.split('/') - start, end = map(int, range_info.split('-')) + if "/" in record.id: + ranges = record.id.split("/") + if len(ranges) > 2: + # FIXME: we need to adjust the workflow to handle these cases + continue + name, range_info = ranges + start, end = map(int, range_info.split("-")) # If the sequence starts at 1 and the end matches the ungapped length, remove the slash and range if start == 1 and end == ungapped_length: record.id = name @@ -95,25 +104,30 @@ def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) # Add the family name to the description field record.description = base_filename - with gzip.open(out_msa, 'wt') as gz_file: + with gzip.open(out_msa, "wt") as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") for record in filtered_records: record.letter_annotations = {} # Clear annotations - record.seq = record.seq.replace('-', '') + record.seq = record.seq.replace("-", "") - with gzip.open(out_fasta, 'wt') as gz_file: + with gzip.open(out_fasta, "wt") as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") print(f"Filtered alignment saved to {out_msa}") + def filter_recruited(alignment, domtbl, length_threshold, out_msa, out_fasta): filtered_sequences = filter_sequences(domtbl, length_threshold) filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) + def main(args=None): args = parse_args(args) - filter_recruited(args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta) + filter_recruited( + args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta + ) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/get_nonhits_seqs.py b/bin/get_nonhits_seqs.py new file mode 100755 index 0000000..cd30ac3 --- /dev/null +++ b/bin/get_nonhits_seqs.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +import sys +import argparse +import gzip +from Bio import SeqIO, SearchIO + + +def open_file(filename): + """Helper function to open both gzipped and regular files""" + if filename.endswith(".gz"): + return gzip.open(filename, "rt") + return open(filename, "r") + + +def main(): + parser = argparse.ArgumentParser( + description="Get the sequences that are missing from the hmmscan txt output table." + ) + parser.add_argument( + "-d", + "--hmmscantxt", + required=True, + metavar="FILE", + type=str, + help="The hmmsearch txt output (gzipped).", + ) + parser.add_argument( + "-f", + "--fasta", + required=True, + metavar="FILE", + type=str, + help="The FASTA (gzip or not) file containing all the sequences.", + ) + parser.add_argument( + "-o", + "--output", + required=True, + metavar="FILE", + type=str, + help="Output gzipped FASTA file path for sequences without matches.", + ) + args = parser.parse_args() + + # Collect sequence IDs with matches + hit_sequence_ids = set() + with gzip.open(args.hmmscantxt, "rt") as domtable_fh: + for hmmer_result in SearchIO.parse(domtable_fh, "hmmer3-text"): + hit_sequence_ids.add(hmmer_result.id) + + with open_file(args.fasta) as fasta_fl, gzip.open( + args.output, "wt" + ) as fasta_out_fl: + + output_sequences = [] + for record in SeqIO.parse(fasta_fl, "fasta"): + if record.id not in hit_sequence_ids: + output_sequences = [record] + + SeqIO.write(output_sequences, fasta_out_fl, "fasta") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index 22d70e2..5da880a 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -6,6 +6,7 @@ import argparse import shutil + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -50,46 +51,56 @@ def parse_args(args=None): ) return parser.parse_args(args) + def remove_self_hits(domtbl_df, representative_to_family): domtbl_df["target name"] = domtbl_df["target name"].map(representative_to_family) domtbl_df = domtbl_df[domtbl_df["target name"] != domtbl_df["query name"]] return domtbl_df + def filter_by_length(domtbl_df, length_threshold): - domtbl_df = domtbl_df[(domtbl_df["env to"] - domtbl_df["env from"] + 1) / domtbl_df["qlen"] >= length_threshold] + domtbl_df = domtbl_df[ + (domtbl_df["env to"] - domtbl_df["env from"] + 1) / domtbl_df["qlen"] + >= length_threshold + ] return domtbl_df + def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_folder): mapping_df = pd.read_csv( - mapping, - comment='#', - usecols=["Family Id", "Size", "Representative Id"] + mapping, comment="#", usecols=["Family Id", "Size", "Representative Id"] ) domtbl_df = pd.read_csv( - domtbl, - sep=r'\s+', - comment='#', - header=None, - usecols=[0, 3, 5, 19, 20] - ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 19: "env from", 20: "env to"}) - - representative_to_family = dict(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) + domtbl, sep=r"\s+", comment="#", header=None, usecols=[0, 3, 5, 19, 20] + ).rename( + columns={ + 0: "target name", + 3: "query name", + 5: "qlen", + 19: "env from", + 20: "env to", + } + ) + + representative_to_family = dict( + zip(mapping_df["Representative Id"], mapping_df["Family Id"]) + ) family_to_size = dict(zip(mapping_df["Family Id"], mapping_df["Size"])) domtbl_df = remove_self_hits(domtbl_df, representative_to_family) domtbl_df = filter_by_length(domtbl_df, length_threshold) domtbl_df = domtbl_df.drop(columns=["qlen", "env from", "env to"]) - domtbl_df['query size'] = domtbl_df['query name'].map(family_to_size) - domtbl_df['target size'] = domtbl_df['target name'].map(family_to_size) + domtbl_df["query size"] = domtbl_df["query name"].map(family_to_size) + domtbl_df["target size"] = domtbl_df["target name"].map(family_to_size) redundant_fam_names = set() for _, row in domtbl_df.iterrows(): - if row['query size'] < row['target size']: - redundant_fam_names.add(row['query name']) + if row["query size"] < row["target size"]: + redundant_fam_names.add(row["query name"]) else: - redundant_fam_names.add(row['target name']) + redundant_fam_names.add(row["target name"]) for file_name in os.listdir(fasta_folder): base_name = os.path.basename(file_name).split(".")[0] @@ -101,11 +112,19 @@ def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_f if os.path.isfile(source_file): shutil.copy2(source_file, destination_file) + def main(args=None): args = parse_args(args) os.makedirs(args.out_folder, exist_ok=True) - remove_redundant_fams(args.mapping, args.domtbl, args.fasta_folder, args.length_threshold, args.out_folder) + remove_redundant_fams( + args.mapping, + args.domtbl, + args.fasta_folder, + args.length_threshold, + args.out_folder, + ) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/remove_redundant_seqs.py b/bin/remove_redundant_seqs.py index 3385134..c1fb66c 100755 --- a/bin/remove_redundant_seqs.py +++ b/bin/remove_redundant_seqs.py @@ -6,6 +6,7 @@ import csv from Bio import SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -34,29 +35,36 @@ def parse_args(args=None): ) return parser.parse_args(args) + def extract_rep_sequences(clustering, sequences, out_fasta): # Read the clustering file and extract unique values from column 1 unique_representatives = set() - with open(clustering, 'r') as tsv_file: - reader = csv.reader(tsv_file, delimiter='\t') + with open(clustering, "r") as tsv_file: + reader = csv.reader(tsv_file, delimiter="\t") for row in reader: if row: # Ensure the row is not empty unique_representatives.add(row[0]) # Read the sequences file and filter for representatives matching_records = [] - with gzip.open(sequences, 'rt') if sequences.endswith('.gz') else open(sequences, 'r') as fasta_file: - for record in SeqIO.parse(fasta_file, 'fasta'): + with ( + gzip.open(sequences, "rt") + if sequences.endswith(".gz") + else open(sequences, "r") + ) as fasta_file: + for record in SeqIO.parse(fasta_file, "fasta"): if record.id in unique_representatives: matching_records.append(record) # Write the matching sequences to the output fasta file - with open(out_fasta, 'w') as output_file: - SeqIO.write(matching_records, output_file, 'fasta') + with open(out_fasta, "w") as output_file: + SeqIO.write(matching_records, output_file, "fasta") + def main(args=None): args = parse_args(args) extract_rep_sequences(args.clustering, args.sequences, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index c542fae..2e5547a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,10 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: 'SEQKIT_SEQ' { + ext.args = "--remove-gaps" + } + withName: 'MMSEQS_CREATEDB' { publishDir = [ path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_createdb/" }, @@ -234,14 +238,15 @@ process { ] } - withName: 'CONCAT_HMMS' { - publishDir = [ - path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, - mode: params.publish_dir_mode, - enabled: false, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + // FIXME: We need to handle the CAT_CAT ones now, in the update we cat hmms and msas + // withName: 'CAT_CAT' { + // publishDir = [ + // path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, + // mode: params.publish_dir_mode, + // enabled: false, + // saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + // ] + // } withName: 'REMOVE_REDUNDANT_FAMS' { publishDir = [ diff --git a/modules.json b/modules.json index 625761e..af4f0a7 100644 --- a/modules.json +++ b/modules.json @@ -5,58 +5,93 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "cat/cat": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "seqkit/seq": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/seqkit/seq/seqkit-seq.diff" } } }, @@ -65,20 +100,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/local/concat_hmms.nf b/modules/local/concat_hmms.nf deleted file mode 100644 index fe9acf7..0000000 --- a/modules/local/concat_hmms.nf +++ /dev/null @@ -1,29 +0,0 @@ -process CONCAT_HMMS { - tag "$meta.id" - label 'process_single' - - conda "conda-forge::sed=4.7" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" - - input: - tuple val(meta), path(hmm, stageAs: "hmm/*") - - output: - tuple val(meta), path("${meta.id}.hmm.gz"), emit: hmm - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - """ - zcat hmm/*.hmm.gz | gzip > ${meta.id}.hmm.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/get_nonhits_seqs.nf b/modules/local/get_nonhits_seqs.nf new file mode 100644 index 0000000..5619b50 --- /dev/null +++ b/modules/local/get_nonhits_seqs.nf @@ -0,0 +1,35 @@ +process GET_NONHITS_SEQS { + + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta), path(fasta), path(hits_txt_table) + + output: + tuple val(meta), path("*.fasta.gz"), emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + get_nonhits_seqs.py \\ + --fasta ${fasta} \\ + --hmmscantxt ${hits_txt_table} \\ + --output ${prefix}.fasta.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml new file mode 100644 index 0000000..9b01c86 --- /dev/null +++ b/modules/nf-core/cat/cat/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf new file mode 100644 index 0000000..2862c64 --- /dev/null +++ b/modules/nf-core/cat/cat/main.nf @@ -0,0 +1,78 @@ +process CAT_CAT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : + 'biocontainers/pigz:2.3.4' }" + + input: + tuple val(meta), path(files_in) + + output: + tuple val(meta), path("${prefix}"), emit: file_out + 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 file_list = files_in.collect { it.toString() } + + // choose appropriate concatenation tool depending on input and output format + + // | input | output | command1 | command2 | + // |-----------|------------|----------|----------| + // | gzipped | gzipped | cat | | + // | ungzipped | ungzipped | cat | | + // | gzipped | ungzipped | zcat | | + // | ungzipped | gzipped | cat | pigz | + + // Use input file ending as default + prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" + out_zip = prefix.endsWith('.gz') + in_zip = file_list[0].endsWith('.gz') + command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' + command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + $command1 \\ + $args \\ + ${file_list.join(' ')} \\ + $command2 \\ + > ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ + + stub: + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + touch $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ +} + +// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz +def getFileSuffix(filename) { + def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ + return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) +} diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml new file mode 100644 index 0000000..81778a0 --- /dev/null +++ b/modules/nf-core/cat/cat/meta.yml @@ -0,0 +1,43 @@ +name: cat_cat +description: A module for concatenation of gzipped or uncompressed files +keywords: + - concatenate + - gzip + - cat +tools: + - cat: + description: Just concatenation + documentation: https://man7.org/linux/man-pages/man1/cat.1.html + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" +output: + - file_out: + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@erikrikarddaniel" + - "@FriederikeHanssen" +maintainers: + - "@erikrikarddaniel" + - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test new file mode 100644 index 0000000..9cb1617 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -0,0 +1,191 @@ +nextflow_process { + + name "Test Process CAT_CAT" + script "../main.nf" + process "CAT_CAT" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/cat" + + test("test_cat_name_conflict") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'genome', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("test_cat_unzipped_unzipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test_cat_zipped_zipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_zipped_unzipped") { + config './nextflow_zipped_unzipped.config' + + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_cat_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_one_file_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap new file mode 100644 index 0000000..b7623ee --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -0,0 +1,147 @@ +{ + "test_cat_unzipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:18.500464399" + }, + "test_cat_zipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:49.642741302" + }, + "test_cat_zipped_zipped": { + "content": [ + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" + }, + "test_cat_one_file_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" + }, + "test_cat_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config new file mode 100644 index 0000000..ec26b0f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config @@ -0,0 +1,6 @@ + +process { + withName: CAT_CAT { + ext.prefix = 'cat.txt.gz' + } +} diff --git a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config new file mode 100644 index 0000000..fbc7978 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config @@ -0,0 +1,8 @@ + +process { + + withName: CAT_CAT { + ext.prefix = 'cat.txt' + } + +} diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml new file mode 100644 index 0000000..37b578f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/tags.yml @@ -0,0 +1,2 @@ +cat/cat: + - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml new file mode 100644 index 0000000..4f8058a --- /dev/null +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::seqkit=2.8.1" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf new file mode 100644 index 0000000..529b3a4 --- /dev/null +++ b/modules/nf-core/seqkit/seq/main.nf @@ -0,0 +1,63 @@ +process SEQKIT_SEQ { + tag "$meta.id" + label 'process_low' + // File IO can be a bottleneck. See: https://bioinf.shenwei.me/seqkit/usage/#parallelization-of-cpu-intensive-jobs + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': + 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" + + input: + tuple val(meta), path(fastx) + + output: + tuple val(meta), path("${prefix}.*") , emit: fastx + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fasta" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + def call_gzip = extension.endsWith('.gz') ? "| gzip -c $args2" : '' + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + seqkit \\ + seq \\ + --threads $task.cpus \\ + $args \\ + $fastx \\ + $call_gzip \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ +} diff --git a/modules/nf-core/seqkit/seq/meta.yml b/modules/nf-core/seqkit/seq/meta.yml new file mode 100644 index 0000000..7d32aba --- /dev/null +++ b/modules/nf-core/seqkit/seq/meta.yml @@ -0,0 +1,51 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "seqkit_seq" +description: Transforms sequences (extract ID, filter by length, remove gaps, reverse + complement...) +keywords: + - genomics + - fasta + - fastq + - transform + - filter + - gaps + - complement +tools: + - "seqkit": + description: "A cross-platform and ultrafast toolkit for FASTA/Q file manipulation" + homepage: "https://bioinf.shenwei.me/seqkit/" + documentation: "https://bioinf.shenwei.me/seqkit/usage/" + tool_dev_url: "https://github.com/shenwei356/seqkit" + doi: "10.1371/journal.pone.0163962" + licence: ["MIT"] + identifier: biotools:seqkit +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastx: + type: file + description: Input fasta/fastq file + pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" +output: + - fastx: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - ${prefix}.*: + type: file + description: Output fasta/fastq file + pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/seqkit/seq/seqkit-seq.diff b/modules/nf-core/seqkit/seq/seqkit-seq.diff new file mode 100644 index 0000000..ef9993d --- /dev/null +++ b/modules/nf-core/seqkit/seq/seqkit-seq.diff @@ -0,0 +1,21 @@ +Changes in component 'nf-core/seqkit/seq' +'modules/nf-core/seqkit/seq/environment.yml' is unchanged +Changes in 'seqkit/seq/main.nf': +--- modules/nf-core/seqkit/seq/main.nf ++++ modules/nf-core/seqkit/seq/main.nf +@@ -22,7 +22,7 @@ + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" +- def extension = "fastq" ++ def extension = "fasta" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + +'modules/nf-core/seqkit/seq/meta.yml' is unchanged +'modules/nf-core/seqkit/seq/tests/tags.yml' is unchanged +'modules/nf-core/seqkit/seq/tests/nextflow.config' is unchanged +'modules/nf-core/seqkit/seq/tests/main.nf.test.snap' is unchanged +'modules/nf-core/seqkit/seq/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test b/modules/nf-core/seqkit/seq/tests/main.nf.test new file mode 100644 index 0000000..9fd1c08 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test @@ -0,0 +1,145 @@ +nextflow_process { + + name "Test Process SEQKIT_SEQ" + script "../main.nf" + process "SEQKIT_SEQ" + config './nextflow.config' + + tag "modules" + tag "modules_nfcore" + tag "seqkit" + tag "seqkit/seq" + + test("sarscov2-genome_fasta") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-genome_fasta_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-test_1_fastq_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error") { + when { + process { + """ + input[0] = [ + [ id:'test_1' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + + test("sarscov2-genome_fasta-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap new file mode 100644 index 0000000..e691096 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "sarscov2-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:52:18.220051903" + }, + "sarscov2-test_1_fastq_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:55.607826581" + }, + "sarscov2-genome_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:27.717072933" + }, + "sarscov2-genome_fasta_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:37.917560104" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqkit/seq/tests/nextflow.config b/modules/nf-core/seqkit/seq/tests/nextflow.config new file mode 100644 index 0000000..d8e3c66 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args2 = '-n' +} diff --git a/modules/nf-core/seqkit/seq/tests/tags.yml b/modules/nf-core/seqkit/seq/tests/tags.yml new file mode 100644 index 0000000..5eeca7e --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/tags.yml @@ -0,0 +1,2 @@ +seqkit/seq: + - "modules/nf-core/seqkit/seq/**" diff --git a/subworkflows/local/process_families.nf b/subworkflows/local/process_families.nf new file mode 100644 index 0000000..76a9bb1 --- /dev/null +++ b/subworkflows/local/process_families.nf @@ -0,0 +1,69 @@ +include { CHUNK_CLUSTERS } from '../../modules/local/chunk_clusters.nf' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps' + +include { EXECUTE_CLUSTERING } from './execute_clustering' +include { GENERATE_FAMILIES } from './generate_families' +include { REMOVE_REDUNDANCY } from './remove_redundancy' + + +workflow PROCESS_FAMILIES { + take: + ch_sequences // channel: [meta, sequences] + + main: + ch_versions = Channel.empty() + + // Avoid clustering or generating families with less sequences than params.cluster_size_threshold + // TODO: review this + ch_sequences = ch_sequences.filter { _map, seqs -> + { + seqs.countFasta() >= params.cluster_size_threshold + } + } + + // Clustering + EXECUTE_CLUSTERING(ch_sequences) + ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) + + // Join together to ensure in sync + ch_input_for_cluster_chunking = ch_sequences + .join(EXECUTE_CLUSTERING.out.clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [meta, seqs] + clusters: [meta, clusters] + } + + CHUNK_CLUSTERS( + ch_input_for_cluster_chunking.clusters, + ch_input_for_cluster_chunking.seqs, + params.cluster_size_threshold, + ) + ch_versions = ch_versions.mix(CHUNK_CLUSTERS.out.versions) + + // Multiple sequence alignment and family generation + GENERATE_FAMILIES( + ch_sequences, + CHUNK_CLUSTERS.out.fasta_chunks, + ) + ch_versions = ch_versions.mix(GENERATE_FAMILIES.out.versions) + + // Remove redundant sequences and families + REMOVE_REDUNDANCY( + GENERATE_FAMILIES.out.full_msa, + GENERATE_FAMILIES.out.fasta, + GENERATE_FAMILIES.out.hmm, + ) + ch_versions = ch_versions.mix(REMOVE_REDUNDANCY.out.versions) + + // Post-processing + ch_full_msa = REMOVE_REDUNDANCY.out.full_msa + .map { meta, aln -> [[id: meta.id], aln] } + .groupTuple(by: 0) + + EXTRACT_FAMILY_REPS(ch_full_msa) + ch_versions = ch_versions.mix(EXTRACT_FAMILY_REPS.out.versions) + + emit: + family_reps = EXTRACT_FAMILY_REPS.out.map + versions = ch_versions +} diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 47a340b..3b8527f 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,9 +2,9 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' -include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { CAT_CAT } from '../../modules/nf-core/cat/cat' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' include { FILTER_NON_REDUNDANT_HMMS } from '../../modules/local/filter_non_redundant_hmms.nf' include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' @@ -22,29 +22,31 @@ workflow REMOVE_REDUNDANCY { if (params.remove_family_redundancy) { full_msa - .map { meta, aln -> [ [id: meta.id], aln ] } + .map { meta, aln -> [[id: meta.id], aln] } .groupTuple(by: 0) .set { ch_full_msa } - EXTRACT_FAMILY_REPS( ch_full_msa ) - ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + EXTRACT_FAMILY_REPS(ch_full_msa) + ch_versions = ch_versions.mix(EXTRACT_FAMILY_REPS.out.versions) hmm - .map { meta, model -> [ [id: meta.id], model ] } + .map { meta, model -> [[id: meta.id], model] } .groupTuple(by: 0) .set { ch_hmm } - CONCAT_HMMS( ch_hmm ) - ch_versions = ch_versions.mix( CONCAT_HMMS.out.versions ) - CONCAT_HMMS.out.hmm + CAT_CAT(ch_hmm) + + ch_versions = ch_versions.mix(CAT_CAT.out.versions) + + CAT_CAT.out.file_out .combine(EXTRACT_FAMILY_REPS.out.fasta, by: 0) - .map { meta, model, seqs -> [ meta, model, seqs, false, false, true ] } + .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + HMMER_HMMSEARCH(ch_input_for_hmmsearch) + ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) fasta - .map{ meta, fas -> [ [id: meta.id], fas ] } + .map { meta, fas -> [[id: meta.id], fas] } .groupTuple(by: 0) .set { fasta } @@ -53,52 +55,52 @@ workflow REMOVE_REDUNDANCY { .join(HMMER_HMMSEARCH.out.domain_summary) .join(fasta) .multiMap { meta, map, domtbl, seqs -> - map: [ meta, map ] - domtbl: [ meta, domtbl ] - seqs: [ meta, seqs ] + map: [meta, map] + domtbl: [meta, domtbl] + seqs: [meta, seqs] } - REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) + REMOVE_REDUNDANT_FAMS(ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold) + ch_versions = ch_versions.mix(REMOVE_REDUNDANT_FAMS.out.versions) fasta = REMOVE_REDUNDANT_FAMS.out.fasta // Join together to ensure in sync ch_input_for_hmm_filtering = fasta .join(ch_hmm) .multiMap { meta, seqs, models -> - seqs: [ meta, seqs ] - models: [ meta, models ] + seqs: [meta, seqs] + models: [meta, models] } - FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) - ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) + FILTER_NON_REDUNDANT_HMMS(ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models) + ch_versions = ch_versions.mix(FILTER_NON_REDUNDANT_HMMS.out.versions) fasta .transpose() .map { meta, file -> def baseName = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] - [ [id: meta.id, chunk: baseName], file ] + [[id: meta.id, chunk: baseName], file] } .set { fasta } } if (params.remove_sequence_redundancy) { - EXECUTE_CLUSTERING( fasta ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + EXECUTE_CLUSTERING(fasta) + ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv // Join together to ensure in sync ch_input_for_seq_removal = fasta .join(clustering_tsv) .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] + seqs: [meta, seqs] + clusters: [meta, clusters] } - REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + REMOVE_REDUNDANT_SEQS(ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs) + ch_versions = ch_versions.mix(REMOVE_REDUNDANT_SEQS.out.versions) - ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) - ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + ALIGN_SEQUENCES(REMOVE_REDUNDANT_SEQS.out.fasta) + ch_versions = ch_versions.mix(ALIGN_SEQUENCES.out.versions) full_msa = ALIGN_SEQUENCES.out.alignments } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index a2c599e..df9cce5 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -3,12 +3,11 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters.nf' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-schema' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { MULTIQC } from '../modules/nf-core/multiqc/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -19,14 +18,20 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' -include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' -include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' +include { PROCESS_FAMILIES as PROCESS_FAMILIES_NEW } from '../subworkflows/local/process_families' +include { PROCESS_FAMILIES as PROCESS_FAMILIES_UPDATE } from '../subworkflows/local/process_families' // // MODULE: Local to the pipeline // -include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' +include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' +include { CAT_CAT as CAT_HMMS } from '../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_MSAS } from '../modules/nf-core/cat/cat/main' +include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../modules/local/extract_family_reps' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../modules/local/extract_family_reps' +include { GET_NONHITS_SEQS } from '../modules/local/get_nonhits_seqs' +include { FILTER_RECRUITED } from '../modules/local/filter_recruited' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -35,46 +40,110 @@ include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' */ workflow PROTEINFAMILIES { - take: ch_samplesheet // channel: samplesheet read in from --input + main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // Clustering - EXECUTE_CLUSTERING( ch_samplesheet ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv - - // Join together to ensure in sync - ch_input_for_cluster_chunking = ch_samplesheet - .join(clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] + ch_samplesheet_for_create = Channel.empty() + ch_samplesheet_for_update = Channel.empty() + + + ch_samplesheet + .branch { _meta, _fasta, existing_hmms, existing_msas -> + to_create: !existing_hmms?.size() && !existing_msas?.size() + to_update: existing_hmms?.size() && existing_msas?.size() } + .set { + branch_result + } + + ch_family_reps = Channel.empty() + + /************************************/ + /* Splitting the samplesheet into 2 */ + /* - Entries to create new families */ + /* (they only have sequences) */ + /* - Entries to update existing */ + /* families (existing HMM models */ + /* and MSAs) */ + /************************************/ + ch_samplesheet_for_create = branch_result.to_create.map { meta, fasta, _existing_hmms, _existing_msas -> [meta, fasta] } + ch_samplesheet_for_update = branch_result.to_update + + /**********************/ + /* UPDATE SUBWORKFLOW */ + /**********************/ + if (branch_result.to_update) { + + // Squeeze the hmm models into a single file + CAT_HMMS( + ch_samplesheet_for_update.map { meta, _fasta, existing_hmms, _existing_msas -> + [meta, file("${existing_hmms}/*.{hmm,hmm.gz}")] + } + ) + + // Prep the sequences to search them against the HMM concatenated model of families // + ch_samplesheet_for_update = ch_samplesheet_for_update + .join( + CAT_HMMS.out.file_out + ) + .map { meta, fasta, _existing_hmms, existing_msas, concatenated_hmm -> + [meta, fasta, concatenated_hmm, existing_msas] + } + + HMMER_HMMSEARCH( + ch_samplesheet_for_update.map { meta, fasta, concatenated_hmm, _existing_msas -> + [meta, concatenated_hmm, fasta, false, false, true] + } + ) + + // We only keep those sequences that match the HMM model with the families to update + GET_NONHITS_SEQS( + ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) + ) + ch_versions = ch_versions.mix(GET_NONHITS_SEQS.out.versions) + + FILTER_RECRUITED( + HMMER_HMMSEARCH.out.alignments, + HMMER_HMMSEARCH.out.domain_summary, + params.hmmsearch_query_length_threshold, + ) + ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + + // Get the sequences from the MSAs + CAT_MSAS( + ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas -> + [meta, file("${existing_msas}/*.{aln,aln.gz}")] + } + ) + ch_versions = ch_versions.mix(CAT_MSAS.out.versions) + + // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta + SEQKIT_SEQ(CAT_MSAS.out.file_out) + ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) - CHUNK_CLUSTERS( ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold ) - ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) + // Process existing families + PROCESS_FAMILIES_UPDATE( + SEQKIT_SEQ.out.fastx + ) + ch_versions = ch_versions.mix(PROCESS_FAMILIES_UPDATE.out.versions) - // Multiple sequence alignment - GENERATE_FAMILIES( ch_samplesheet, CHUNK_CLUSTERS.out.fasta_chunks ) - ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) + ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_UPDATE.out.family_reps) - // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.full_msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + // Process new families + ch_samplesheet_for_create = ch_samplesheet_for_create.mix(GET_NONHITS_SEQS.out.fasta) + } - // Post-processing - REMOVE_REDUNDANCY.out.full_msa - .map { meta, aln -> [ [id: meta.id], aln ] } - .groupTuple(by: 0) - .set { ch_full_msa } + PROCESS_FAMILIES_NEW( + ch_samplesheet_for_create + ) + ch_versions = ch_versions.mix(PROCESS_FAMILIES_NEW.out.versions) - EXTRACT_FAMILY_REPS( ch_full_msa ) - ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_NEW.out.family_reps) // // Collate and save software versions @@ -82,61 +151,61 @@ workflow PROTEINFAMILIES { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'proteinfamilies_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'proteinfamilies_software_' + 'mqc_' + 'versions.yml', sort: true, - newLine: true - ).set { ch_collated_versions } - + newLine: true, + ) + .set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") + ch_multiqc_config = Channel.fromPath( + "${projectDir}/assets/multiqc_config.yml", + checkIfExists: true + ) + ch_multiqc_custom_config = params.multiqc_config + ? Channel.fromPath(params.multiqc_config, checkIfExists: true) + : Channel.empty() + ch_multiqc_logo = params.multiqc_logo + ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) + : Channel.empty() + + summary_params = paramsSummaryMap( + workflow, + parameters_schema: "nextflow_schema.json" + ) ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml') + ) + ch_multiqc_custom_methods_description = params.multiqc_methods_description + ? file(params.multiqc_methods_description, checkIfExists: true) + : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description) + ) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( name: 'methods_description_mqc.yaml', - sort: true + sort: true, ) ) - ch_multiqc_files = ch_multiqc_files.mix(EXTRACT_FAMILY_REPS.out.map.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_family_reps.collect { it[1] }.ifEmpty([])) - MULTIQC ( + MULTIQC( ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), [], - [] + [], ) - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] - + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ From 6d1083b3e8ad1c88ab45b7ed1ab2af4e8090ae42 Mon Sep 17 00:00:00 2001 From: Martin Beracochea Date: Sun, 22 Dec 2024 22:39:58 +0000 Subject: [PATCH 062/139] Fix a missing bit in the update The code wasn't include the matches on the update --- workflows/proteinfamilies.nf | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index df9cce5..c3337f0 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -27,6 +27,7 @@ include { PROCESS_FAMILIES as PROCESS_FAMILIES_UPDATE } from '../subwork include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' include { CAT_CAT as CAT_HMMS } from '../modules/nf-core/cat/cat/main' include { CAT_CAT as CAT_MSAS } from '../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_SEQS } from '../modules/nf-core/cat/cat/main' include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../modules/local/extract_family_reps' include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../modules/local/extract_family_reps' @@ -79,6 +80,8 @@ workflow PROTEINFAMILIES { /**********************/ if (branch_result.to_update) { + // TODO: check that the HMMs and the MSAs match // + // Squeeze the hmm models into a single file CAT_HMMS( ch_samplesheet_for_update.map { meta, _fasta, existing_hmms, _existing_msas -> @@ -101,7 +104,8 @@ workflow PROTEINFAMILIES { } ) - // We only keep those sequences that match the HMM model with the families to update + // We only keep those sequences that match the HMM models with the families to update, the seqs that don't match + // are sent to the "create families mode" GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) @@ -126,9 +130,23 @@ workflow PROTEINFAMILIES { SEQKIT_SEQ(CAT_MSAS.out.file_out) ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) + // Add the sequences that match with the seqs from the MSAs + // TOOD: this is untested + CAT_SEQS( + SEQKIT_SEQ.out.fastx.join( + FILTER_RECRUITED.out.fasta, + by: [0] + ).map { meta, msas_fasta, filtered_fastas -> + [ + [meta, [msas_fasta, filtered_fastas]] + ] + } + ) + ch_versions = ch_versions.mix(CAT_SEQS.out.versions) + // Process existing families PROCESS_FAMILIES_UPDATE( - SEQKIT_SEQ.out.fastx + CAT_SEQS.out.file_out ) ch_versions = ch_versions.mix(PROCESS_FAMILIES_UPDATE.out.versions) From 5ab2ce6d700e32d07e6a0a2885bdcde0c20bb49c Mon Sep 17 00:00:00 2001 From: Martin Beracochea Date: Fri, 20 Dec 2024 16:21:03 +0000 Subject: [PATCH 063/139] This changeset included a WIP update workflow. This has to be tested and validated. High level things to test: - Overall logic of the update - Publish files from the updates - Check that the creation workflow wasn't broken by this I was using a local set of HMMs and MSAs for testing, pretty much fake data. But the pipeline worked, both ways (create and update). I left some TODOs and FIXMEs in the code on thigs we should review. There are many changes on python scripts because I ran ruff and black, which are linting and formatting tools. --- assets/schema_input.json | 12 + bin/chunk_clusters.py | 15 +- bin/clip_ends.py | 35 ++- bin/extract_family_reps.py | 54 +++-- bin/filter_non_redundant_hmms.py | 9 +- bin/filter_recruited.py | 40 ++-- bin/get_nonhits_seqs.py | 64 ++++++ bin/remove_redundant_fams.py | 55 +++-- bin/remove_redundant_seqs.py | 20 +- conf/modules.config | 21 +- modules.json | 69 ++++-- modules/local/concat_hmms.nf | 29 --- modules/local/get_nonhits_seqs.nf | 35 +++ modules/nf-core/cat/cat/environment.yml | 5 + modules/nf-core/cat/cat/main.nf | 78 +++++++ modules/nf-core/cat/cat/meta.yml | 43 ++++ modules/nf-core/cat/cat/tests/main.nf.test | 191 ++++++++++++++++ .../nf-core/cat/cat/tests/main.nf.test.snap | 147 ++++++++++++ .../cat/tests/nextflow_unzipped_zipped.config | 6 + .../cat/tests/nextflow_zipped_unzipped.config | 8 + modules/nf-core/cat/cat/tests/tags.yml | 2 + modules/nf-core/seqkit/seq/environment.yml | 7 + modules/nf-core/seqkit/seq/main.nf | 63 ++++++ modules/nf-core/seqkit/seq/meta.yml | 51 +++++ modules/nf-core/seqkit/seq/seqkit-seq.diff | 21 ++ modules/nf-core/seqkit/seq/tests/main.nf.test | 145 ++++++++++++ .../seqkit/seq/tests/main.nf.test.snap | 134 +++++++++++ .../nf-core/seqkit/seq/tests/nextflow.config | 3 + modules/nf-core/seqkit/seq/tests/tags.yml | 2 + subworkflows/local/process_families.nf | 69 ++++++ subworkflows/local/remove_redundancy.nf | 52 ++--- workflows/proteinfamilies.nf | 211 ++++++++++++------ 32 files changed, 1485 insertions(+), 211 deletions(-) create mode 100755 bin/get_nonhits_seqs.py delete mode 100644 modules/local/concat_hmms.nf create mode 100644 modules/local/get_nonhits_seqs.nf create mode 100644 modules/nf-core/cat/cat/environment.yml create mode 100644 modules/nf-core/cat/cat/main.nf create mode 100644 modules/nf-core/cat/cat/meta.yml create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap create mode 100644 modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config create mode 100644 modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config create mode 100644 modules/nf-core/cat/cat/tests/tags.yml create mode 100644 modules/nf-core/seqkit/seq/environment.yml create mode 100644 modules/nf-core/seqkit/seq/main.nf create mode 100644 modules/nf-core/seqkit/seq/meta.yml create mode 100644 modules/nf-core/seqkit/seq/seqkit-seq.diff create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test.snap create mode 100644 modules/nf-core/seqkit/seq/tests/nextflow.config create mode 100644 modules/nf-core/seqkit/seq/tests/tags.yml create mode 100644 subworkflows/local/process_families.nf diff --git a/assets/schema_input.json b/assets/schema_input.json index 96ff7d1..c05dbd5 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -19,6 +19,18 @@ "exists": true, "pattern": "^\\S+\\.f(ast)?a(\\.gz)?$", "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" + }, + "existing_hmms": { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing existing protein family HMM models. These models will be used to update the corresponding families." + }, + "existing_msas": { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process." } }, "required": ["sample", "fasta"] diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index c699ac5..8ede06c 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -4,8 +4,10 @@ import os import argparse from collections import defaultdict +import csv from Bio import SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -42,16 +44,22 @@ def parse_args(args=None): ) return parser.parse_args(args) + def collect_clusters(clustering_file, threshold): # Collect clusters with a size threshold, storing in a defaultdict clusters = defaultdict(list) + with open(clustering_file) as f: - for line in f: - rep, member = line.strip().split("\t") + csv_reader = csv.reader(f, delimiter="\t") + for row in csv_reader: + rep, member = row clusters[rep].append(member) # Filter clusters by threshold - return {rep: members for rep, members in clusters.items() if len(members) >= threshold} + return { + rep: members for rep, members in clusters.items() if len(members) >= threshold + } + def main(args=None): args = parse_args(args) @@ -73,5 +81,6 @@ def main(args=None): SeqIO.write(record, fasta_out, "fasta") chunk_num += 1 + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/clip_ends.py b/bin/clip_ends.py index 630ab7c..da43dcb 100755 --- a/bin/clip_ends.py +++ b/bin/clip_ends.py @@ -6,6 +6,7 @@ from Bio import SeqIO from Bio.Seq import Seq + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -34,48 +35,64 @@ def parse_args(args=None): ) return parser.parse_args(args) + def read_fasta_to_matrix(file_path): records = list(SeqIO.parse(file_path, "fasta")) max_length = max(len(record.seq) for record in records) - matrix = np.zeros((len(records), max_length), dtype=np.dtype('U1')) + matrix = np.zeros((len(records), max_length), dtype=np.dtype("U1")) original_names = [] for i, record in enumerate(records): original_names.append(record.id) - matrix[i, :len(record.seq)] = list(str(record.seq)) + matrix[i, : len(record.seq)] = list(str(record.seq)) return matrix, original_names + def calculate_trim_positions(sequence_matrix, gap_threshold): - numeric_matrix = np.where(sequence_matrix == '-', 0, 1) + numeric_matrix = np.where(sequence_matrix == "-", 0, 1) num_rows = numeric_matrix.shape[0] column_sums = np.sum(numeric_matrix, axis=0) column_sums_percentage = column_sums / num_rows start_position = np.argmax(column_sums_percentage > gap_threshold) - end_position = len(column_sums_percentage) - np.argmax(column_sums_percentage[::-1] > gap_threshold) - 1 + end_position = ( + len(column_sums_percentage) + - np.argmax(column_sums_percentage[::-1] > gap_threshold) + - 1 + ) return start_position, end_position -def write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta): + +def write_trimmed_sequences( + sequence_matrix_trimmed, original_sequence_names, out_fasta +): trimmed_records = [] for i, sequence in enumerate(sequence_matrix_trimmed): - trimmed_sequence = ''.join(map(str, sequence)) + trimmed_sequence = "".join(map(str, sequence)) original_name = original_sequence_names[i] - trimmed_record = SeqIO.SeqRecord(Seq(trimmed_sequence), id=original_name, description="") + trimmed_record = SeqIO.SeqRecord( + Seq(trimmed_sequence), id=original_name, description="" + ) trimmed_records.append(trimmed_record) with open(out_fasta, "w") as output_fasta: SeqIO.write(trimmed_records, output_fasta, "fasta") + def trim_msa(alignment, gap_threshold, out_fasta): sequence_matrix, original_sequence_names = read_fasta_to_matrix(alignment) - start_position, end_position = calculate_trim_positions(sequence_matrix, gap_threshold) - sequence_matrix_trimmed = sequence_matrix[:, start_position:end_position+1] + start_position, end_position = calculate_trim_positions( + sequence_matrix, gap_threshold + ) + sequence_matrix_trimmed = sequence_matrix[:, start_position : end_position + 1] write_trimmed_sequences(sequence_matrix_trimmed, original_sequence_names, out_fasta) + def main(args=None): args = parse_args(args) trim_msa(args.alignment, args.gap_threshold, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index 645080b..e1627fb 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -9,6 +9,7 @@ from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -37,49 +38,76 @@ def parse_args(args=None): ) return parser.parse_args(args) + def extract_first_sequences(msa_folder, metadata_file, out_fasta): # Open the output FASTA file in write mode - with open(out_fasta, "w") as fasta_out, open(metadata_file, "w", newline="") as csv_out: + with open(out_fasta, "w") as fasta_out, open( + metadata_file, "w", newline="" + ) as csv_out: # Write custom metadata lines to the metadata file csv_out.write( - "# id: \"family_metadata\"\n" - "# section_name: \"Family Metadata\"\n" - "# description: \"Family metadata table containing family ids and sizes along with representative sequences, ids and lengths.\"\n" - "# format: \"csv\"\n" - "# plot_type: \"table\"\n" + '# id: "family_metadata"\n' + '# section_name: "Family Metadata"\n' + '# description: "Family metadata table containing family ids and sizes along with representative sequences, ids and lengths."\n' + '# format: "csv"\n' + '# plot_type: "table"\n' ) csv_writer = csv.writer(csv_out, quoting=csv.QUOTE_NONNUMERIC) # Write the CSV header - csv_writer.writerow(["Sample Name", "Family Id", "Size", "Representative Length", "Representative Id", "Sequence"]) + csv_writer.writerow( + [ + "Sample Name", + "Family Id", + "Size", + "Representative Length", + "Representative Id", + "Sequence", + ] + ) # Iterate over all files in the MSA folder for filename in os.listdir(msa_folder): filepath = os.path.join(msa_folder, filename) # Parse the MSA fasta file and extract the first sequence - with gzip.open(filepath, 'rt') if filepath.endswith('.gz') else open(filepath, 'r') as fasta_file: + with ( + gzip.open(filepath, "rt") + if filepath.endswith(".gz") + else open(filepath, "r") + ) as fasta_file: records = list(SeqIO.parse(fasta_file, "fasta")) family_size = len(records) if records: first_record = records[0] # Remove gaps from the sequence - cleaned_sequence = str(first_record.seq).replace("-", "").replace(".", "") + cleaned_sequence = ( + str(first_record.seq).replace("-", "").replace(".", "") + ) # Modify the ID to only include the part before the first space cleaned_id = first_record.id.split(" ")[0] # Create a new SeqRecord with the cleaned sequence and ID cleaned_record = SeqRecord( - Seq(cleaned_sequence), - id=cleaned_id, - description="" + Seq(cleaned_sequence), id=cleaned_id, description="" ) # Write the cleaned sequence to the FASTA file SeqIO.write(cleaned_record, fasta_out, "fasta") # Write the mapping to the CSV file family_name = os.path.splitext(os.path.splitext(filename)[0])[0] - csv_writer.writerow([family_name, family_name, family_size, len(cleaned_sequence), cleaned_id, cleaned_sequence]) + csv_writer.writerow( + [ + family_name, + family_name, + family_size, + len(cleaned_sequence), + cleaned_id, + cleaned_sequence, + ] + ) + def main(args=None): args = parse_args(args) extract_first_sequences(args.full_msa_folder, args.metadata, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/filter_non_redundant_hmms.py b/bin/filter_non_redundant_hmms.py index e48fcb9..1a626b8 100755 --- a/bin/filter_non_redundant_hmms.py +++ b/bin/filter_non_redundant_hmms.py @@ -5,6 +5,7 @@ import argparse import shutil + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -33,26 +34,30 @@ def parse_args(args=None): ) return parser.parse_args(args) + def filter_non_redundant_hmms(seqs, models, out_folder): seq_basenames = { os.path.basename(f).split(".")[0] - for f in os.listdir(seqs) if f.endswith('.fasta.gz') + for f in os.listdir(seqs) + if f.endswith(".fasta.gz") } # Iterate through the models folder and copy matching files for model_file in os.listdir(models): - if model_file.endswith('.hmm.gz'): + if model_file.endswith(".hmm.gz"): model_basename = os.path.basename(model_file).split(".")[0] if model_basename in seq_basenames: src = os.path.join(models, model_file) dst = os.path.join(out_folder, model_file) shutil.copy(src, dst) + def main(args=None): args = parse_args(args) os.makedirs(args.out_folder, exist_ok=True) filter_non_redundant_hmms(args.seqs, args.models, args.out_folder) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index 1594e48..eb9eec4 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -6,6 +6,7 @@ import gzip from Bio import AlignIO, SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -50,11 +51,12 @@ def parse_args(args=None): ) return parser.parse_args(args) + def filter_sequences(domtbl, length_threshold): filtered_sequences = [] - with gzip.open(domtbl, 'rt', encoding='utf-8') as file: + with gzip.open(domtbl, "rt", encoding="utf-8") as file: for line in file: - if line.startswith('#'): + if line.startswith("#"): continue # Skip comments columns = line.split() @@ -75,19 +77,26 @@ def filter_sequences(domtbl, length_threshold): return filtered_sequences + def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta): - base_filename = os.path.basename(alignment).split('.')[0] + base_filename = os.path.basename(alignment).split(".")[0] - with gzip.open(alignment, 'rt', encoding='utf-8') as file: + with gzip.open(alignment, "rt", encoding="utf-8") as file: alignment_data = AlignIO.read(file, "stockholm") - filtered_records = [record for record in alignment_data if record.id in filtered_sequences] + filtered_records = [ + record for record in alignment_data if record.id in filtered_sequences + ] for record in filtered_records: - ungapped_length = len(record.seq.replace('-', '')) + ungapped_length = len(record.seq.replace("-", "")) # Extract the part after the slash in the name (if present) - if '/' in record.id: - name, range_info = record.id.split('/') - start, end = map(int, range_info.split('-')) + if "/" in record.id: + ranges = record.id.split("/") + if len(ranges) > 2: + # FIXME: we need to adjust the workflow to handle these cases + continue + name, range_info = ranges + start, end = map(int, range_info.split("-")) # If the sequence starts at 1 and the end matches the ungapped length, remove the slash and range if start == 1 and end == ungapped_length: record.id = name @@ -95,25 +104,30 @@ def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) # Add the family name to the description field record.description = base_filename - with gzip.open(out_msa, 'wt') as gz_file: + with gzip.open(out_msa, "wt") as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") for record in filtered_records: record.letter_annotations = {} # Clear annotations - record.seq = record.seq.replace('-', '') + record.seq = record.seq.replace("-", "") - with gzip.open(out_fasta, 'wt') as gz_file: + with gzip.open(out_fasta, "wt") as gz_file: SeqIO.write(filtered_records, gz_file, "fasta") print(f"Filtered alignment saved to {out_msa}") + def filter_recruited(alignment, domtbl, length_threshold, out_msa, out_fasta): filtered_sequences = filter_sequences(domtbl, length_threshold) filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) + def main(args=None): args = parse_args(args) - filter_recruited(args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta) + filter_recruited( + args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta + ) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/get_nonhits_seqs.py b/bin/get_nonhits_seqs.py new file mode 100755 index 0000000..cd30ac3 --- /dev/null +++ b/bin/get_nonhits_seqs.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +import sys +import argparse +import gzip +from Bio import SeqIO, SearchIO + + +def open_file(filename): + """Helper function to open both gzipped and regular files""" + if filename.endswith(".gz"): + return gzip.open(filename, "rt") + return open(filename, "r") + + +def main(): + parser = argparse.ArgumentParser( + description="Get the sequences that are missing from the hmmscan txt output table." + ) + parser.add_argument( + "-d", + "--hmmscantxt", + required=True, + metavar="FILE", + type=str, + help="The hmmsearch txt output (gzipped).", + ) + parser.add_argument( + "-f", + "--fasta", + required=True, + metavar="FILE", + type=str, + help="The FASTA (gzip or not) file containing all the sequences.", + ) + parser.add_argument( + "-o", + "--output", + required=True, + metavar="FILE", + type=str, + help="Output gzipped FASTA file path for sequences without matches.", + ) + args = parser.parse_args() + + # Collect sequence IDs with matches + hit_sequence_ids = set() + with gzip.open(args.hmmscantxt, "rt") as domtable_fh: + for hmmer_result in SearchIO.parse(domtable_fh, "hmmer3-text"): + hit_sequence_ids.add(hmmer_result.id) + + with open_file(args.fasta) as fasta_fl, gzip.open( + args.output, "wt" + ) as fasta_out_fl: + + output_sequences = [] + for record in SeqIO.parse(fasta_fl, "fasta"): + if record.id not in hit_sequence_ids: + output_sequences = [record] + + SeqIO.write(output_sequences, fasta_out_fl, "fasta") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index 22d70e2..5da880a 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -6,6 +6,7 @@ import argparse import shutil + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -50,46 +51,56 @@ def parse_args(args=None): ) return parser.parse_args(args) + def remove_self_hits(domtbl_df, representative_to_family): domtbl_df["target name"] = domtbl_df["target name"].map(representative_to_family) domtbl_df = domtbl_df[domtbl_df["target name"] != domtbl_df["query name"]] return domtbl_df + def filter_by_length(domtbl_df, length_threshold): - domtbl_df = domtbl_df[(domtbl_df["env to"] - domtbl_df["env from"] + 1) / domtbl_df["qlen"] >= length_threshold] + domtbl_df = domtbl_df[ + (domtbl_df["env to"] - domtbl_df["env from"] + 1) / domtbl_df["qlen"] + >= length_threshold + ] return domtbl_df + def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_folder): mapping_df = pd.read_csv( - mapping, - comment='#', - usecols=["Family Id", "Size", "Representative Id"] + mapping, comment="#", usecols=["Family Id", "Size", "Representative Id"] ) domtbl_df = pd.read_csv( - domtbl, - sep=r'\s+', - comment='#', - header=None, - usecols=[0, 3, 5, 19, 20] - ).rename(columns={0: "target name", 3: "query name", 5: "qlen", 19: "env from", 20: "env to"}) - - representative_to_family = dict(zip(mapping_df["Representative Id"], mapping_df["Family Id"])) + domtbl, sep=r"\s+", comment="#", header=None, usecols=[0, 3, 5, 19, 20] + ).rename( + columns={ + 0: "target name", + 3: "query name", + 5: "qlen", + 19: "env from", + 20: "env to", + } + ) + + representative_to_family = dict( + zip(mapping_df["Representative Id"], mapping_df["Family Id"]) + ) family_to_size = dict(zip(mapping_df["Family Id"], mapping_df["Size"])) domtbl_df = remove_self_hits(domtbl_df, representative_to_family) domtbl_df = filter_by_length(domtbl_df, length_threshold) domtbl_df = domtbl_df.drop(columns=["qlen", "env from", "env to"]) - domtbl_df['query size'] = domtbl_df['query name'].map(family_to_size) - domtbl_df['target size'] = domtbl_df['target name'].map(family_to_size) + domtbl_df["query size"] = domtbl_df["query name"].map(family_to_size) + domtbl_df["target size"] = domtbl_df["target name"].map(family_to_size) redundant_fam_names = set() for _, row in domtbl_df.iterrows(): - if row['query size'] < row['target size']: - redundant_fam_names.add(row['query name']) + if row["query size"] < row["target size"]: + redundant_fam_names.add(row["query name"]) else: - redundant_fam_names.add(row['target name']) + redundant_fam_names.add(row["target name"]) for file_name in os.listdir(fasta_folder): base_name = os.path.basename(file_name).split(".")[0] @@ -101,11 +112,19 @@ def remove_redundant_fams(mapping, domtbl, fasta_folder, length_threshold, out_f if os.path.isfile(source_file): shutil.copy2(source_file, destination_file) + def main(args=None): args = parse_args(args) os.makedirs(args.out_folder, exist_ok=True) - remove_redundant_fams(args.mapping, args.domtbl, args.fasta_folder, args.length_threshold, args.out_folder) + remove_redundant_fams( + args.mapping, + args.domtbl, + args.fasta_folder, + args.length_threshold, + args.out_folder, + ) + if __name__ == "__main__": sys.exit(main()) diff --git a/bin/remove_redundant_seqs.py b/bin/remove_redundant_seqs.py index 3385134..c1fb66c 100755 --- a/bin/remove_redundant_seqs.py +++ b/bin/remove_redundant_seqs.py @@ -6,6 +6,7 @@ import csv from Bio import SeqIO + def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( @@ -34,29 +35,36 @@ def parse_args(args=None): ) return parser.parse_args(args) + def extract_rep_sequences(clustering, sequences, out_fasta): # Read the clustering file and extract unique values from column 1 unique_representatives = set() - with open(clustering, 'r') as tsv_file: - reader = csv.reader(tsv_file, delimiter='\t') + with open(clustering, "r") as tsv_file: + reader = csv.reader(tsv_file, delimiter="\t") for row in reader: if row: # Ensure the row is not empty unique_representatives.add(row[0]) # Read the sequences file and filter for representatives matching_records = [] - with gzip.open(sequences, 'rt') if sequences.endswith('.gz') else open(sequences, 'r') as fasta_file: - for record in SeqIO.parse(fasta_file, 'fasta'): + with ( + gzip.open(sequences, "rt") + if sequences.endswith(".gz") + else open(sequences, "r") + ) as fasta_file: + for record in SeqIO.parse(fasta_file, "fasta"): if record.id in unique_representatives: matching_records.append(record) # Write the matching sequences to the output fasta file - with open(out_fasta, 'w') as output_file: - SeqIO.write(matching_records, output_file, 'fasta') + with open(out_fasta, "w") as output_file: + SeqIO.write(matching_records, output_file, "fasta") + def main(args=None): args = parse_args(args) extract_rep_sequences(args.clustering, args.sequences, args.out_fasta) + if __name__ == "__main__": sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index c542fae..2e5547a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,10 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + withName: 'SEQKIT_SEQ' { + ext.args = "--remove-gaps" + } + withName: 'MMSEQS_CREATEDB' { publishDir = [ path: { "${params.outdir}/mmseqs/initial_clustering/mmseqs_createdb/" }, @@ -234,14 +238,15 @@ process { ] } - withName: 'CONCAT_HMMS' { - publishDir = [ - path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, - mode: params.publish_dir_mode, - enabled: false, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + // FIXME: We need to handle the CAT_CAT ones now, in the update we cat hmms and msas + // withName: 'CAT_CAT' { + // publishDir = [ + // path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, + // mode: params.publish_dir_mode, + // enabled: false, + // saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + // ] + // } withName: 'REMOVE_REDUNDANT_FAMS' { publishDir = [ diff --git a/modules.json b/modules.json index 625761e..af4f0a7 100644 --- a/modules.json +++ b/modules.json @@ -5,58 +5,93 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "cat/cat": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ] + }, "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/cluster": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "seqkit/seq": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": [ + "modules" + ], + "patch": "modules/nf-core/seqkit/seq/seqkit-seq.diff" } } }, @@ -65,20 +100,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/local/concat_hmms.nf b/modules/local/concat_hmms.nf deleted file mode 100644 index fe9acf7..0000000 --- a/modules/local/concat_hmms.nf +++ /dev/null @@ -1,29 +0,0 @@ -process CONCAT_HMMS { - tag "$meta.id" - label 'process_single' - - conda "conda-forge::sed=4.7" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" - - input: - tuple val(meta), path(hmm, stageAs: "hmm/*") - - output: - tuple val(meta), path("${meta.id}.hmm.gz"), emit: hmm - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - """ - zcat hmm/*.hmm.gz | gzip > ${meta.id}.hmm.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sed: \$(echo \$(sed --version 2>&1) | sed 's/^.*GNU sed) //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/get_nonhits_seqs.nf b/modules/local/get_nonhits_seqs.nf new file mode 100644 index 0000000..5619b50 --- /dev/null +++ b/modules/local/get_nonhits_seqs.nf @@ -0,0 +1,35 @@ +process GET_NONHITS_SEQS { + + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta), path(fasta), path(hits_txt_table) + + output: + tuple val(meta), path("*.fasta.gz"), emit: fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + get_nonhits_seqs.py \\ + --fasta ${fasta} \\ + --hmmscantxt ${hits_txt_table} \\ + --output ${prefix}.fasta.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml new file mode 100644 index 0000000..9b01c86 --- /dev/null +++ b/modules/nf-core/cat/cat/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf new file mode 100644 index 0000000..2862c64 --- /dev/null +++ b/modules/nf-core/cat/cat/main.nf @@ -0,0 +1,78 @@ +process CAT_CAT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : + 'biocontainers/pigz:2.3.4' }" + + input: + tuple val(meta), path(files_in) + + output: + tuple val(meta), path("${prefix}"), emit: file_out + 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 file_list = files_in.collect { it.toString() } + + // choose appropriate concatenation tool depending on input and output format + + // | input | output | command1 | command2 | + // |-----------|------------|----------|----------| + // | gzipped | gzipped | cat | | + // | ungzipped | ungzipped | cat | | + // | gzipped | ungzipped | zcat | | + // | ungzipped | gzipped | cat | pigz | + + // Use input file ending as default + prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" + out_zip = prefix.endsWith('.gz') + in_zip = file_list[0].endsWith('.gz') + command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' + command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + $command1 \\ + $args \\ + ${file_list.join(' ')} \\ + $command2 \\ + > ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ + + stub: + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } + """ + touch $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ +} + +// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz +def getFileSuffix(filename) { + def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ + return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) +} diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml new file mode 100644 index 0000000..81778a0 --- /dev/null +++ b/modules/nf-core/cat/cat/meta.yml @@ -0,0 +1,43 @@ +name: cat_cat +description: A module for concatenation of gzipped or uncompressed files +keywords: + - concatenate + - gzip + - cat +tools: + - cat: + description: Just concatenation + documentation: https://man7.org/linux/man-pages/man1/cat.1.html + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" +output: + - file_out: + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@erikrikarddaniel" + - "@FriederikeHanssen" +maintainers: + - "@erikrikarddaniel" + - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test new file mode 100644 index 0000000..9cb1617 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -0,0 +1,191 @@ +nextflow_process { + + name "Test Process CAT_CAT" + script "../main.nf" + process "CAT_CAT" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/cat" + + test("test_cat_name_conflict") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'genome', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } + ) + } + } + + test("test_cat_unzipped_unzipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test_cat_zipped_zipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_zipped_unzipped") { + config './nextflow_zipped_unzipped.config' + + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_cat_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } + + test("test_cat_one_file_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } + ) + } + } +} diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap new file mode 100644 index 0000000..b7623ee --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -0,0 +1,147 @@ +{ + "test_cat_unzipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:18.500464399" + }, + "test_cat_zipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2023-10-16T14:32:49.642741302" + }, + "test_cat_zipped_zipped": { + "content": [ + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" + }, + "test_cat_one_file_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" + }, + "test_cat_unzipped_zipped": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config new file mode 100644 index 0000000..ec26b0f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config @@ -0,0 +1,6 @@ + +process { + withName: CAT_CAT { + ext.prefix = 'cat.txt.gz' + } +} diff --git a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config new file mode 100644 index 0000000..fbc7978 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config @@ -0,0 +1,8 @@ + +process { + + withName: CAT_CAT { + ext.prefix = 'cat.txt' + } + +} diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml new file mode 100644 index 0000000..37b578f --- /dev/null +++ b/modules/nf-core/cat/cat/tests/tags.yml @@ -0,0 +1,2 @@ +cat/cat: + - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml new file mode 100644 index 0000000..4f8058a --- /dev/null +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::seqkit=2.8.1" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf new file mode 100644 index 0000000..529b3a4 --- /dev/null +++ b/modules/nf-core/seqkit/seq/main.nf @@ -0,0 +1,63 @@ +process SEQKIT_SEQ { + tag "$meta.id" + label 'process_low' + // File IO can be a bottleneck. See: https://bioinf.shenwei.me/seqkit/usage/#parallelization-of-cpu-intensive-jobs + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': + 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" + + input: + tuple val(meta), path(fastx) + + output: + tuple val(meta), path("${prefix}.*") , emit: fastx + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fasta" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + def call_gzip = extension.endsWith('.gz') ? "| gzip -c $args2" : '' + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + seqkit \\ + seq \\ + --threads $task.cpus \\ + $args \\ + $fastx \\ + $call_gzip \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ +} diff --git a/modules/nf-core/seqkit/seq/meta.yml b/modules/nf-core/seqkit/seq/meta.yml new file mode 100644 index 0000000..7d32aba --- /dev/null +++ b/modules/nf-core/seqkit/seq/meta.yml @@ -0,0 +1,51 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "seqkit_seq" +description: Transforms sequences (extract ID, filter by length, remove gaps, reverse + complement...) +keywords: + - genomics + - fasta + - fastq + - transform + - filter + - gaps + - complement +tools: + - "seqkit": + description: "A cross-platform and ultrafast toolkit for FASTA/Q file manipulation" + homepage: "https://bioinf.shenwei.me/seqkit/" + documentation: "https://bioinf.shenwei.me/seqkit/usage/" + tool_dev_url: "https://github.com/shenwei356/seqkit" + doi: "10.1371/journal.pone.0163962" + licence: ["MIT"] + identifier: biotools:seqkit +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastx: + type: file + description: Input fasta/fastq file + pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" +output: + - fastx: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - ${prefix}.*: + type: file + description: Output fasta/fastq file + pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/seqkit/seq/seqkit-seq.diff b/modules/nf-core/seqkit/seq/seqkit-seq.diff new file mode 100644 index 0000000..ef9993d --- /dev/null +++ b/modules/nf-core/seqkit/seq/seqkit-seq.diff @@ -0,0 +1,21 @@ +Changes in component 'nf-core/seqkit/seq' +'modules/nf-core/seqkit/seq/environment.yml' is unchanged +Changes in 'seqkit/seq/main.nf': +--- modules/nf-core/seqkit/seq/main.nf ++++ modules/nf-core/seqkit/seq/main.nf +@@ -22,7 +22,7 @@ + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" +- def extension = "fastq" ++ def extension = "fasta" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + +'modules/nf-core/seqkit/seq/meta.yml' is unchanged +'modules/nf-core/seqkit/seq/tests/tags.yml' is unchanged +'modules/nf-core/seqkit/seq/tests/nextflow.config' is unchanged +'modules/nf-core/seqkit/seq/tests/main.nf.test.snap' is unchanged +'modules/nf-core/seqkit/seq/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test b/modules/nf-core/seqkit/seq/tests/main.nf.test new file mode 100644 index 0000000..9fd1c08 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test @@ -0,0 +1,145 @@ +nextflow_process { + + name "Test Process SEQKIT_SEQ" + script "../main.nf" + process "SEQKIT_SEQ" + config './nextflow.config' + + tag "modules" + tag "modules_nfcore" + tag "seqkit" + tag "seqkit/seq" + + test("sarscov2-genome_fasta") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-genome_fasta_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-test_1_fastq_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error") { + when { + process { + """ + input[0] = [ + [ id:'test_1' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + + test("sarscov2-genome_fasta-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap new file mode 100644 index 0000000..e691096 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "sarscov2-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:52:18.220051903" + }, + "sarscov2-test_1_fastq_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:55.607826581" + }, + "sarscov2-genome_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:27.717072933" + }, + "sarscov2-genome_fasta_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:37.917560104" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqkit/seq/tests/nextflow.config b/modules/nf-core/seqkit/seq/tests/nextflow.config new file mode 100644 index 0000000..d8e3c66 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args2 = '-n' +} diff --git a/modules/nf-core/seqkit/seq/tests/tags.yml b/modules/nf-core/seqkit/seq/tests/tags.yml new file mode 100644 index 0000000..5eeca7e --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/tags.yml @@ -0,0 +1,2 @@ +seqkit/seq: + - "modules/nf-core/seqkit/seq/**" diff --git a/subworkflows/local/process_families.nf b/subworkflows/local/process_families.nf new file mode 100644 index 0000000..76a9bb1 --- /dev/null +++ b/subworkflows/local/process_families.nf @@ -0,0 +1,69 @@ +include { CHUNK_CLUSTERS } from '../../modules/local/chunk_clusters.nf' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps' + +include { EXECUTE_CLUSTERING } from './execute_clustering' +include { GENERATE_FAMILIES } from './generate_families' +include { REMOVE_REDUNDANCY } from './remove_redundancy' + + +workflow PROCESS_FAMILIES { + take: + ch_sequences // channel: [meta, sequences] + + main: + ch_versions = Channel.empty() + + // Avoid clustering or generating families with less sequences than params.cluster_size_threshold + // TODO: review this + ch_sequences = ch_sequences.filter { _map, seqs -> + { + seqs.countFasta() >= params.cluster_size_threshold + } + } + + // Clustering + EXECUTE_CLUSTERING(ch_sequences) + ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) + + // Join together to ensure in sync + ch_input_for_cluster_chunking = ch_sequences + .join(EXECUTE_CLUSTERING.out.clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [meta, seqs] + clusters: [meta, clusters] + } + + CHUNK_CLUSTERS( + ch_input_for_cluster_chunking.clusters, + ch_input_for_cluster_chunking.seqs, + params.cluster_size_threshold, + ) + ch_versions = ch_versions.mix(CHUNK_CLUSTERS.out.versions) + + // Multiple sequence alignment and family generation + GENERATE_FAMILIES( + ch_sequences, + CHUNK_CLUSTERS.out.fasta_chunks, + ) + ch_versions = ch_versions.mix(GENERATE_FAMILIES.out.versions) + + // Remove redundant sequences and families + REMOVE_REDUNDANCY( + GENERATE_FAMILIES.out.full_msa, + GENERATE_FAMILIES.out.fasta, + GENERATE_FAMILIES.out.hmm, + ) + ch_versions = ch_versions.mix(REMOVE_REDUNDANCY.out.versions) + + // Post-processing + ch_full_msa = REMOVE_REDUNDANCY.out.full_msa + .map { meta, aln -> [[id: meta.id], aln] } + .groupTuple(by: 0) + + EXTRACT_FAMILY_REPS(ch_full_msa) + ch_versions = ch_versions.mix(EXTRACT_FAMILY_REPS.out.versions) + + emit: + family_reps = EXTRACT_FAMILY_REPS.out.map + versions = ch_versions +} diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 40ae3c9..ee9d4c7 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,9 +2,9 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' -include { CONCAT_HMMS } from '../../modules/local/concat_hmms.nf' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { CAT_CAT } from '../../modules/nf-core/cat/cat' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' include { FILTER_NON_REDUNDANT_HMMS } from '../../modules/local/filter_non_redundant_hmms.nf' include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' @@ -29,22 +29,24 @@ workflow REMOVE_REDUNDANCY { ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) hmm - .map { meta, model -> [ [id: meta.id], model ] } + .map { meta, model -> [[id: meta.id], model] } .groupTuple(by: 0) .set { ch_hmm } - CONCAT_HMMS( ch_hmm ) - ch_versions = ch_versions.mix( CONCAT_HMMS.out.versions ) - CONCAT_HMMS.out.hmm + CAT_CAT(ch_hmm) + + ch_versions = ch_versions.mix(CAT_CAT.out.versions) + + CAT_CAT.out.file_out .combine(EXTRACT_FAMILY_REPS.out.fasta, by: 0) - .map { meta, model, seqs -> [ meta, model, seqs, false, false, true ] } + .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + HMMER_HMMSEARCH(ch_input_for_hmmsearch) + ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) fasta - .map{ meta, fas -> [ [id: meta.id], fas ] } + .map { meta, fas -> [[id: meta.id], fas] } .groupTuple(by: 0) .set { fasta } @@ -53,24 +55,24 @@ workflow REMOVE_REDUNDANCY { .join(HMMER_HMMSEARCH.out.domain_summary) .join(fasta) .multiMap { meta, map, domtbl, seqs -> - map: [ meta, map ] - domtbl: [ meta, domtbl ] - seqs: [ meta, seqs ] + map: [meta, map] + domtbl: [meta, domtbl] + seqs: [meta, seqs] } - REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) + REMOVE_REDUNDANT_FAMS(ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold) + ch_versions = ch_versions.mix(REMOVE_REDUNDANT_FAMS.out.versions) fasta = REMOVE_REDUNDANT_FAMS.out.fasta // Join together to ensure in sync ch_input_for_hmm_filtering = fasta .join(ch_hmm) .multiMap { meta, seqs, models -> - seqs: [ meta, seqs ] - models: [ meta, models ] + seqs: [meta, seqs] + models: [meta, models] } - FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) - ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) + FILTER_NON_REDUNDANT_HMMS(ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models) + ch_versions = ch_versions.mix(FILTER_NON_REDUNDANT_HMMS.out.versions) fasta .transpose() @@ -82,20 +84,20 @@ workflow REMOVE_REDUNDANCY { } if (params.remove_sequence_redundancy) { - EXECUTE_CLUSTERING( fasta ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + EXECUTE_CLUSTERING(fasta) + ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv // Join together to ensure in sync ch_input_for_seq_removal = fasta .join(clustering_tsv) .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] + seqs: [meta, seqs] + clusters: [meta, clusters] } - REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + REMOVE_REDUNDANT_SEQS(ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs) + ch_versions = ch_versions.mix(REMOVE_REDUNDANT_SEQS.out.versions) ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 793f0b2..df9cce5 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -3,12 +3,11 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters.nf' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-schema' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { MULTIQC } from '../modules/nf-core/multiqc/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -19,14 +18,20 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' -include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' -include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' +include { PROCESS_FAMILIES as PROCESS_FAMILIES_NEW } from '../subworkflows/local/process_families' +include { PROCESS_FAMILIES as PROCESS_FAMILIES_UPDATE } from '../subworkflows/local/process_families' // // MODULE: Local to the pipeline // -include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' +include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' +include { CAT_CAT as CAT_HMMS } from '../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_MSAS } from '../modules/nf-core/cat/cat/main' +include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../modules/local/extract_family_reps' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../modules/local/extract_family_reps' +include { GET_NONHITS_SEQS } from '../modules/local/get_nonhits_seqs' +include { FILTER_RECRUITED } from '../modules/local/filter_recruited' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -35,46 +40,110 @@ include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' */ workflow PROTEINFAMILIES { - take: ch_samplesheet // channel: samplesheet read in from --input + main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // Clustering - EXECUTE_CLUSTERING( ch_samplesheet ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv - - // Join together to ensure in sync - ch_input_for_cluster_chunking = ch_samplesheet - .join(clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] + ch_samplesheet_for_create = Channel.empty() + ch_samplesheet_for_update = Channel.empty() + + + ch_samplesheet + .branch { _meta, _fasta, existing_hmms, existing_msas -> + to_create: !existing_hmms?.size() && !existing_msas?.size() + to_update: existing_hmms?.size() && existing_msas?.size() } + .set { + branch_result + } + + ch_family_reps = Channel.empty() + + /************************************/ + /* Splitting the samplesheet into 2 */ + /* - Entries to create new families */ + /* (they only have sequences) */ + /* - Entries to update existing */ + /* families (existing HMM models */ + /* and MSAs) */ + /************************************/ + ch_samplesheet_for_create = branch_result.to_create.map { meta, fasta, _existing_hmms, _existing_msas -> [meta, fasta] } + ch_samplesheet_for_update = branch_result.to_update + + /**********************/ + /* UPDATE SUBWORKFLOW */ + /**********************/ + if (branch_result.to_update) { + + // Squeeze the hmm models into a single file + CAT_HMMS( + ch_samplesheet_for_update.map { meta, _fasta, existing_hmms, _existing_msas -> + [meta, file("${existing_hmms}/*.{hmm,hmm.gz}")] + } + ) + + // Prep the sequences to search them against the HMM concatenated model of families // + ch_samplesheet_for_update = ch_samplesheet_for_update + .join( + CAT_HMMS.out.file_out + ) + .map { meta, fasta, _existing_hmms, existing_msas, concatenated_hmm -> + [meta, fasta, concatenated_hmm, existing_msas] + } + + HMMER_HMMSEARCH( + ch_samplesheet_for_update.map { meta, fasta, concatenated_hmm, _existing_msas -> + [meta, concatenated_hmm, fasta, false, false, true] + } + ) + + // We only keep those sequences that match the HMM model with the families to update + GET_NONHITS_SEQS( + ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) + ) + ch_versions = ch_versions.mix(GET_NONHITS_SEQS.out.versions) + + FILTER_RECRUITED( + HMMER_HMMSEARCH.out.alignments, + HMMER_HMMSEARCH.out.domain_summary, + params.hmmsearch_query_length_threshold, + ) + ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + + // Get the sequences from the MSAs + CAT_MSAS( + ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas -> + [meta, file("${existing_msas}/*.{aln,aln.gz}")] + } + ) + ch_versions = ch_versions.mix(CAT_MSAS.out.versions) + + // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta + SEQKIT_SEQ(CAT_MSAS.out.file_out) + ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) - CHUNK_CLUSTERS( ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold ) - ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) + // Process existing families + PROCESS_FAMILIES_UPDATE( + SEQKIT_SEQ.out.fastx + ) + ch_versions = ch_versions.mix(PROCESS_FAMILIES_UPDATE.out.versions) - // Multiple sequence alignment - GENERATE_FAMILIES( ch_samplesheet, CHUNK_CLUSTERS.out.fasta_chunks ) - ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) + ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_UPDATE.out.family_reps) - // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + // Process new families + ch_samplesheet_for_create = ch_samplesheet_for_create.mix(GET_NONHITS_SEQS.out.fasta) + } - // Post-processing - REMOVE_REDUNDANCY.out.msa - .map { meta, aln -> [ [id: meta.id], aln ] } - .groupTuple(by: 0) - .set { ch_msa } + PROCESS_FAMILIES_NEW( + ch_samplesheet_for_create + ) + ch_versions = ch_versions.mix(PROCESS_FAMILIES_NEW.out.versions) - EXTRACT_FAMILY_REPS( ch_msa ) - ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_NEW.out.family_reps) // // Collate and save software versions @@ -82,61 +151,61 @@ workflow PROTEINFAMILIES { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'proteinfamilies_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'proteinfamilies_software_' + 'mqc_' + 'versions.yml', sort: true, - newLine: true - ).set { ch_collated_versions } - + newLine: true, + ) + .set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") + ch_multiqc_config = Channel.fromPath( + "${projectDir}/assets/multiqc_config.yml", + checkIfExists: true + ) + ch_multiqc_custom_config = params.multiqc_config + ? Channel.fromPath(params.multiqc_config, checkIfExists: true) + : Channel.empty() + ch_multiqc_logo = params.multiqc_logo + ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) + : Channel.empty() + + summary_params = paramsSummaryMap( + workflow, + parameters_schema: "nextflow_schema.json" + ) ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? - file(params.multiqc_methods_description, checkIfExists: true) : - file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description)) + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml') + ) + ch_multiqc_custom_methods_description = params.multiqc_methods_description + ? file(params.multiqc_methods_description, checkIfExists: true) + : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description) + ) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( name: 'methods_description_mqc.yaml', - sort: true + sort: true, ) ) - ch_multiqc_files = ch_multiqc_files.mix(EXTRACT_FAMILY_REPS.out.map.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_family_reps.collect { it[1] }.ifEmpty([])) - MULTIQC ( + MULTIQC( ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), [], - [] + [], ) - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] - + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ From 42a61055b03bf391de312fbaddd630685f718a75 Mon Sep 17 00:00:00 2001 From: Martin Beracochea Date: Sun, 22 Dec 2024 22:39:58 +0000 Subject: [PATCH 064/139] Fix a missing bit in the update The code wasn't include the matches on the update --- workflows/proteinfamilies.nf | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index df9cce5..c3337f0 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -27,6 +27,7 @@ include { PROCESS_FAMILIES as PROCESS_FAMILIES_UPDATE } from '../subwork include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' include { CAT_CAT as CAT_HMMS } from '../modules/nf-core/cat/cat/main' include { CAT_CAT as CAT_MSAS } from '../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_SEQS } from '../modules/nf-core/cat/cat/main' include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../modules/local/extract_family_reps' include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../modules/local/extract_family_reps' @@ -79,6 +80,8 @@ workflow PROTEINFAMILIES { /**********************/ if (branch_result.to_update) { + // TODO: check that the HMMs and the MSAs match // + // Squeeze the hmm models into a single file CAT_HMMS( ch_samplesheet_for_update.map { meta, _fasta, existing_hmms, _existing_msas -> @@ -101,7 +104,8 @@ workflow PROTEINFAMILIES { } ) - // We only keep those sequences that match the HMM model with the families to update + // We only keep those sequences that match the HMM models with the families to update, the seqs that don't match + // are sent to the "create families mode" GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) @@ -126,9 +130,23 @@ workflow PROTEINFAMILIES { SEQKIT_SEQ(CAT_MSAS.out.file_out) ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) + // Add the sequences that match with the seqs from the MSAs + // TOOD: this is untested + CAT_SEQS( + SEQKIT_SEQ.out.fastx.join( + FILTER_RECRUITED.out.fasta, + by: [0] + ).map { meta, msas_fasta, filtered_fastas -> + [ + [meta, [msas_fasta, filtered_fastas]] + ] + } + ) + ch_versions = ch_versions.mix(CAT_SEQS.out.versions) + // Process existing families PROCESS_FAMILIES_UPDATE( - SEQKIT_SEQ.out.fastx + CAT_SEQS.out.file_out ) ch_versions = ch_versions.mix(PROCESS_FAMILIES_UPDATE.out.versions) From 185802ebced4f9e53127e54cdb46a54831947f13 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 09:17:45 +0000 Subject: [PATCH 065/139] correct and rearrange stuff in remove_redundancy subworkflow --- subworkflows/local/process_families.nf | 15 +++--- subworkflows/local/remove_redundancy.nf | 61 +++++++------------------ 2 files changed, 22 insertions(+), 54 deletions(-) diff --git a/subworkflows/local/process_families.nf b/subworkflows/local/process_families.nf index 76a9bb1..bd34824 100644 --- a/subworkflows/local/process_families.nf +++ b/subworkflows/local/process_families.nf @@ -48,19 +48,16 @@ workflow PROCESS_FAMILIES { ch_versions = ch_versions.mix(GENERATE_FAMILIES.out.versions) // Remove redundant sequences and families - REMOVE_REDUNDANCY( - GENERATE_FAMILIES.out.full_msa, - GENERATE_FAMILIES.out.fasta, - GENERATE_FAMILIES.out.hmm, - ) - ch_versions = ch_versions.mix(REMOVE_REDUNDANCY.out.versions) + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing - ch_full_msa = REMOVE_REDUNDANCY.out.full_msa - .map { meta, aln -> [[id: meta.id], aln] } + REMOVE_REDUNDANCY.out.msa + .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) + .set { ch_msa } - EXTRACT_FAMILY_REPS(ch_full_msa) + EXTRACT_FAMILY_REPS(ch_msa) ch_versions = ch_versions.mix(EXTRACT_FAMILY_REPS.out.versions) emit: diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 0654720..769fa0c 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -2,11 +2,9 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' include { CAT_CAT } from '../../modules/nf-core/cat/cat' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { CAT_CAT } from '../../modules/nf-core/cat/cat' -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' include { FILTER_NON_REDUNDANT_HMMS } from '../../modules/local/filter_non_redundant_hmms.nf' include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' @@ -24,40 +22,28 @@ workflow REMOVE_REDUNDANCY { if (params.remove_family_redundancy) { msa - .map { meta, aln -> [ [id: meta.id], aln ] } + .map { meta, aln -> [[id: meta.id], aln] } .groupTuple(by: 0) .set { ch_msa } EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) hmm - .map { meta, model -> [[id: meta.id], model] } .map { meta, model -> [[id: meta.id], model] } .groupTuple(by: 0) .set { ch_hmm } + CAT_CAT( ch_hmm ) + ch_versions = ch_versions.mix( CAT_CAT.out.versions ) - CAT_CAT(ch_hmm) - - ch_versions = ch_versions.mix(CAT_CAT.out.versions) - - CAT_CAT(ch_hmm) - - ch_versions = ch_versions.mix(CAT_CAT.out.versions) - - CAT_CAT.out.file_out CAT_CAT.out.file_out .combine(EXTRACT_FAMILY_REPS.out.fasta, by: 0) .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } - .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH(ch_input_for_hmmsearch) - ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) - HMMER_HMMSEARCH(ch_input_for_hmmsearch) - ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) fasta - .map { meta, fas -> [[id: meta.id], fas] } .map { meta, fas -> [[id: meta.id], fas] } .groupTuple(by: 0) .set { fasta } @@ -70,15 +56,10 @@ workflow REMOVE_REDUNDANCY { map: [meta, map] domtbl: [meta, domtbl] seqs: [meta, seqs] - map: [meta, map] - domtbl: [meta, domtbl] - seqs: [meta, seqs] } - REMOVE_REDUNDANT_FAMS(ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold) - ch_versions = ch_versions.mix(REMOVE_REDUNDANT_FAMS.out.versions) - REMOVE_REDUNDANT_FAMS(ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold) - ch_versions = ch_versions.mix(REMOVE_REDUNDANT_FAMS.out.versions) + REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) fasta = REMOVE_REDUNDANT_FAMS.out.fasta // Join together to ensure in sync @@ -87,28 +68,22 @@ workflow REMOVE_REDUNDANCY { .multiMap { meta, seqs, models -> seqs: [meta, seqs] models: [meta, models] - seqs: [meta, seqs] - models: [meta, models] } - FILTER_NON_REDUNDANT_HMMS(ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models) - ch_versions = ch_versions.mix(FILTER_NON_REDUNDANT_HMMS.out.versions) - FILTER_NON_REDUNDANT_HMMS(ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models) - ch_versions = ch_versions.mix(FILTER_NON_REDUNDANT_HMMS.out.versions) + FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) + ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) fasta .transpose() .map { meta, file -> - def chunk_num = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] - [ [id: meta.id, chunk: chunk_num], file ] + def baseName = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] + [[id: meta.id, chunk: baseName], file] } .set { fasta } } if (params.remove_sequence_redundancy) { - EXECUTE_CLUSTERING(fasta) - ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) - EXECUTE_CLUSTERING(fasta) - ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) + EXECUTE_CLUSTERING( fasta ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv // Join together to ensure in sync @@ -117,14 +92,10 @@ workflow REMOVE_REDUNDANCY { .multiMap { meta, seqs, clusters -> seqs: [meta, seqs] clusters: [meta, clusters] - seqs: [meta, seqs] - clusters: [meta, clusters] } - REMOVE_REDUNDANT_SEQS(ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs) - ch_versions = ch_versions.mix(REMOVE_REDUNDANT_SEQS.out.versions) - REMOVE_REDUNDANT_SEQS(ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs) - ch_versions = ch_versions.mix(REMOVE_REDUNDANT_SEQS.out.versions) + REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) From 1cb45ffe523573c581b1a0f7c66d64322ce4d44e Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 09:29:22 +0000 Subject: [PATCH 066/139] sync to latest template --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .prettierignore | 1 + LICENSE | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a0e7a3d..bcacb09 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/proteinfamilies pipeline documentation](https://nf-co.re/proteinfamilies/usage) - - type: textarea id: description attributes: diff --git a/.prettierignore b/.prettierignore index 437d763..edd29f0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,4 @@ testing/ testing* *.pyc bin/ +ro-crate-metadata.json diff --git a/LICENSE b/LICENSE index 3f8f7f5..f9d760a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Evangelos Karatzas +Copyright (c) The nf-core/proteinfamilies team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 8b36bd3c09a446062622390a0ab23577bc2ed443 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 09:30:05 +0000 Subject: [PATCH 067/139] nf-core yml version updated --- .nf-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index a1f4aa9..6fb21e9 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,7 @@ lint: - conf/igenomes_ignored.config - conf/igenomes.config - conf/igenomes_ignored.config -nf_core_version: 3.1.0 +nf_core_version: 3.1.1 repository_type: pipeline template: author: Evangelos Karatzas From 0a6b233dc87873e9d3002a0a53df5d7b82c51b3e Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 09:57:45 +0000 Subject: [PATCH 068/139] multiQC stuff undo linting --- workflows/proteinfamilies.nf | 59 ++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index c3337f0..7534e9c 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -169,61 +169,60 @@ workflow PROTEINFAMILIES { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'proteinfamilies_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, - newLine: true, - ) - .set { ch_collated_versions } + newLine: true + ).set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "${projectDir}/assets/multiqc_config.yml", - checkIfExists: true - ) - ch_multiqc_custom_config = params.multiqc_config - ? Channel.fromPath(params.multiqc_config, checkIfExists: true) - : Channel.empty() - ch_multiqc_logo = params.multiqc_logo - ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) - : Channel.empty() - - summary_params = paramsSummaryMap( - workflow, - parameters_schema: "nextflow_schema.json" - ) + ch_multiqc_config = Channel.fromPath( + "$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() + + summary_params = paramsSummaryMap( + workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml') - ) - ch_multiqc_custom_methods_description = params.multiqc_methods_description - ? file(params.multiqc_methods_description, checkIfExists: true) - : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( - methodsDescriptionText(ch_multiqc_custom_methods_description) - ) + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? + file(params.multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = Channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( name: 'methods_description_mqc.yaml', - sort: true, + sort: true ) ) ch_multiqc_files = ch_multiqc_files.mix(ch_family_reps.collect { it[1] }.ifEmpty([])) - MULTIQC( + MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), [], - [], + [] ) emit: multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] } + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + THE END +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ From 8437b965ce0146d868284a7394aa3c8022682301 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 12:02:32 +0000 Subject: [PATCH 069/139] update_families moved to its own subworkflow --- assets/schema_input.json | 8 +- subworkflows/local/update_families.nf | 89 +++++++++++++++++++ workflows/proteinfamilies.nf | 122 ++++---------------------- 3 files changed, 108 insertions(+), 111 deletions(-) create mode 100644 subworkflows/local/update_families.nf diff --git a/assets/schema_input.json b/assets/schema_input.json index c05dbd5..159e89a 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -20,17 +20,17 @@ "pattern": "^\\S+\\.f(ast)?a(\\.gz)?$", "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" }, - "existing_hmms": { + "existing_hmms_to_update": { "type": "string", "format": "directory-path", "exists": true, - "description": "Directory containing existing protein family HMM models. These models will be used to update the corresponding families." + "description": "Directory containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." }, - "existing_msas": { + "existing_msas_to_update": { "type": "string", "format": "directory-path", "exists": true, - "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process." + "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." } }, "required": ["sample", "fasta"] diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf new file mode 100644 index 0000000..a544def --- /dev/null +++ b/subworkflows/local/update_families.nf @@ -0,0 +1,89 @@ +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { CAT_CAT as CAT_HMMS } from '../../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_MSAS } from '../../modules/nf-core/cat/cat/main' +include { CAT_CAT as CAT_SEQS } from '../../modules/nf-core/cat/cat/main' +include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../../modules/local/extract_family_reps' +include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../../modules/local/extract_family_reps' +include { GET_NONHITS_SEQS } from '../../modules/local/get_nonhits_seqs' +include { FILTER_RECRUITED } from '../../modules/local/filter_recruited' +include { PROCESS_FAMILIES } from '../../subworkflows/local/process_families' + +workflow UPDATE_FAMILIES { + take: + ch_samplesheet_for_update // channel: [meta, sequences, existing_hmms_to_update, existing_msas_to_update] + + main: + ch_versions = Channel.empty() + ch_updated_family_reps = Channel.empty() + ch_no_hit_seqs = Channel.empty() + + // TODO: check that the HMMs and the MSAs match // + + // Squeeze the hmm models into a single file + CAT_HMMS( + ch_samplesheet_for_update.map { meta, _fasta, existing_hmms_to_update, _existing_msas -> + [meta, file("${existing_hmms_to_update}/*.{hmm,hmm.gz}")] + } + ) + + // Prep the sequences to search them against the HMM concatenated model of families // + ch_samplesheet_for_update = ch_samplesheet_for_update + .join( + CAT_HMMS.out.file_out + ) + .map { meta, fasta, _existing_hmms, existing_msas_to_update, concatenated_hmm -> + [meta, fasta, concatenated_hmm, existing_msas_to_update] + } + + HMMER_HMMSEARCH( + ch_samplesheet_for_update.map { meta, fasta, concatenated_hmm, _existing_msas -> + [meta, concatenated_hmm, fasta, false, false, true] + } + ) + + // We only keep those sequences that match the HMM models with the families to update, the seqs that don't match + // are sent to the "create families mode" + GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) + ch_versions = ch_versions.mix( GET_NONHITS_SEQS.out.versions ) + ch_no_hit_seqs = GET_NONHITS_SEQS.out.fasta + + FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) + ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + + // Get the sequences from the MSAs + CAT_MSAS( + ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas_to_update -> + [meta, file("${existing_msas_to_update}/*.{aln,aln.gz}")] + } + ) + ch_versions = ch_versions.mix(CAT_MSAS.out.versions) + + // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta + SEQKIT_SEQ( CAT_MSAS.out.file_out ) + ch_versions = ch_versions.mix( SEQKIT_SEQ.out.versions ) + + // Add the sequences that match with the seqs from the MSAs + // TOOD: this is untested + CAT_SEQS( + SEQKIT_SEQ.out.fastx.join( + FILTER_RECRUITED.out.fasta, + by: [0] + ).map { meta, msas_fasta, filtered_fastas -> + [ + [meta, [msas_fasta, filtered_fastas]] + ] + } + ) + ch_versions = ch_versions.mix(CAT_SEQS.out.versions) + + // Process-update existing families + PROCESS_FAMILIES( CAT_SEQS.out.file_out ) + ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) + ch_updated_family_reps = PROCESS_FAMILIES.out.family_reps + + emit: + versions = ch_versions + no_hit_seqs = ch_no_hit_seqs + updated_family_reps = ch_updated_family_reps +} diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 7534e9c..1788aa1 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -18,21 +18,8 @@ include { MULTIQC } from '../modules // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { PROCESS_FAMILIES as PROCESS_FAMILIES_NEW } from '../subworkflows/local/process_families' -include { PROCESS_FAMILIES as PROCESS_FAMILIES_UPDATE } from '../subworkflows/local/process_families' - -// -// MODULE: Local to the pipeline -// -include { HMMER_HMMSEARCH } from '../modules/nf-core/hmmer/hmmsearch/main' -include { CAT_CAT as CAT_HMMS } from '../modules/nf-core/cat/cat/main' -include { CAT_CAT as CAT_MSAS } from '../modules/nf-core/cat/cat/main' -include { CAT_CAT as CAT_SEQS } from '../modules/nf-core/cat/cat/main' -include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' -include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../modules/local/extract_family_reps' -include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../modules/local/extract_family_reps' -include { GET_NONHITS_SEQS } from '../modules/local/get_nonhits_seqs' -include { FILTER_RECRUITED } from '../modules/local/filter_recruited' +include { UPDATE_FAMILIES } from '../subworkflows/local/update_families' +include { PROCESS_FAMILIES } from '../subworkflows/local/process_families' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -46,23 +33,19 @@ workflow PROTEINFAMILIES { main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() + ch_family_reps = Channel.empty() ch_samplesheet_for_create = Channel.empty() ch_samplesheet_for_update = Channel.empty() - ch_samplesheet - .branch { _meta, _fasta, existing_hmms, existing_msas -> - to_create: !existing_hmms?.size() && !existing_msas?.size() - to_update: existing_hmms?.size() && existing_msas?.size() - } - .set { - branch_result + .branch { _meta, _fasta, existing_hmms_to_update, existing_msas_to_update -> + to_create: !existing_hmms_to_update?.size() && !existing_msas_to_update?.size() + to_update: existing_hmms_to_update?.size() && existing_msas_to_update?.size() } - - ch_family_reps = Channel.empty() + .set { branch_result } /************************************/ /* Splitting the samplesheet into 2 */ @@ -75,93 +58,18 @@ workflow PROTEINFAMILIES { ch_samplesheet_for_create = branch_result.to_create.map { meta, fasta, _existing_hmms, _existing_msas -> [meta, fasta] } ch_samplesheet_for_update = branch_result.to_update - /**********************/ - /* UPDATE SUBWORKFLOW */ - /**********************/ if (branch_result.to_update) { + UPDATE_FAMILIES( ch_samplesheet_for_update ) + ch_versions = ch_versions.mix( UPDATE_FAMILIES.out.versions ) - // TODO: check that the HMMs and the MSAs match // - - // Squeeze the hmm models into a single file - CAT_HMMS( - ch_samplesheet_for_update.map { meta, _fasta, existing_hmms, _existing_msas -> - [meta, file("${existing_hmms}/*.{hmm,hmm.gz}")] - } - ) - - // Prep the sequences to search them against the HMM concatenated model of families // - ch_samplesheet_for_update = ch_samplesheet_for_update - .join( - CAT_HMMS.out.file_out - ) - .map { meta, fasta, _existing_hmms, existing_msas, concatenated_hmm -> - [meta, fasta, concatenated_hmm, existing_msas] - } - - HMMER_HMMSEARCH( - ch_samplesheet_for_update.map { meta, fasta, concatenated_hmm, _existing_msas -> - [meta, concatenated_hmm, fasta, false, false, true] - } - ) - - // We only keep those sequences that match the HMM models with the families to update, the seqs that don't match - // are sent to the "create families mode" - GET_NONHITS_SEQS( - ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) - ) - ch_versions = ch_versions.mix(GET_NONHITS_SEQS.out.versions) - - FILTER_RECRUITED( - HMMER_HMMSEARCH.out.alignments, - HMMER_HMMSEARCH.out.domain_summary, - params.hmmsearch_query_length_threshold, - ) - ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) - - // Get the sequences from the MSAs - CAT_MSAS( - ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas -> - [meta, file("${existing_msas}/*.{aln,aln.gz}")] - } - ) - ch_versions = ch_versions.mix(CAT_MSAS.out.versions) - - // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta - SEQKIT_SEQ(CAT_MSAS.out.file_out) - ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) - - // Add the sequences that match with the seqs from the MSAs - // TOOD: this is untested - CAT_SEQS( - SEQKIT_SEQ.out.fastx.join( - FILTER_RECRUITED.out.fasta, - by: [0] - ).map { meta, msas_fasta, filtered_fastas -> - [ - [meta, [msas_fasta, filtered_fastas]] - ] - } - ) - ch_versions = ch_versions.mix(CAT_SEQS.out.versions) - - // Process existing families - PROCESS_FAMILIES_UPDATE( - CAT_SEQS.out.file_out - ) - ch_versions = ch_versions.mix(PROCESS_FAMILIES_UPDATE.out.versions) - - ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_UPDATE.out.family_reps) - - // Process new families - ch_samplesheet_for_create = ch_samplesheet_for_create.mix(GET_NONHITS_SEQS.out.fasta) + ch_family_reps = ch_family_reps.mix( UPDATE_FAMILIES.out.updated_family_reps ) + ch_samplesheet_for_create = ch_samplesheet_for_create.mix( UPDATE_FAMILIES.out.no_hit_seqs ) } - PROCESS_FAMILIES_NEW( - ch_samplesheet_for_create - ) - ch_versions = ch_versions.mix(PROCESS_FAMILIES_NEW.out.versions) + PROCESS_FAMILIES( ch_samplesheet_for_create ) + ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) - ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES_NEW.out.family_reps) + ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES.out.family_reps) // // Collate and save software versions From 2dd40f764c8d594e3164a1a4f3ac9f77ed4317f7 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 23 Dec 2024 13:51:49 +0000 Subject: [PATCH 070/139] restructured update_families until hmmer_hmmsearch --- conf/modules.config | 40 ++++++++++++++++++++------- subworkflows/local/update_families.nf | 35 ++++++++++++----------- workflows/proteinfamilies.nf | 3 +- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 2e5547a..d123077 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,8 +18,25 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] + // FIXME: We need to handle the CAT_CAT ones now, in the update we cat HMMs and MSAs, in normal mode, HMMs + withName: 'CAT_CAT' { + publishDir = [ + path: { "${params.outdir}/update_families/hmmer/concatenated" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + // TODO check if keep withName: 'SEQKIT_SEQ' { ext.args = "--remove-gaps" + publishDir = [ + path: { "${params.outdir}/seqkit/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'MMSEQS_CREATEDB' { @@ -214,6 +231,19 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:HMMER_HMMSEARCH' { + ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } + ext.prefix = { "${meta.id}" } + tag = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/hmmer/hmmsearch/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.{domtbl.gz}", + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:HMMER_HMMSEARCH' { ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } ext.prefix = { "${meta.id}" } @@ -238,16 +268,6 @@ process { ] } - // FIXME: We need to handle the CAT_CAT ones now, in the update we cat hmms and msas - // withName: 'CAT_CAT' { - // publishDir = [ - // path: { "${params.outdir}/hmmer/hmmbuild/pre_non_redundant/concatenated/" }, - // mode: params.publish_dir_mode, - // enabled: false, - // saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - // ] - // } - withName: 'REMOVE_REDUNDANT_FAMS' { publishDir = [ path: { "${params.outdir}/remove_redundancy/non_redundant_fams/${meta.id}/" }, diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index a544def..1a56ade 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -26,29 +26,32 @@ workflow UPDATE_FAMILIES { [meta, file("${existing_hmms_to_update}/*.{hmm,hmm.gz}")] } ) + ch_versions = ch_versions.mix( CAT_HMMS.out.versions ) // Prep the sequences to search them against the HMM concatenated model of families // - ch_samplesheet_for_update = ch_samplesheet_for_update - .join( - CAT_HMMS.out.file_out - ) - .map { meta, fasta, _existing_hmms, existing_msas_to_update, concatenated_hmm -> - [meta, fasta, concatenated_hmm, existing_msas_to_update] - } + CAT_HMMS.out.file_out + .combine(ch_samplesheet_for_update, by: 0) + .map { meta, concatenated_hmm, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, concatenated_hmm, fasta, false, false, true] } + .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH( - ch_samplesheet_for_update.map { meta, fasta, concatenated_hmm, _existing_msas -> - [meta, concatenated_hmm, fasta, false, false, true] - } - ) + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + + // TODO continue + HMMER_HMMSEARCH.out.domain_summary + .combine(ch_samplesheet_for_update, by: 0) + .map { meta, domtbl, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, domtbl, fasta] } + .set { ch_input_for_split_hits } + + // TODO new module SPLIT_HITS: outputs: 1. hit_family_seqs (family name for filename, to then map to id), 2. non_hit seqs - // We only keep those sequences that match the HMM models with the families to update, the seqs that don't match - // are sent to the "create families mode" - GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) + // We only keep those sequences that match the HMM models (filtered with length thresholds and evalue) with the families to update, + // the seqs that don't match are sent to the "create new families mode" + GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) // TODO with domtbl instead in SPLIT_HITS ch_versions = ch_versions.mix( GET_NONHITS_SEQS.out.versions ) ch_no_hit_seqs = GET_NONHITS_SEQS.out.fasta - FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) + FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) // TODO remove ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) // Get the sequences from the MSAs diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 1788aa1..a73f215 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -68,8 +68,7 @@ workflow PROTEINFAMILIES { PROCESS_FAMILIES( ch_samplesheet_for_create ) ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) - - ch_family_reps = ch_family_reps.mix(PROCESS_FAMILIES.out.family_reps) + ch_family_reps = ch_family_reps.mix( PROCESS_FAMILIES.out.family_reps ) // // Collate and save software versions From c7c3df63a2f7e2c86c44d6176b4f0a5bac24002e Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 09:48:49 +0000 Subject: [PATCH 071/139] branch hits fasta --- bin/branch_hits_fasta.py | 178 +++++++++++++++++++++++++ modules/local/branch_hits_fasta.nf | 39 ++++++ subworkflows/local/process_families.nf | 66 --------- subworkflows/local/update_families.nf | 123 +++++++++-------- workflows/proteinfamilies.nf | 57 ++++++-- 5 files changed, 331 insertions(+), 132 deletions(-) create mode 100755 bin/branch_hits_fasta.py create mode 100644 modules/local/branch_hits_fasta.nf delete mode 100644 subworkflows/local/process_families.nf diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py new file mode 100755 index 0000000..0e881c1 --- /dev/null +++ b/bin/branch_hits_fasta.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python + +import sys +import argparse +import os +import gzip +from Bio import SeqIO +from Bio.SeqRecord import SeqRecord +from Bio.Seq import Seq + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "-f", + "--fasta", + required=True, + metavar="FILE", + type=str, + help="Input fasta file.", + ) + parser.add_argument( + "-d", + "--domtbl", + required=True, + metavar="FILE", + type=str, + help="Domain summary annotations result from hmmsearch.", + ) + parser.add_argument( + "-l", + "--length_threshold", + required=True, + metavar="FLOAT", + type=float, + help="Minimum length percentage threshold of annotated domain (env) against query to keep.", + ) + parser.add_argument( + "-H", + "--hits", + required=True, + metavar="FOLDER", + type=str, + help="Name of the output folder with hit fasta files (one file per family, where the filename is the family id).", + ) + parser.add_argument( + "-n", + "--non_hits", + required=True, + metavar="FILE", + type=str, + help="Name of the output fasta file with the non hit sequences.", + ) + return parser.parse_args(args) + + +def filter_sequences(domtbl, length_threshold): + results = {} + + # Open the domtbl file (supporting gzip) + open_func = gzip.open if domtbl.endswith(".gz") else open + with open_func(domtbl, "rt") as file: + for line in file: + # Skip comment lines + if line.startswith("#"): + continue + + # Split line into columns + columns = line.split() + if len(columns) < 21: # Ensure enough columns are present + continue + + # Extract required values + qlen = float(columns[5]) + env_from = int(columns[19]) + env_to = int(columns[20]) + env_length = env_to - env_from + 1 + + # Apply the length threshold filter + if env_length >= length_threshold * qlen: + sequence_name = columns[0] + ali_from = int(columns[17]) + ali_to = int(columns[18]) + query_name = columns[3] + + if query_name not in results: + results[query_name] = set() + results[query_name].add(f"{sequence_name}/{ali_from}-{ali_to}") + + return results + + +# Open the file with gzip if it's gzipped, otherwise open normally +def open_fasta(file_path): + if file_path.endswith(".gz"): + return gzip.open(file_path, "rt") # Open gzipped file in text mode + return open(file_path, "rt") # Open plain text file + + +# Parse the file +def parse_fasta(file_path): + with open_fasta(file_path) as file: + return {record.id: record for record in SeqIO.parse(file, "fasta")} + + +def write_non_hit_sequences(filtered_sequences, sequences, non_hits): + # Determine the non-hit sequences + hit_sequence_names = {hit.split("/")[0] for hits in filtered_sequences.values() for hit in hits} + non_hit_records = [ + record for name, record in sequences.items() + if name not in hit_sequence_names + ] + + # Write the non-hit sequences to a gzipped file + with gzip.open(non_hits, "wt") as non_hits_file: # 'wt' mode for text writing + SeqIO.write(non_hit_records, non_hits_file, "fasta") + print(f"Written {len(non_hit_records)} non-hit sequences to {non_hits}") + + +def write_family_fastas(results, sequences, output_dir): + # Create the output directory if it doesn't exist + os.makedirs(output_dir, exist_ok=True) + + for family, hits in results.items(): + family_records = [] + + for hit in hits: + try: + sequence_name, range_part = hit.split("/") + ali_from, ali_to = map(int, range_part.split("-")) + + # Get the original sequence + original_record = sequences[sequence_name] + + # Extract the specific range (adjust indices for 0-based indexing) + extracted_seq = original_record.seq[ali_from-1:ali_to] + + # Determine the new sequence ID + if len(extracted_seq) == len(original_record.seq): + new_id = sequence_name # Omit range if full-length + else: + new_id = f"{sequence_name}/{ali_from}-{ali_to}" + + # Create a new SeqRecord for the extracted range + new_record = SeqRecord( + Seq(extracted_seq), + id=new_id, + description="" # Clear description + ) + family_records.append(new_record) + except KeyError: + print(f"Sequence {sequence_name} not found in the input FASTA.") + except ValueError: + print(f"Invalid range format for hit: {hit}") + + # Write the extracted sequences to a FASTA file for the family + if family_records: + family_fasta_path = os.path.join(output_dir, f"{family}.fasta") + SeqIO.write(family_records, family_fasta_path, "fasta") + print(f"Written {len(family_records)} sequences to {family_fasta_path}") + + +def filter_recruited(fasta, domtbl, length_threshold, hits, non_hits): + filtered_sequences = filter_sequences(domtbl, length_threshold) + sequences = parse_fasta(fasta) + write_non_hit_sequences(filtered_sequences, sequences, non_hits) + write_family_fastas(filtered_sequences, sequences, hits) + + +def main(args=None): + args = parse_args(args) + filter_recruited( + args.fasta, args.domtbl, args.length_threshold, args.hits, args.non_hits + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/modules/local/branch_hits_fasta.nf b/modules/local/branch_hits_fasta.nf new file mode 100644 index 0000000..0bc14a2 --- /dev/null +++ b/modules/local/branch_hits_fasta.nf @@ -0,0 +1,39 @@ +process BRANCH_HITS_FASTA { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::biopython=1.84" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : + 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" + + input: + tuple val(meta) , path(fasta) + tuple val(meta2), path(domtbl) + val(length_threshold) + + output: + tuple val(meta), path("hits/*") , emit: hits + tuple val(meta), path("*.fasta.gz"), emit: non_hit_fasta + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + branch_hits_fasta.py \\ + --fasta ${fasta} \\ + --domtbl ${domtbl} \\ + --length_threshold ${length_threshold} \\ + --hits hits \\ + --non_hits ${prefix}.fasta.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + END_VERSIONS + """ +} diff --git a/subworkflows/local/process_families.nf b/subworkflows/local/process_families.nf deleted file mode 100644 index bd34824..0000000 --- a/subworkflows/local/process_families.nf +++ /dev/null @@ -1,66 +0,0 @@ -include { CHUNK_CLUSTERS } from '../../modules/local/chunk_clusters.nf' -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps' - -include { EXECUTE_CLUSTERING } from './execute_clustering' -include { GENERATE_FAMILIES } from './generate_families' -include { REMOVE_REDUNDANCY } from './remove_redundancy' - - -workflow PROCESS_FAMILIES { - take: - ch_sequences // channel: [meta, sequences] - - main: - ch_versions = Channel.empty() - - // Avoid clustering or generating families with less sequences than params.cluster_size_threshold - // TODO: review this - ch_sequences = ch_sequences.filter { _map, seqs -> - { - seqs.countFasta() >= params.cluster_size_threshold - } - } - - // Clustering - EXECUTE_CLUSTERING(ch_sequences) - ch_versions = ch_versions.mix(EXECUTE_CLUSTERING.out.versions) - - // Join together to ensure in sync - ch_input_for_cluster_chunking = ch_sequences - .join(EXECUTE_CLUSTERING.out.clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [meta, seqs] - clusters: [meta, clusters] - } - - CHUNK_CLUSTERS( - ch_input_for_cluster_chunking.clusters, - ch_input_for_cluster_chunking.seqs, - params.cluster_size_threshold, - ) - ch_versions = ch_versions.mix(CHUNK_CLUSTERS.out.versions) - - // Multiple sequence alignment and family generation - GENERATE_FAMILIES( - ch_sequences, - CHUNK_CLUSTERS.out.fasta_chunks, - ) - ch_versions = ch_versions.mix(GENERATE_FAMILIES.out.versions) - - // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) - - // Post-processing - REMOVE_REDUNDANCY.out.msa - .map { meta, aln -> [ [id: meta.id], aln ] } - .groupTuple(by: 0) - .set { ch_msa } - - EXTRACT_FAMILY_REPS(ch_msa) - ch_versions = ch_versions.mix(EXTRACT_FAMILY_REPS.out.versions) - - emit: - family_reps = EXTRACT_FAMILY_REPS.out.map - versions = ch_versions -} diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 1a56ade..9d337e7 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -1,13 +1,16 @@ -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { CAT_CAT as CAT_HMMS } from '../../modules/nf-core/cat/cat/main' -include { CAT_CAT as CAT_MSAS } from '../../modules/nf-core/cat/cat/main' -include { CAT_CAT as CAT_SEQS } from '../../modules/nf-core/cat/cat/main' -include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' -include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../../modules/local/extract_family_reps' -include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../../modules/local/extract_family_reps' -include { GET_NONHITS_SEQS } from '../../modules/local/get_nonhits_seqs' -include { FILTER_RECRUITED } from '../../modules/local/filter_recruited' -include { PROCESS_FAMILIES } from '../../subworkflows/local/process_families' +include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' + +// include { CAT_CAT as CAT_HMMS } from '../../modules/nf-core/cat/cat/main' +// include { CAT_CAT as CAT_MSAS } from '../../modules/nf-core/cat/cat/main' +// include { CAT_CAT as CAT_SEQS } from '../../modules/nf-core/cat/cat/main' +// include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' +// include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../../modules/local/extract_family_reps' +// include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../../modules/local/extract_family_reps' +// include { GET_NONHITS_SEQS } from '../../modules/local/get_nonhits_seqs' +// include { FILTER_RECRUITED } from '../../modules/local/filter_recruited' +// include { PROCESS_FAMILIES } from '../../subworkflows/local/process_families' workflow UPDATE_FAMILIES { take: @@ -20,16 +23,16 @@ workflow UPDATE_FAMILIES { // TODO: check that the HMMs and the MSAs match // - // Squeeze the hmm models into a single file - CAT_HMMS( + // Squeeze the HMMs into a single file + CAT_CAT( ch_samplesheet_for_update.map { meta, _fasta, existing_hmms_to_update, _existing_msas -> [meta, file("${existing_hmms_to_update}/*.{hmm,hmm.gz}")] } ) - ch_versions = ch_versions.mix( CAT_HMMS.out.versions ) + ch_versions = ch_versions.mix( CAT_CAT.out.versions ) - // Prep the sequences to search them against the HMM concatenated model of families // - CAT_HMMS.out.file_out + // Prep the sequences to search against the HMM concatenated model of families + CAT_CAT.out.file_out .combine(ch_samplesheet_for_update, by: 0) .map { meta, concatenated_hmm, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, concatenated_hmm, fasta, false, false, true] } .set { ch_input_for_hmmsearch } @@ -37,53 +40,59 @@ workflow UPDATE_FAMILIES { HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - // TODO continue - HMMER_HMMSEARCH.out.domain_summary - .combine(ch_samplesheet_for_update, by: 0) - .map { meta, domtbl, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, domtbl, fasta] } - .set { ch_input_for_split_hits } + ch_input_for_branch_hits = HMMER_HMMSEARCH.out.domain_summary + .join(ch_samplesheet_for_update) + .multiMap { meta, domtbl, fasta, _existing_hmms_to_update, _existing_msas_to_update -> + domtbl: [ meta, domtbl ] + fasta: [ meta, fasta ] + } - // TODO new module SPLIT_HITS: outputs: 1. hit_family_seqs (family name for filename, to then map to id), 2. non_hit seqs + // Branch hit families/fasta proteins from non hit fasta proteins + BRANCH_HITS_FASTA ( ch_input_for_branch_hits.fasta, ch_input_for_branch_hits.domtbl, params.hmmsearch_query_length_threshold ) + ch_versions = ch_versions.mix( BRANCH_HITS_FASTA.out.versions ) + ch_no_hit_seqs = BRANCH_HITS_FASTA.out.non_hit_fasta + // BRANCH_HITS_FASTA.out.hits,view() - // We only keep those sequences that match the HMM models (filtered with length thresholds and evalue) with the families to update, - // the seqs that don't match are sent to the "create new families mode" - GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) // TODO with domtbl instead in SPLIT_HITS - ch_versions = ch_versions.mix( GET_NONHITS_SEQS.out.versions ) - ch_no_hit_seqs = GET_NONHITS_SEQS.out.fasta - FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) // TODO remove - ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + // // We only keep those sequences that match the HMM models (filtered with length thresholds and evalue) with the families to update, + // // the seqs that don't match are sent to the "create new families mode" + // GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) // TODO with domtbl instead in SPLIT_HITS + // ch_versions = ch_versions.mix( GET_NONHITS_SEQS.out.versions ) + // ch_no_hit_seqs = GET_NONHITS_SEQS.out.fasta - // Get the sequences from the MSAs - CAT_MSAS( - ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas_to_update -> - [meta, file("${existing_msas_to_update}/*.{aln,aln.gz}")] - } - ) - ch_versions = ch_versions.mix(CAT_MSAS.out.versions) - - // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta - SEQKIT_SEQ( CAT_MSAS.out.file_out ) - ch_versions = ch_versions.mix( SEQKIT_SEQ.out.versions ) - - // Add the sequences that match with the seqs from the MSAs - // TOOD: this is untested - CAT_SEQS( - SEQKIT_SEQ.out.fastx.join( - FILTER_RECRUITED.out.fasta, - by: [0] - ).map { meta, msas_fasta, filtered_fastas -> - [ - [meta, [msas_fasta, filtered_fastas]] - ] - } - ) - ch_versions = ch_versions.mix(CAT_SEQS.out.versions) + // FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) // TODO remove + // ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + + // // Get the sequences from the MSAs + // CAT_MSAS( + // ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas_to_update -> + // [meta, file("${existing_msas_to_update}/*.{aln,aln.gz}")] + // } + // ) + // ch_versions = ch_versions.mix(CAT_MSAS.out.versions) + + // // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta + // SEQKIT_SEQ( CAT_MSAS.out.file_out ) + // ch_versions = ch_versions.mix( SEQKIT_SEQ.out.versions ) + + // // Add the sequences that match with the seqs from the MSAs + // // TOOD: this is untested + // CAT_SEQS( + // SEQKIT_SEQ.out.fastx.join( + // FILTER_RECRUITED.out.fasta, + // by: [0] + // ).map { meta, msas_fasta, filtered_fastas -> + // [ + // [meta, [msas_fasta, filtered_fastas]] + // ] + // } + // ) + // ch_versions = ch_versions.mix(CAT_SEQS.out.versions) - // Process-update existing families - PROCESS_FAMILIES( CAT_SEQS.out.file_out ) - ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) - ch_updated_family_reps = PROCESS_FAMILIES.out.family_reps + // // Process-update existing families + // PROCESS_FAMILIES( CAT_SEQS.out.file_out ) + // ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) + // ch_updated_family_reps = PROCESS_FAMILIES.out.family_reps emit: versions = ch_versions diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index a73f215..6b38f3d 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -3,11 +3,11 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { paramsSummaryMap } from 'plugin/nf-schema' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' -include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -19,7 +19,15 @@ include { MULTIQC } from '../modules // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { UPDATE_FAMILIES } from '../subworkflows/local/update_families' -include { PROCESS_FAMILIES } from '../subworkflows/local/process_families' +include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' +include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' +include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' + +// +// MODULE: Local to the pipeline +// +include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters.nf' +include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,6 +66,7 @@ workflow PROTEINFAMILIES { ch_samplesheet_for_create = branch_result.to_create.map { meta, fasta, _existing_hmms, _existing_msas -> [meta, fasta] } ch_samplesheet_for_update = branch_result.to_update + // Updating existing families if (branch_result.to_update) { UPDATE_FAMILIES( ch_samplesheet_for_update ) ch_versions = ch_versions.mix( UPDATE_FAMILIES.out.versions ) @@ -66,9 +75,39 @@ workflow PROTEINFAMILIES { ch_samplesheet_for_create = ch_samplesheet_for_create.mix( UPDATE_FAMILIES.out.no_hit_seqs ) } - PROCESS_FAMILIES( ch_samplesheet_for_create ) - ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) - ch_family_reps = ch_family_reps.mix( PROCESS_FAMILIES.out.family_reps ) + // Creating new families + // Clustering + EXECUTE_CLUSTERING( ch_samplesheet_for_create ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + + // Join together to ensure in sync + ch_input_for_cluster_chunking = ch_samplesheet_for_create + .join(EXECUTE_CLUSTERING.out.clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [ meta, seqs ] + clusters: [ meta, clusters ] + } + + CHUNK_CLUSTERS( ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold ) + ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) + + // Multiple sequence alignment + GENERATE_FAMILIES( ch_samplesheet_for_create, CHUNK_CLUSTERS.out.fasta_chunks ) + ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) + + // Remove redundant sequences and families + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + + // Post-processing + REMOVE_REDUNDANCY.out.msa + .map { meta, aln -> [ [id: meta.id], aln ] } + .groupTuple(by: 0) + .set { ch_msa } + + EXTRACT_FAMILY_REPS( ch_msa ) + ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + ch_family_reps = ch_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) // // Collate and save software versions From 71c39a1b2d173919a7036277cb950c686af659ee Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 09:55:37 +0000 Subject: [PATCH 072/139] cat_cat module config --- conf/modules.config | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index d123077..c83a54f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,7 +18,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - // FIXME: We need to handle the CAT_CAT ones now, in the update we cat HMMs and MSAs, in normal mode, HMMs withName: 'CAT_CAT' { publishDir = [ path: { "${params.outdir}/update_families/hmmer/concatenated" }, @@ -28,6 +27,15 @@ process { ] } + withName: '.*:REMOVE_REDUNDANCY:CAT_CAT' { + publishDir = [ + path: { "${params.outdir}/redundancy_clustering/hmmer/concatenated" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + // TODO check if keep withName: 'SEQKIT_SEQ' { ext.args = "--remove-gaps" From 7d0ee54b53bec72883a4d9fc6918f7b279c04fd6 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 10:19:00 +0000 Subject: [PATCH 073/139] removed unused modules, binding proper family msas with recruited sequences fasta --- bin/get_nonhits_seqs.py | 64 -------- modules.json | 8 - modules/local/get_nonhits_seqs.nf | 35 ----- modules/nf-core/seqkit/seq/environment.yml | 7 - modules/nf-core/seqkit/seq/main.nf | 63 -------- modules/nf-core/seqkit/seq/meta.yml | 51 ------ modules/nf-core/seqkit/seq/seqkit-seq.diff | 21 --- modules/nf-core/seqkit/seq/tests/main.nf.test | 145 ------------------ .../seqkit/seq/tests/main.nf.test.snap | 134 ---------------- .../nf-core/seqkit/seq/tests/nextflow.config | 3 - modules/nf-core/seqkit/seq/tests/tags.yml | 2 - subworkflows/local/update_families.nf | 72 +++------ 12 files changed, 24 insertions(+), 581 deletions(-) delete mode 100755 bin/get_nonhits_seqs.py delete mode 100644 modules/local/get_nonhits_seqs.nf delete mode 100644 modules/nf-core/seqkit/seq/environment.yml delete mode 100644 modules/nf-core/seqkit/seq/main.nf delete mode 100644 modules/nf-core/seqkit/seq/meta.yml delete mode 100644 modules/nf-core/seqkit/seq/seqkit-seq.diff delete mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test delete mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test.snap delete mode 100644 modules/nf-core/seqkit/seq/tests/nextflow.config delete mode 100644 modules/nf-core/seqkit/seq/tests/tags.yml diff --git a/bin/get_nonhits_seqs.py b/bin/get_nonhits_seqs.py deleted file mode 100755 index cd30ac3..0000000 --- a/bin/get_nonhits_seqs.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python -import sys -import argparse -import gzip -from Bio import SeqIO, SearchIO - - -def open_file(filename): - """Helper function to open both gzipped and regular files""" - if filename.endswith(".gz"): - return gzip.open(filename, "rt") - return open(filename, "r") - - -def main(): - parser = argparse.ArgumentParser( - description="Get the sequences that are missing from the hmmscan txt output table." - ) - parser.add_argument( - "-d", - "--hmmscantxt", - required=True, - metavar="FILE", - type=str, - help="The hmmsearch txt output (gzipped).", - ) - parser.add_argument( - "-f", - "--fasta", - required=True, - metavar="FILE", - type=str, - help="The FASTA (gzip or not) file containing all the sequences.", - ) - parser.add_argument( - "-o", - "--output", - required=True, - metavar="FILE", - type=str, - help="Output gzipped FASTA file path for sequences without matches.", - ) - args = parser.parse_args() - - # Collect sequence IDs with matches - hit_sequence_ids = set() - with gzip.open(args.hmmscantxt, "rt") as domtable_fh: - for hmmer_result in SearchIO.parse(domtable_fh, "hmmer3-text"): - hit_sequence_ids.add(hmmer_result.id) - - with open_file(args.fasta) as fasta_fl, gzip.open( - args.output, "wt" - ) as fasta_out_fl: - - output_sequences = [] - for record in SeqIO.parse(fasta_fl, "fasta"): - if record.id not in hit_sequence_ids: - output_sequences = [record] - - SeqIO.write(output_sequences, fasta_out_fl, "fasta") - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/modules.json b/modules.json index af4f0a7..9bc1b7a 100644 --- a/modules.json +++ b/modules.json @@ -84,14 +84,6 @@ "installed_by": [ "modules" ] - }, - "seqkit/seq": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ], - "patch": "modules/nf-core/seqkit/seq/seqkit-seq.diff" } } }, diff --git a/modules/local/get_nonhits_seqs.nf b/modules/local/get_nonhits_seqs.nf deleted file mode 100644 index 5619b50..0000000 --- a/modules/local/get_nonhits_seqs.nf +++ /dev/null @@ -1,35 +0,0 @@ -process GET_NONHITS_SEQS { - - tag "$meta.id" - label 'process_single' - - conda "conda-forge::biopython=1.84" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : - 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" - - input: - tuple val(meta), path(fasta), path(hits_txt_table) - - output: - tuple val(meta), path("*.fasta.gz"), emit: fasta - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - get_nonhits_seqs.py \\ - --fasta ${fasta} \\ - --hmmscantxt ${hits_txt_table} \\ - --output ${prefix}.fasta.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") - END_VERSIONS - """ -} diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml deleted file mode 100644 index 4f8058a..0000000 --- a/modules/nf-core/seqkit/seq/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -channels: - - conda-forge - - bioconda -dependencies: - - "bioconda::seqkit=2.8.1" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf deleted file mode 100644 index 529b3a4..0000000 --- a/modules/nf-core/seqkit/seq/main.nf +++ /dev/null @@ -1,63 +0,0 @@ -process SEQKIT_SEQ { - tag "$meta.id" - label 'process_low' - // File IO can be a bottleneck. See: https://bioinf.shenwei.me/seqkit/usage/#parallelization-of-cpu-intensive-jobs - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': - 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" - - input: - tuple val(meta), path(fastx) - - output: - tuple val(meta), path("${prefix}.*") , emit: fastx - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def extension = "fasta" - if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { - extension = "fasta" - } - extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension - def call_gzip = extension.endsWith('.gz') ? "| gzip -c $args2" : '' - if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - seqkit \\ - seq \\ - --threads $task.cpus \\ - $args \\ - $fastx \\ - $call_gzip \\ - > ${prefix}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - seqkit: \$(seqkit version | cut -d' ' -f2) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - def extension = "fastq" - if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { - extension = "fasta" - } - extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension - if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - """ - touch ${prefix}.${extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - seqkit: \$(seqkit version | cut -d' ' -f2) - END_VERSIONS - """ -} diff --git a/modules/nf-core/seqkit/seq/meta.yml b/modules/nf-core/seqkit/seq/meta.yml deleted file mode 100644 index 7d32aba..0000000 --- a/modules/nf-core/seqkit/seq/meta.yml +++ /dev/null @@ -1,51 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: "seqkit_seq" -description: Transforms sequences (extract ID, filter by length, remove gaps, reverse - complement...) -keywords: - - genomics - - fasta - - fastq - - transform - - filter - - gaps - - complement -tools: - - "seqkit": - description: "A cross-platform and ultrafast toolkit for FASTA/Q file manipulation" - homepage: "https://bioinf.shenwei.me/seqkit/" - documentation: "https://bioinf.shenwei.me/seqkit/usage/" - tool_dev_url: "https://github.com/shenwei356/seqkit" - doi: "10.1371/journal.pone.0163962" - licence: ["MIT"] - identifier: biotools:seqkit -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fastx: - type: file - description: Input fasta/fastq file - pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" -output: - - fastx: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - ${prefix}.*: - type: file - description: Output fasta/fastq file - pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@GallVp" -maintainers: - - "@GallVp" diff --git a/modules/nf-core/seqkit/seq/seqkit-seq.diff b/modules/nf-core/seqkit/seq/seqkit-seq.diff deleted file mode 100644 index ef9993d..0000000 --- a/modules/nf-core/seqkit/seq/seqkit-seq.diff +++ /dev/null @@ -1,21 +0,0 @@ -Changes in component 'nf-core/seqkit/seq' -'modules/nf-core/seqkit/seq/environment.yml' is unchanged -Changes in 'seqkit/seq/main.nf': ---- modules/nf-core/seqkit/seq/main.nf -+++ modules/nf-core/seqkit/seq/main.nf -@@ -22,7 +22,7 @@ - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: "${meta.id}" -- def extension = "fastq" -+ def extension = "fasta" - if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { - extension = "fasta" - } - -'modules/nf-core/seqkit/seq/meta.yml' is unchanged -'modules/nf-core/seqkit/seq/tests/tags.yml' is unchanged -'modules/nf-core/seqkit/seq/tests/nextflow.config' is unchanged -'modules/nf-core/seqkit/seq/tests/main.nf.test.snap' is unchanged -'modules/nf-core/seqkit/seq/tests/main.nf.test' is unchanged -************************************************************ diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test b/modules/nf-core/seqkit/seq/tests/main.nf.test deleted file mode 100644 index 9fd1c08..0000000 --- a/modules/nf-core/seqkit/seq/tests/main.nf.test +++ /dev/null @@ -1,145 +0,0 @@ -nextflow_process { - - name "Test Process SEQKIT_SEQ" - script "../main.nf" - process "SEQKIT_SEQ" - config './nextflow.config' - - tag "modules" - tag "modules_nfcore" - tag "seqkit" - tag "seqkit/seq" - - test("sarscov2-genome_fasta") { - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - ) - } - - } - - test("sarscov2-genome_fasta_gz") { - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - ) - } - - } - - test("sarscov2-test_1_fastq_gz") { - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - ) - } - - } - - test("file_name_conflict-fail_with_error") { - when { - process { - """ - input[0] = [ - [ id:'test_1' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert !process.success }, - { assert process.stdout.toString().contains("Input and output names are the same") } - ) - } - - } - - test("sarscov2-genome_fasta-stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() }, - ) - } - - } - - test("file_name_conflict-fail_with_error-stub") { - - options '-stub' - - when { - process { - """ - input[0] = [ - [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert !process.success }, - { assert process.stdout.toString().contains("Input and output names are the same") } - ) - } - - } - -} diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap deleted file mode 100644 index e691096..0000000 --- a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap +++ /dev/null @@ -1,134 +0,0 @@ -{ - "sarscov2-genome_fasta-stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ], - "fastx": [ - [ - { - "id": "test" - }, - "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T08:52:18.220051903" - }, - "sarscov2-test_1_fastq_gz": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ], - "fastx": [ - [ - { - "id": "test" - }, - "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" - ] - ], - "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T08:51:55.607826581" - }, - "sarscov2-genome_fasta": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" - ] - ], - "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ], - "fastx": [ - [ - { - "id": "test" - }, - "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" - ] - ], - "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T08:51:27.717072933" - }, - "sarscov2-genome_fasta_gz": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" - ] - ], - "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ], - "fastx": [ - [ - { - "id": "test" - }, - "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" - ] - ], - "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-08T08:51:37.917560104" - } -} \ No newline at end of file diff --git a/modules/nf-core/seqkit/seq/tests/nextflow.config b/modules/nf-core/seqkit/seq/tests/nextflow.config deleted file mode 100644 index d8e3c66..0000000 --- a/modules/nf-core/seqkit/seq/tests/nextflow.config +++ /dev/null @@ -1,3 +0,0 @@ -process { - ext.args2 = '-n' -} diff --git a/modules/nf-core/seqkit/seq/tests/tags.yml b/modules/nf-core/seqkit/seq/tests/tags.yml deleted file mode 100644 index 5eeca7e..0000000 --- a/modules/nf-core/seqkit/seq/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -seqkit/seq: - - "modules/nf-core/seqkit/seq/**" diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 9d337e7..7b3e516 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -2,16 +2,6 @@ include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' -// include { CAT_CAT as CAT_HMMS } from '../../modules/nf-core/cat/cat/main' -// include { CAT_CAT as CAT_MSAS } from '../../modules/nf-core/cat/cat/main' -// include { CAT_CAT as CAT_SEQS } from '../../modules/nf-core/cat/cat/main' -// include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' -// include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_CREATION } from '../../modules/local/extract_family_reps' -// include { EXTRACT_FAMILY_REPS as EXTRACT_FAMILY_REPS_UPDATE } from '../../modules/local/extract_family_reps' -// include { GET_NONHITS_SEQS } from '../../modules/local/get_nonhits_seqs' -// include { FILTER_RECRUITED } from '../../modules/local/filter_recruited' -// include { PROCESS_FAMILIES } from '../../subworkflows/local/process_families' - workflow UPDATE_FAMILIES { take: ch_samplesheet_for_update // channel: [meta, sequences, existing_hmms_to_update, existing_msas_to_update] @@ -25,7 +15,7 @@ workflow UPDATE_FAMILIES { // Squeeze the HMMs into a single file CAT_CAT( - ch_samplesheet_for_update.map { meta, _fasta, existing_hmms_to_update, _existing_msas -> + ch_samplesheet_for_update.map { meta, _fasta, existing_hmms_to_update, _existing_msas_to_update -> [meta, file("${existing_hmms_to_update}/*.{hmm,hmm.gz}")] } ) @@ -51,48 +41,34 @@ workflow UPDATE_FAMILIES { BRANCH_HITS_FASTA ( ch_input_for_branch_hits.fasta, ch_input_for_branch_hits.domtbl, params.hmmsearch_query_length_threshold ) ch_versions = ch_versions.mix( BRANCH_HITS_FASTA.out.versions ) ch_no_hit_seqs = BRANCH_HITS_FASTA.out.non_hit_fasta - // BRANCH_HITS_FASTA.out.hits,view() - - - // // We only keep those sequences that match the HMM models (filtered with length thresholds and evalue) with the families to update, - // // the seqs that don't match are sent to the "create new families mode" - // GET_NONHITS_SEQS( ch_samplesheet_for_update.map { meta, fasta, _concatenated_hmm, _existing_msas -> [meta, fasta] }.join(HMMER_HMMSEARCH.out.output) ) // TODO with domtbl instead in SPLIT_HITS - // ch_versions = ch_versions.mix( GET_NONHITS_SEQS.out.versions ) - // ch_no_hit_seqs = GET_NONHITS_SEQS.out.fasta - // FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) // TODO remove - // ch_versions = ch_versions.mix(HMMER_HMMSEARCH.out.versions) + BRANCH_HITS_FASTA.out.hits + .transpose() + .map { meta, file -> + def baseName = file.toString().split('/')[-1].split('\\.')[0] + [[id: meta.id, family: baseName], file] + } + .set { hits_fasta } - // // Get the sequences from the MSAs - // CAT_MSAS( - // ch_samplesheet_for_update.map { meta, _fasta, _concatenated_hmm, existing_msas_to_update -> - // [meta, file("${existing_msas_to_update}/*.{aln,aln.gz}")] - // } - // ) - // ch_versions = ch_versions.mix(CAT_MSAS.out.versions) + ch_samplesheet_for_update + .map { meta, _fasta, _existing_hmms_to_update, existing_msas_to_update -> + [meta, file("${existing_msas_to_update}/*")] + } + .transpose() + .map { meta, file -> + def baseName = file.toString().split('/')[-1].split('\\.')[0] + [[id: meta.id, family: baseName], file] + } + .set { family_msas } - // // An .aln is basically a fasta file with gaps, seqkit - seq will remove the gaps to create a traditional fasta - // SEQKIT_SEQ( CAT_MSAS.out.file_out ) - // ch_versions = ch_versions.mix( SEQKIT_SEQ.out.versions ) + // Match newly recruited sequences with existing ones for each family + hits_fasta + .combine(family_msas, by: 0) + .set { ch_input_for_updates } + ch_input_for_updates.view() - // // Add the sequences that match with the seqs from the MSAs - // // TOOD: this is untested - // CAT_SEQS( - // SEQKIT_SEQ.out.fastx.join( - // FILTER_RECRUITED.out.fasta, - // by: [0] - // ).map { meta, msas_fasta, filtered_fastas -> - // [ - // [meta, [msas_fasta, filtered_fastas]] - // ] - // } - // ) - // ch_versions = ch_versions.mix(CAT_SEQS.out.versions) + // Aggregate each family's MSA sequences with the newly recruited ones - // // Process-update existing families - // PROCESS_FAMILIES( CAT_SEQS.out.file_out ) - // ch_versions = ch_versions.mix( PROCESS_FAMILIES.out.versions ) - // ch_updated_family_reps = PROCESS_FAMILIES.out.family_reps emit: versions = ch_versions From c2e20f155f52f6b7a817036abcda1576edbb7c78 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 10:55:44 +0000 Subject: [PATCH 074/139] seqkit + cat fasta with family specific msa --- conf/modules.config | 12 +- modules.json | 63 +++----- modules/nf-core/seqkit/seq/environment.yml | 7 + modules/nf-core/seqkit/seq/main.nf | 63 ++++++++ modules/nf-core/seqkit/seq/meta.yml | 51 ++++++ modules/nf-core/seqkit/seq/tests/main.nf.test | 145 ++++++++++++++++++ .../seqkit/seq/tests/main.nf.test.snap | 134 ++++++++++++++++ .../nf-core/seqkit/seq/tests/nextflow.config | 3 + modules/nf-core/seqkit/seq/tests/tags.yml | 2 + subworkflows/local/update_families.nf | 24 ++- 10 files changed, 453 insertions(+), 51 deletions(-) create mode 100644 modules/nf-core/seqkit/seq/environment.yml create mode 100644 modules/nf-core/seqkit/seq/main.nf create mode 100644 modules/nf-core/seqkit/seq/meta.yml create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test create mode 100644 modules/nf-core/seqkit/seq/tests/main.nf.test.snap create mode 100644 modules/nf-core/seqkit/seq/tests/nextflow.config create mode 100644 modules/nf-core/seqkit/seq/tests/tags.yml diff --git a/conf/modules.config b/conf/modules.config index c83a54f..d45ab5e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -27,6 +27,17 @@ process { ] } + withName: 'CAT_FASTA' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/fasta" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:CAT_CAT' { publishDir = [ path: { "${params.outdir}/redundancy_clustering/hmmer/concatenated" }, @@ -36,7 +47,6 @@ process { ] } - // TODO check if keep withName: 'SEQKIT_SEQ' { ext.args = "--remove-gaps" publishDir = [ diff --git a/modules.json b/modules.json index 9bc1b7a..2059fb1 100644 --- a/modules.json +++ b/modules.json @@ -8,82 +8,65 @@ "cat/cat": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "clipkit": { "branch": "master", "git_sha": "3ef36024bb95d306c63c7bf9014132e62c7b4755", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "famsa/align": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mafft/align": { "branch": "master", "git_sha": "868cb0d7fc4862991fb7c2b4cd7289806cd53f81", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/cluster": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] + }, + "seqkit/seq": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] } } }, @@ -92,26 +75,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml new file mode 100644 index 0000000..4f8058a --- /dev/null +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "bioconda::seqkit=2.8.1" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf new file mode 100644 index 0000000..d7d38fc --- /dev/null +++ b/modules/nf-core/seqkit/seq/main.nf @@ -0,0 +1,63 @@ +process SEQKIT_SEQ { + tag "$meta.id" + label 'process_low' + // File IO can be a bottleneck. See: https://bioinf.shenwei.me/seqkit/usage/#parallelization-of-cpu-intensive-jobs + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': + 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" + + input: + tuple val(meta), path(fastx) + + output: + tuple val(meta), path("${prefix}.*") , emit: fastx + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + def call_gzip = extension.endsWith('.gz') ? "| gzip -c $args2" : '' + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + seqkit \\ + seq \\ + --threads $task.cpus \\ + $args \\ + $fastx \\ + $call_gzip \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + def extension = "fastq" + if ("$fastx" ==~ /.+\.fasta|.+\.fasta.gz|.+\.fa|.+\.fa.gz|.+\.fas|.+\.fas.gz|.+\.fna|.+\.fna.gz|.+\.fsa|.+\.fsa.gz/ ) { + extension = "fasta" + } + extension = fastx.toString().endsWith('.gz') ? "${extension}.gz" : extension + if("${prefix}.${extension}" == "$fastx") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqkit: \$(seqkit version | cut -d' ' -f2) + END_VERSIONS + """ +} diff --git a/modules/nf-core/seqkit/seq/meta.yml b/modules/nf-core/seqkit/seq/meta.yml new file mode 100644 index 0000000..7d32aba --- /dev/null +++ b/modules/nf-core/seqkit/seq/meta.yml @@ -0,0 +1,51 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "seqkit_seq" +description: Transforms sequences (extract ID, filter by length, remove gaps, reverse + complement...) +keywords: + - genomics + - fasta + - fastq + - transform + - filter + - gaps + - complement +tools: + - "seqkit": + description: "A cross-platform and ultrafast toolkit for FASTA/Q file manipulation" + homepage: "https://bioinf.shenwei.me/seqkit/" + documentation: "https://bioinf.shenwei.me/seqkit/usage/" + tool_dev_url: "https://github.com/shenwei356/seqkit" + doi: "10.1371/journal.pone.0163962" + licence: ["MIT"] + identifier: biotools:seqkit +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastx: + type: file + description: Input fasta/fastq file + pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" +output: + - fastx: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - ${prefix}.*: + type: file + description: Output fasta/fastq file + pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@GallVp" +maintainers: + - "@GallVp" diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test b/modules/nf-core/seqkit/seq/tests/main.nf.test new file mode 100644 index 0000000..9fd1c08 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test @@ -0,0 +1,145 @@ +nextflow_process { + + name "Test Process SEQKIT_SEQ" + script "../main.nf" + process "SEQKIT_SEQ" + config './nextflow.config' + + tag "modules" + tag "modules_nfcore" + tag "seqkit" + tag "seqkit/seq" + + test("sarscov2-genome_fasta") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-genome_fasta_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("sarscov2-test_1_fastq_gz") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error") { + when { + process { + """ + input[0] = [ + [ id:'test_1' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + + test("sarscov2-genome_fasta-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("file_name_conflict-fail_with_error-stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("Input and output names are the same") } + ) + } + + } + +} diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap new file mode 100644 index 0000000..e691096 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "sarscov2-genome_fasta-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:52:18.220051903" + }, + "sarscov2-test_1_fastq_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:55.607826581" + }, + "sarscov2-genome_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:27.717072933" + }, + "sarscov2-genome_fasta_gz": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "1": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ], + "fastx": [ + [ + { + "id": "test" + }, + "test.fasta.gz:md5,483f4a5dfe60171c86ee9b7e6dff908b" + ] + ], + "versions": [ + "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-08T08:51:37.917560104" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqkit/seq/tests/nextflow.config b/modules/nf-core/seqkit/seq/tests/nextflow.config new file mode 100644 index 0000000..d8e3c66 --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args2 = '-n' +} diff --git a/modules/nf-core/seqkit/seq/tests/tags.yml b/modules/nf-core/seqkit/seq/tests/tags.yml new file mode 100644 index 0000000..5eeca7e --- /dev/null +++ b/modules/nf-core/seqkit/seq/tests/tags.yml @@ -0,0 +1,2 @@ +seqkit/seq: + - "modules/nf-core/seqkit/seq/**" diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 7b3e516..b6cf42e 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -1,6 +1,8 @@ -include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' +include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' +include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' +include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' workflow UPDATE_FAMILIES { take: @@ -61,14 +63,22 @@ workflow UPDATE_FAMILIES { } .set { family_msas } + // Keep fasta with family sequences by removing gaps + SEQKIT_SEQ( family_msas ) + ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) + // Match newly recruited sequences with existing ones for each family hits_fasta - .combine(family_msas, by: 0) - .set { ch_input_for_updates } - ch_input_for_updates.view() + .combine(SEQKIT_SEQ.out.fastx, by: 0) + .map { meta, new_fasta, family_fasta -> + [meta, [new_fasta, family_fasta]] + } + .set { ch_input_for_cat } // Aggregate each family's MSA sequences with the newly recruited ones - + CAT_FASTA( ch_input_for_cat ) + ch_versions = ch_versions.mix( CAT_FASTA.out.versions ) + CAT_FASTA.out.file_out.view() emit: versions = ch_versions From 7f1a7c620b1ece10da5c95e769316faa411da7ba Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 11:20:06 +0000 Subject: [PATCH 075/139] prefixes up to clustering updated --- conf/modules.config | 59 ++++++++++++++++++++++++- subworkflows/local/remove_redundancy.nf | 3 +- subworkflows/local/update_families.nf | 58 +++++++++++++++++++++--- 3 files changed, 110 insertions(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d45ab5e..2a61582 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -28,8 +28,8 @@ process { } withName: 'CAT_FASTA' { - ext.prefix = { "${meta.family}_${meta.id}" } - tag = { "${meta.family}_${meta.id}" } + ext.prefix = { "${meta.id}_${meta.family}" } + tag = { "${meta.id}_${meta.family}" } publishDir = [ path: { "${params.outdir}/update_families/fasta" }, mode: params.publish_dir_mode, @@ -49,6 +49,8 @@ process { withName: 'SEQKIT_SEQ' { ext.args = "--remove-gaps" + ext.prefix = { "${meta.id}_${meta.family}" } + tag = { "${meta.id}_${meta.family}" } publishDir = [ path: { "${params.outdir}/seqkit/" }, mode: params.publish_dir_mode, @@ -66,6 +68,17 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_CREATEDB' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/mmseqs/update_families/mmseqs_createdb/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATEDB' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -91,6 +104,22 @@ process { ] } + withName: '.*:UPDATE_FAMILIES_CLUSTERING:EXECUTE_CLUSTERING:MMSEQS_CLUSTER' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", + "-c ${params.cluster_coverage_for_redundancy}", + "--cov-mode ${params.cluster_cov_mode_for_redundancy}", + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/update_families/mmseqs_cluster/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CLUSTER' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -121,6 +150,22 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_LINCLUST' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + ext.args = [ + "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", + "-c ${params.cluster_coverage_for_redundancy}", + "--cov-mode ${params.cluster_cov_mode_for_redundancy}", + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/mmseqs/update_families/mmseqs_linclust/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_LINCLUST' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -145,6 +190,16 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_CREATETSV' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/mmseqs/update_families/mmseqs_createtsv/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:EXECUTE_CLUSTERING:MMSEQS_CREATETSV' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 769fa0c..8035ca8 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -84,11 +84,10 @@ workflow REMOVE_REDUNDANCY { if (params.remove_sequence_redundancy) { EXECUTE_CLUSTERING( fasta ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - clustering_tsv = EXECUTE_CLUSTERING.out.clustering_tsv // Join together to ensure in sync ch_input_for_seq_removal = fasta - .join(clustering_tsv) + .join(EXECUTE_CLUSTERING.out.clustering_tsv) .multiMap { meta, seqs, clusters -> seqs: [meta, seqs] clusters: [meta, clusters] diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index b6cf42e..01ba2e7 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -1,8 +1,15 @@ -include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' -include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' -include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' +include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' +include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' +include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' +include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' +include { CLIPKIT } from '../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' +include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' workflow UPDATE_FAMILIES { take: @@ -78,7 +85,46 @@ workflow UPDATE_FAMILIES { // Aggregate each family's MSA sequences with the newly recruited ones CAT_FASTA( ch_input_for_cat ) ch_versions = ch_versions.mix( CAT_FASTA.out.versions ) - CAT_FASTA.out.file_out.view() + + // Strict clustering to remove redundancy + EXECUTE_CLUSTERING( CAT_FASTA.out.file_out ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + + // // TODO prefixes and tags to complete + // // Join together to ensure in sync + // ch_input_for_seq_removal = CAT_FASTA.out.file_out + // .join(EXECUTE_CLUSTERING.out.clustering_tsv) + // .multiMap { meta, seqs, clusters -> + // seqs: [meta, seqs] + // clusters: [meta, clusters] + // } + + // REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + + // ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) + // ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + // ch_msa = ALIGN_SEQUENCES.out.alignments + + // if (params.trim_seed_msa) { + // if (params.clipping_tool == 'clipkit') { + // CLIPKIT( ch_msa ) + // ch_versions = ch_versions.mix( CLIPKIT.out.versions ) + // ch_msa = CLIPKIT.out.clipkit + // } else { // fallback: local module clip_ends + // CLIP_ENDS( ch_msa, params.gap_threshold ) + // ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) + // ch_msa = CLIP_ENDS.out.fas + // } + // } + + // HMMER_HMMBUILD( ch_msa, [] ) + // ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) + // ch_hmm = HMMER_HMMBUILD.out.hmm + + // EXTRACT_FAMILY_REPS( ch_msa ) + // ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + // ch_updated_family_reps = ch_updated_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) emit: versions = ch_versions From ae129a29e52b065624edcce92fe0dbd742ef0c88 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 16:58:40 +0000 Subject: [PATCH 076/139] update_families subworkflow done --- bin/branch_hits_fasta.py | 2 +- conf/modules.config | 89 +++++++++++++++++++++++-- subworkflows/local/update_families.nf | 94 ++++++++++++++------------- 3 files changed, 136 insertions(+), 49 deletions(-) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index 0e881c1..12c4f70 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -145,7 +145,7 @@ def write_family_fastas(results, sequences, output_dir): new_record = SeqRecord( Seq(extracted_seq), id=new_id, - description="" # Clear description + description=family ) family_records.append(new_record) except KeyError: diff --git a/conf/modules.config b/conf/modules.config index 2a61582..53ec41e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -69,7 +69,7 @@ process { } withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_CREATEDB' { - ext.prefix = { "${meta.family}_${meta.id}" } + ext.prefix = { "${meta.family}" } tag = { "${meta.family}_${meta.id}" } publishDir = [ path: { "${params.outdir}/mmseqs/update_families/mmseqs_createdb/" }, @@ -105,7 +105,7 @@ process { } withName: '.*:UPDATE_FAMILIES_CLUSTERING:EXECUTE_CLUSTERING:MMSEQS_CLUSTER' { - ext.prefix = { "${meta.family}_${meta.id}" } + ext.prefix = { "${meta.family}" } tag = { "${meta.family}_${meta.id}" } ext.args = [ "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", @@ -151,7 +151,7 @@ process { } withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_LINCLUST' { - ext.prefix = { "${meta.family}_${meta.id}" } + ext.prefix = { "${meta.family}" } tag = { "${meta.family}_${meta.id}" } ext.args = [ "--min-seq-id ${params.cluster_seq_identity_for_redundancy}", @@ -191,7 +191,7 @@ process { } withName: '.*:UPDATE_FAMILIES:EXECUTE_CLUSTERING:MMSEQS_CREATETSV' { - ext.prefix = { "${meta.family}_${meta.id}" } + ext.prefix = { "${meta.family}" } tag = { "${meta.family}_${meta.id}" } publishDir = [ path: { "${params.outdir}/mmseqs/update_families/mmseqs_createtsv/" }, @@ -229,6 +229,16 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:ALIGN_SEQUENCES:FAMSA_ALIGN' { + ext.prefix = { "${meta.family}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/full_msa/famsa_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:ALIGN_SEQUENCES:FAMSA_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -249,6 +259,16 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:ALIGN_SEQUENCES:MAFFT_ALIGN' { + ext.prefix = { "${meta.family}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/full_msa/non_redundant/mafft_align/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:ALIGN_SEQUENCES:MAFFT_ALIGN' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -270,6 +290,17 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:CLIPKIT' { + ext.args = { "-m gappy --gaps ${params.gap_threshold}" } + ext.prefix = { "${meta.family}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/full_msa/clipkit/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'CLIP_ENDS' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -280,6 +311,16 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:CLIP_ENDS' { + ext.prefix = { "${meta.family}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/full_msa/clip_ends/${meta.id}/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'HMMER_HMMBUILD' { ext.prefix = { "${meta.id}_${meta.chunk}" } tag = { "${meta.id}_${meta.chunk}" } @@ -291,6 +332,17 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:HMMER_HMMBUILD' { + ext.prefix = { "${meta.family}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/hmmer/hmmbuild/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.{hmm.gz}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'HMMER_HMMSEARCH' { ext.args = { "-E ${params.hmmsearch_evalue_cutoff}" } ext.prefix = { "${meta.id}_${meta.chunk}" } @@ -367,6 +419,17 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:REMOVE_REDUNDANT_SEQS' { + ext.prefix = { "${meta.family}_${meta.id}" } + tag = { "${meta.family}_${meta.id}" } + publishDir = [ + path: { "${params.outdir}/update_families/reps_fasta/${meta.id}/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'EXTRACT_FAMILY_REPS' { publishDir = [ path: { "${params.outdir}/family_reps/${meta.id}/" }, @@ -375,6 +438,15 @@ process { ] } + withName: '.*:UPDATE_FAMILIES:EXTRACT_FAMILY_REPS' { + publishDir = [ + path: { "${params.outdir}/update_families/family_reps/${meta.id}/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*:REMOVE_REDUNDANCY:EXTRACT_FAMILY_REPS' { publishDir = [ path: { "${params.outdir}/remove_redundancy/family_reps/${meta.id}/" }, @@ -384,6 +456,15 @@ process { ] } + withName: 'BRANCH_HITS_FASTA' { + publishDir = [ + path: { "${params.outdir}/update_families/branch_fasta/" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 01ba2e7..3926f16 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -75,56 +75,62 @@ workflow UPDATE_FAMILIES { ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) // Match newly recruited sequences with existing ones for each family - hits_fasta - .combine(SEQKIT_SEQ.out.fastx, by: 0) - .map { meta, new_fasta, family_fasta -> - [meta, [new_fasta, family_fasta]] + SEQKIT_SEQ.out.fastx + .combine(hits_fasta, by: 0) + .map { meta, family_fasta, new_fasta -> + [meta, [family_fasta, new_fasta]] } .set { ch_input_for_cat } // Aggregate each family's MSA sequences with the newly recruited ones CAT_FASTA( ch_input_for_cat ) ch_versions = ch_versions.mix( CAT_FASTA.out.versions ) - - // Strict clustering to remove redundancy - EXECUTE_CLUSTERING( CAT_FASTA.out.file_out ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - - // // TODO prefixes and tags to complete - // // Join together to ensure in sync - // ch_input_for_seq_removal = CAT_FASTA.out.file_out - // .join(EXECUTE_CLUSTERING.out.clustering_tsv) - // .multiMap { meta, seqs, clusters -> - // seqs: [meta, seqs] - // clusters: [meta, clusters] - // } - - // REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) - // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) - - // ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) - // ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) - // ch_msa = ALIGN_SEQUENCES.out.alignments - - // if (params.trim_seed_msa) { - // if (params.clipping_tool == 'clipkit') { - // CLIPKIT( ch_msa ) - // ch_versions = ch_versions.mix( CLIPKIT.out.versions ) - // ch_msa = CLIPKIT.out.clipkit - // } else { // fallback: local module clip_ends - // CLIP_ENDS( ch_msa, params.gap_threshold ) - // ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) - // ch_msa = CLIP_ENDS.out.fas - // } - // } - - // HMMER_HMMBUILD( ch_msa, [] ) - // ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) - // ch_hmm = HMMER_HMMBUILD.out.hmm - - // EXTRACT_FAMILY_REPS( ch_msa ) - // ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) - // ch_updated_family_reps = ch_updated_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) + fasta_ch = CAT_FASTA.out.file_out + + if (params.remove_sequence_redundancy) { + // Strict clustering to remove redundancy + EXECUTE_CLUSTERING( fasta_ch ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + + // Join together to ensure in sync + ch_input_for_seq_removal = fasta_ch + .join(EXECUTE_CLUSTERING.out.clustering_tsv) + .multiMap { meta, seqs, clusters -> + seqs: [meta, seqs] + clusters: [meta, clusters] + } + + REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + fasta_ch = REMOVE_REDUNDANT_SEQS.out.fasta + } + + ALIGN_SEQUENCES( fasta_ch ) + ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + ch_msa = ALIGN_SEQUENCES.out.alignments + + if (params.trim_seed_msa) { + if (params.clipping_tool == 'clipkit') { + CLIPKIT( ch_msa ) + ch_versions = ch_versions.mix( CLIPKIT.out.versions ) + ch_msa = CLIPKIT.out.clipkit + } else { // fallback: local module clip_ends + CLIP_ENDS( ch_msa, params.gap_threshold ) + ch_versions = ch_versions.mix( CLIP_ENDS.out.versions ) + ch_msa = CLIP_ENDS.out.fas + } + } + + HMMER_HMMBUILD( ch_msa, [] ) + ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) + + ch_msa + .map { meta, aln -> [ [id: meta.id], aln ] } + .groupTuple(by: 0) + .set { ch_msa } + EXTRACT_FAMILY_REPS( ch_msa ) + ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + ch_updated_family_reps = ch_updated_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) emit: versions = ch_versions From 7aa8c0be0491b6da3ab608902b17ac8175c4effd Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 24 Dec 2024 17:17:44 +0000 Subject: [PATCH 077/139] clipends file extension updated --- modules/local/clip_ends.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/clip_ends.nf b/modules/local/clip_ends.nf index 7515c42..4ccb60c 100644 --- a/modules/local/clip_ends.nf +++ b/modules/local/clip_ends.nf @@ -12,8 +12,8 @@ process CLIP_ENDS { val(gap_threshold) output: - tuple val(meta), path("*_clipped.fas"), emit: fas - path "versions.yml" , emit: versions + tuple val(meta), path("*.clipends"), emit: fas + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -24,7 +24,7 @@ process CLIP_ENDS { clip_ends.py \\ --alignment ${aln} \\ --gap_threshold ${gap_threshold} \\ - --out_fasta ${prefix}_clipped.fas + --out_fasta ${prefix}.clipends cat <<-END_VERSIONS > versions.yml "${task.process}": From a723a42754b7c58523a300d876504e24be2bccd6 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 25 Dec 2024 15:17:34 +0000 Subject: [PATCH 078/139] metro map and output.md updated --- README.md | 2 +- conf/modules.config | 5 +- docs/images/proteinfamilies_workflow.png | Bin 223350 -> 397725 bytes docs/output.md | 171 +++++++++++++++++++++-- 4 files changed, 160 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index be946b0..0f973b0 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ It takes a protein fasta file as input, clusters the sequences and then generate

    - nf-core/proteinfamilies workflow overview + nf-core/proteinfamilies workflow overview

    1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) diff --git a/conf/modules.config b/conf/modules.config index 53ec41e..b245921 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -40,7 +40,7 @@ process { withName: '.*:REMOVE_REDUNDANCY:CAT_CAT' { publishDir = [ - path: { "${params.outdir}/redundancy_clustering/hmmer/concatenated" }, + path: { "${params.outdir}/remove_redundancy/hmmer/concatenated" }, mode: params.publish_dir_mode, enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -263,7 +263,7 @@ process { ext.prefix = { "${meta.family}" } tag = { "${meta.family}_${meta.id}" } publishDir = [ - path: { "${params.outdir}/update_families/full_msa/non_redundant/mafft_align/${meta.id}/" }, + path: { "${params.outdir}/update_families/full_msa/mafft_align/${meta.id}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -420,7 +420,6 @@ process { } withName: '.*:UPDATE_FAMILIES:REMOVE_REDUNDANT_SEQS' { - ext.prefix = { "${meta.family}_${meta.id}" } tag = { "${meta.family}_${meta.id}" } publishDir = [ path: { "${params.outdir}/update_families/reps_fasta/${meta.id}/" }, diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index 8d5530f92a1bc5d3eb9ab458e316a500acda98d9..349210925dc9ae8ec6578693b5cac6c134f4d5a6 100644 GIT binary patch literal 397725 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 qXFC1a9A2 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
    =w5l-8IshyP{cJt_S?Yxegfq+| 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

    i%zEt%$_&|B%it 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%0DoX1bl)GE=&xlk<=j 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/` - `chunked_fasta/` - `*.fasta`: (optional) fasta files with amino acid sequences of each cluster above the membership threshold +

    [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. @@ -72,6 +82,7 @@ Reporting: - `famsa_align/` - `/` - `_*.aln`: fasta files with aligned amino acid sequences + [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. @@ -85,6 +96,7 @@ Reporting: - `mafft_align/` - `/` - `_*.fas`: fasta files with aligned amino acid sequences + [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. @@ -97,10 +109,11 @@ Reporting: - `seed_msa/` - `clipkit/` - `/` - - `*.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences + - `_*.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences - `clip_ends/` - `/` - - `*.fas`: gap-clipped (only start and end) fasta files of aligned amino acid sequences + - `_*.clipends`: gap-clipped (only start and end) fasta files of aligned amino acid sequences + [ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. @@ -124,6 +137,7 @@ Reporting: - `pre_non_redundant/` - `/` - `_*.fas.gz`: compressed family full MSA (before checking for redundancy) + [hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. @@ -135,9 +149,8 @@ Reporting: - `remove_redundancy/` - `hmmer/` - - `hmmbuild/` - - `concatenated/` - - `_*.hmm.gz`: (optional) concatenated compressed hmm model for all families in a given sample (pre redundancy removal) + - `concatenated/` + - `.hmm.gz`: (optional) concatenated compressed hmm model for all families in a given sample (pre redundancy removal) - `hmmsearch/` - `/` - `_*.domtbl.gz`: (optional) hmmsearch results of family reps against families' HMMs @@ -176,6 +189,7 @@ Reporting: - `reps_fasta/` - `/` - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) + [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. @@ -187,8 +201,10 @@ Reporting: - `full_msa/` - `non_redundant/` - - `/` - - `_*.aln`: family full MSA (after checking for sequence redundancy) + - `famsa_align/` + - `/` + - `_*.aln`: family full MSA (after checking for sequence redundancy) + [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. @@ -200,12 +216,133 @@ Reporting: - `full_msa/` - `non_redundant/` + - `mafft_align/` + - `/` + - `_*.fas`: fasta files with aligned amino acid sequences (after checking for sequence redundancy) + + + +[mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. + +### hmmer for updating families + +
    +Output files + +- `update_families/` + - `hmmer/` + - `concatenated/` + - `.hmm.gz`: (optional) concatenated compressed hmm model for all families in a given sample, to give as input to hmmsearch, to figure which families will be updated with new sequences + - `hmmsearch/` + - `/` + - `.domtbl.gz`: (optional) hmmsearch results of input fasta file against existing families' HMMs + - `hmmbuild/` + - `/` + - `.hmm.gz`: (optional) compressed family HMM after update + - `.hmmbuild.txt`: (optional) hmmbuild execution log + - `branch_fasta/` + - `hits/` + - `.fasta`: (optional) subset of input fasta with hit sequences for each existing family + - `.fasta.gz`: (optional) fasta file with all remaining non-hit input sequences, which will be passed to normal execution mode to create new families + - `family_reps/` + - `/` + - `_meta_mqc.csv`: (optional) csv with metadata (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) + - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) + +
    + +[hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. + +### SeqKit + +
    +Output files + +- `seqkit/` + - `_.fastq`: (optional) fasta formatted family sequences from full MSA with gaps removed +- `update_families/` + - `fasta/` + - `_.fastq`: (optional) concatenated family fasta with newly recruited sequences + +
    + +[SeqKit](https://github.com/shenwei356/seqkit) is a cross-platform and ultrafast toolkit for FASTA/Q file manipulation. + +### MMseqs2 for updating families + +
    +Output files + +- `mmseqs/` + - `update_families/` + - `mmseqs_createtsv/` + - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members + - `mmseqs_createdb/` + - `/` + - `*`: (optional) mmseqs format db of fasta sequences + - `mmseqs_linclust/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `mmseqs_cluster/` + - `/` + - `*`: (optional) mmseqs format clustered db + - `reps_fasta/` + - `/` + - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) + +
    + +[MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. + +### FAMSA for updating families + +
    +Output files + +- `update_families/` + - `full_msa/` + - `famsa_align/` - `/` - - `_*.fas`: fasta files with aligned amino acid sequences (after checking for sequence redundancy) + - `.aln`: family full MSA (after updating with new sequences) + +
    + +[FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. + +### mafft for updating families + +
    +Output files + + +- `update_families/` + - `full_msa/` + - `mafft_align/` + - `/` + - `.fas`: family full MSA (after updating with new sequences) +
    [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. +### ClipKIT for updating families + +
    +Output files + +- `update_families/` + - `full_msa/` + - `clipkit/` + - `/` + - `.clipkit`: gap-clipped (start, middle, end) fasta files of aligned amino acid sequences + - `clip_ends/` + - `/` + - `.clipends`: gap-clipped (only start and end) fasta files of aligned amino acid sequences + +
    + +[ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. + ### Extract family representatives
    @@ -215,6 +352,12 @@ Reporting: - `/` - `_meta_mqc.csv`: csv with metadata to print with MultiQC (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) - `_reps.fa`: fasta file of all family representative sequences (one sequence per family) +- `update_families/` + - `family_reps/` + - `/` + - `_meta_mqc.csv`: csv with metadata to print with MultiQC (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) + - `_reps.fa`: fasta file of all family representative sequences (one sequence per family) +
    ### MultiQC From 3d17c4f6dc942c79392c3a94db575a3fbd4c560d Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 25 Dec 2024 15:34:12 +0000 Subject: [PATCH 079/139] updated readme and citations --- CITATIONS.md | 6 +++++- README.md | 31 +++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 27cc24f..fd1a84f 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -28,7 +28,11 @@ - [hmmer](https://pubmed.ncbi.nlm.nih.gov/29905871/) -> Potter SC, Luciani A, Eddy SR, Park Y, Lopez R, Finn RD. . Nucleic acids research. 2018 Jul 2;46(W1):W200-4. doi: 10.1093/nar/gky448. PubMed PMID: 29905871; PubMed Central PMCID: PMC6030962. +> Potter SC, Luciani A, Eddy SR, Park Y, Lopez R, Finn RD. Nucleic acids research. 2018 Jul 2;46(W1):W200-4. doi: 10.1093/nar/gky448. PubMed PMID: 29905871; PubMed Central PMCID: PMC6030962. + +- [SeqKit](https://pubmed.ncbi.nlm.nih.gov/38898985/) + +> Shen W, Sipos B, Zhao L. SeqKit2: A Swiss army knife for sequence and alignment processing. iMeta. 2024 Apr 5:e191. doi: 10.1002/imt2.191. PubMed PMID: 38898985; PubMed Central PMCID: PMC11183193. - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) diff --git a/README.md b/README.md index 0f973b0..4b4f411 100644 --- a/README.md +++ b/README.md @@ -19,21 +19,32 @@ ## Introduction -**nf-core/proteinfamilies** is a bioinformatics pipeline that generates protein families from amino acid sequences. -It takes a protein fasta file as input, clusters the sequences and then generates protein family models along with their multiple sequence alignments and HMM files. +**nf-core/proteinfamilies** is a bioinformatics pipeline that generates protein families from amino acid sequences and/or updates existing families with new sequences. +It takes a protein fasta file as input, clusters the sequences and then generates protein family Hiden Markov Models (HMMs) along with their multiple sequence alignments (MSAs). +Optionally, paths to existing family HMMs and MSAs can be given (must have matching base filenames one-to-one) in order to update with new sequences in case of matching hits.

    nf-core/proteinfamilies workflow overview

    +A. Create families 1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) 2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) -3. Optionally clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) +3. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) 4. Generate family HMMs and fish additional sequences in the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) -5. Remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) -6. From the remaining families, removing in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keeping cluster representatives -7. Present QC for remaining family size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) +5. Optionally, remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +6. Optionally, from the remaining families, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keep cluster representatives +7. Present QC for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) + +B. Update families +1. Find which families to update by comparing the input sequences against existing family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +2. For non hit sequences continue with the above: A. Create families. For hit sequences and families continue to: 3 +3. Extract family sequences ([`SeqKit`](https://github.com/shenwei356/seqkit/)) and concatenate with filtered hit sequences of each family +4. Optionally, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keeping cluster representatives +5. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) +6. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) +7. Update family HMM with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) ## Usage @@ -46,12 +57,12 @@ First, prepare a samplesheet with your input data that looks as follows: `samplesheet.csv`: ```csv -sample,fasta -CONTROL_REP1,input/mgnifams_input.fa -CONTROL_REP2,input/mgnifams_input_copy.fa.gz +sample,fasta,existing_hmms_to_update,existing_msas_to_update +CONTROL_REP1,input/mgnifams_input.fa,, +CONTROL_REP2,input/mgnifams_input_copy.fa.gz,, ``` -Each row represents a fasta file (can be zipped or unzipped). +Each row contains a fasta file (can be zipped or unzipped). Now, you can run the pipeline using: From 59b006a21ae52259018239bad8a716fd685b9a05 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 26 Dec 2024 08:20:45 +0000 Subject: [PATCH 080/139] validation schema updated to allow either existing hmm and msa folders, or tarballs --- assets/schema_input.json | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 159e89a..f1b3936 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -21,16 +21,40 @@ "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" }, "existing_hmms_to_update": { - "type": "string", - "format": "directory-path", - "exists": true, - "description": "Directory containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." + "anyOf": [ + { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." + }, + { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.tar\\.gz$", + "description": "Tarball file containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." + } + ], + "errorMessage": "Provide either a directory or a '.tar.gz' file for HMMs to update. File names cannot contain spaces." }, "existing_msas_to_update": { - "type": "string", - "format": "directory-path", - "exists": true, - "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." + "anyOf": [ + { + "type": "string", + "format": "directory-path", + "exists": true, + "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." + }, + { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.tar\\.gz$", + "description": "Tarball file containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." + } + ], + "errorMessage": "Provide either a directory or a '.tar.gz' file for MSAs to update. File names cannot contain spaces." } }, "required": ["sample", "fasta"] From b71c210f98360f89deb6b1953408955e6d8e1eec Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 26 Dec 2024 09:45:35 +0000 Subject: [PATCH 081/139] untar logic implemented, removed support for simple folders due to complexity, metro map updated --- assets/schema_input.json | 42 ++--- conf/modules.config | 20 ++- docs/images/proteinfamilies_workflow.png | Bin 397725 -> 404399 bytes docs/output.md | 16 ++ modules.json | 5 + modules/nf-core/untar/environment.yml | 10 ++ modules/nf-core/untar/main.nf | 84 ++++++++++ modules/nf-core/untar/meta.yml | 52 ++++++ modules/nf-core/untar/tests/main.nf.test | 85 ++++++++++ modules/nf-core/untar/tests/main.nf.test.snap | 158 ++++++++++++++++++ modules/nf-core/untar/tests/tags.yml | 2 + subworkflows/local/update_families.nf | 34 ++-- 12 files changed, 464 insertions(+), 44 deletions(-) create mode 100644 modules/nf-core/untar/environment.yml create mode 100644 modules/nf-core/untar/main.nf create mode 100644 modules/nf-core/untar/meta.yml create mode 100644 modules/nf-core/untar/tests/main.nf.test create mode 100644 modules/nf-core/untar/tests/main.nf.test.snap create mode 100644 modules/nf-core/untar/tests/tags.yml diff --git a/assets/schema_input.json b/assets/schema_input.json index f1b3936..8911d3d 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -21,40 +21,18 @@ "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" }, "existing_hmms_to_update": { - "anyOf": [ - { - "type": "string", - "format": "directory-path", - "exists": true, - "description": "Directory containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." - }, - { - "type": "string", - "format": "file-path", - "exists": true, - "pattern": "^\\S+\\.tar\\.gz$", - "description": "Tarball file containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." - } - ], - "errorMessage": "Provide either a directory or a '.tar.gz' file for HMMs to update. File names cannot contain spaces." + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.tar\\.gz$", + "description": "Tarball file containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." }, "existing_msas_to_update": { - "anyOf": [ - { - "type": "string", - "format": "directory-path", - "exists": true, - "description": "Directory containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." - }, - { - "type": "string", - "format": "file-path", - "exists": true, - "pattern": "^\\S+\\.tar\\.gz$", - "description": "Tarball file containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." - } - ], - "errorMessage": "Provide either a directory or a '.tar.gz' file for MSAs to update. File names cannot contain spaces." + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.tar\\.gz$", + "description": "Tarball file containing multiple sequence alignments (MSAs) for the families to be updated. These alignments are essential for the update process and should match the HMM filenames one by one." } }, "required": ["sample", "fasta"] diff --git a/conf/modules.config b/conf/modules.config index b245921..904fd1d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,7 +18,25 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - withName: 'CAT_CAT' { + withName: 'UNTAR_HMM' { + publishDir = [ + path: { "${params.outdir}/untar/hmm" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'UNTAR_MSA' { + publishDir = [ + path: { "${params.outdir}/untar/msa" }, + mode: params.publish_dir_mode, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'CAT_HMM' { publishDir = [ path: { "${params.outdir}/update_families/hmmer/concatenated" }, mode: params.publish_dir_mode, diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index 349210925dc9ae8ec6578693b5cac6c134f4d5a6..a7bafb7ad4482e45d78ea4937ba42db210f991f2 100644 GIT binary patch delta 159249 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

    ?w9tIlrHFaHIwhTxX4t`;&L` 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 delta 156701 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

    BKmAXZE9y`P8 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≪@OSHV*Izv7b)O-F`_fx&JkUX~Z%QF^0 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 diff --git a/docs/output.md b/docs/output.md index 6d0e1de..1ec91de 100644 --- a/docs/output.md +++ b/docs/output.md @@ -33,6 +33,7 @@ Removing redundancy: Updating families: +- [untar](#untar) to decompress tarballs of existing hmms and msas - [hmmer](#hmmer-for-updating-families) to match input sequences to existing families with hmmsearch as well as for rebuilding models with newly recruited sequences with hmmbuild - [SeqKit](#SeqKit) to extract fasta formatted family sequences from their MSA files - [MMseqs2](#mmseqs2-for-updating-families) to strictly cluster the sequences within each of the families to update @@ -224,6 +225,21 @@ Reporting: [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. +### untar + +

    +Output files + +- `untar/` + - `hmm/` + - `/` + - `.{hmm.gz,hmm}`: (optional) decompressed input hmm tarball + - `msa/` + - `/` + - `.{aln,fas}`: (optional) decompressed input msa tarball + +
    + ### hmmer for updating families
    diff --git a/modules.json b/modules.json index 2059fb1..1f8446a 100644 --- a/modules.json +++ b/modules.json @@ -67,6 +67,11 @@ "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] + }, + "untar": { + "branch": "master", + "git_sha": "3e548877f25a5980a177cc4f81d2d2e8c24164ef", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml new file mode 100644 index 0000000..ae4fa45 --- /dev/null +++ b/modules/nf-core/untar/environment.yml @@ -0,0 +1,10 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::coreutils=9.5 + - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 + - conda-forge::sed=4.8 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf new file mode 100644 index 0000000..e712ebe --- /dev/null +++ b/modules/nf-core/untar/main.nf @@ -0,0 +1,84 @@ +process UNTAR { + tag "${archive}" + label 'process_single' + + 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/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("${prefix}"), emit: untar + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) + + """ + mkdir ${prefix} + + ## Ensures --strip-components only applied when top level of tar contents is a directory + ## If just files or multiple directories, place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + tar \\ + -C ${prefix} --strip-components 1 \\ + -xavf \\ + ${args} \\ + ${archive} \\ + ${args2} + else + tar \\ + -C ${prefix} \\ + -xavf \\ + ${args} \\ + ${archive} \\ + ${args2} + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) + """ + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml new file mode 100644 index 0000000..3a37bb3 --- /dev/null +++ b/modules/nf-core/untar/meta.yml @@ -0,0 +1,52 @@ +name: untar +description: Extract files. +keywords: + - untar + - uncompress + - extract +tools: + - untar: + description: | + Extract tar.gz files. + documentation: https://www.gnu.org/software/tar/manual/ + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" +output: + - untar: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*/" + - ${prefix}: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*/" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test new file mode 100644 index 0000000..c957517 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process UNTAR" + script "../main.nf" + process "UNTAR" + tag "modules" + tag "modules_nfcore" + tag "untar" + + test("test_untar") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles") { + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } + + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } +} diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap new file mode 100644 index 0000000..ceb91b7 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,158 @@ +{ + "test_untar_onlyfiles": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:28.231047" + }, + "test_untar_onlyfiles - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:45.773103" + }, + "test_untar - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:36.777441" + }, + "test_untar": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:19.377674" + } +} \ No newline at end of file diff --git a/modules/nf-core/untar/tests/tags.yml b/modules/nf-core/untar/tests/tags.yml new file mode 100644 index 0000000..feb6f15 --- /dev/null +++ b/modules/nf-core/untar/tests/tags.yml @@ -0,0 +1,2 @@ +untar: + - modules/nf-core/untar/** diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 3926f16..e7e25d7 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -1,4 +1,6 @@ -include { CAT_CAT } from '../../modules/nf-core/cat/cat/main' +include { UNTAR as UNTAR_HMM } from '../../modules/nf-core/untar/main' +include { UNTAR as UNTAR_MSA } from '../../modules/nf-core/untar/main' +include { CAT_CAT as CAT_HMM } from '../../modules/nf-core/cat/cat/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' @@ -20,18 +22,28 @@ workflow UPDATE_FAMILIES { ch_updated_family_reps = Channel.empty() ch_no_hit_seqs = Channel.empty() + + ch_samplesheet_for_update + .multiMap { meta, _fasta, existing_hmms_to_update, existing_msas_to_update -> + hmm: [ meta, existing_hmms_to_update ] + msa: [ meta, existing_msas_to_update ] + } + .set { ch_input_for_untar } + + UNTAR_HMM( ch_input_for_untar.hmm ) + ch_versions = ch_versions.mix( UNTAR_HMM.out.versions ) + + UNTAR_MSA( ch_input_for_untar.msa ) + ch_versions = ch_versions.mix( UNTAR_MSA.out.versions ) + // TODO: check that the HMMs and the MSAs match // // Squeeze the HMMs into a single file - CAT_CAT( - ch_samplesheet_for_update.map { meta, _fasta, existing_hmms_to_update, _existing_msas_to_update -> - [meta, file("${existing_hmms_to_update}/*.{hmm,hmm.gz}")] - } - ) - ch_versions = ch_versions.mix( CAT_CAT.out.versions ) + CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("$folder/*")] } ) + ch_versions = ch_versions.mix( CAT_HMM.out.versions ) // Prep the sequences to search against the HMM concatenated model of families - CAT_CAT.out.file_out + CAT_HMM.out.file_out .combine(ch_samplesheet_for_update, by: 0) .map { meta, concatenated_hmm, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, concatenated_hmm, fasta, false, false, true] } .set { ch_input_for_hmmsearch } @@ -59,9 +71,9 @@ workflow UPDATE_FAMILIES { } .set { hits_fasta } - ch_samplesheet_for_update - .map { meta, _fasta, _existing_hmms_to_update, existing_msas_to_update -> - [meta, file("${existing_msas_to_update}/*")] + UNTAR_MSA.out.untar + .map { meta, folder -> + [meta, file("$folder/*")] } .transpose() .map { meta, file -> From e31cdc9780c2e23c35f7dc383fc2223c705f5540 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 26 Dec 2024 10:58:25 +0000 Subject: [PATCH 082/139] test configs updated --- conf/test.config | 8 +----- conf/test_full.config | 4 +-- conf/test_minimal.config | 35 +++++++++++++++++++++++++++ conf/test_multi_sample_with_gz.config | 29 ++++++++++++++++++++++ conf/test_update.config | 29 ++++++++++++++++++++++ nextflow.config | 7 ++++-- 6 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 conf/test_minimal.config create mode 100644 conf/test_multi_sample_with_gz.config create mode 100644 conf/test_update.config diff --git a/conf/test.config b/conf/test.config index 9fbdf02..69abb3f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -20,16 +20,10 @@ process { params { config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' + config_profile_description = 'Test dataset to check generic pipeline function for creating new families' // Input data input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' // Clustering cluster_size_threshold = 5 - // Alignment - trim_seed_msa = false - recruit_sequences_with_models = false - // Redundancy - remove_family_redundancy = false - remove_sequence_redundancy = false } diff --git a/conf/test_full.config b/conf/test_full.config index 5f06f4c..cfca67b 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -20,11 +20,11 @@ process { params { config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' + config_profile_description = 'Full test dataset to check simultaneous create and update/create pipeline functions with two input samples' // Input data for full size test // Input data - input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet_full.csv' // Clustering cluster_size_threshold = 5 } diff --git a/conf/test_minimal.config b/conf/test_minimal.config new file mode 100644 index 0000000..129420e --- /dev/null +++ b/conf/test_minimal.config @@ -0,0 +1,35 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/proteinfamilies -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Minmal test profile' + config_profile_description = 'Minimal test dataset to check pipeline function (no MSA clipping, no redundancy checking, no update)' + + // Input data + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet.csv' + // Clustering + cluster_size_threshold = 5 + // Alignment + trim_seed_msa = false + recruit_sequences_with_models = false + // Redundancy + remove_family_redundancy = false + remove_sequence_redundancy = false +} diff --git a/conf/test_multi_sample_with_gz.config b/conf/test_multi_sample_with_gz.config new file mode 100644 index 0000000..6deba39 --- /dev/null +++ b/conf/test_multi_sample_with_gz.config @@ -0,0 +1,29 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/proteinfamilies -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Test dataset to check pipeline function with both fasta and fasta.gz sample inputs at the same time' + + // Input data + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet_multi_sample_with_gz.csv' + // Clustering + cluster_size_threshold = 5 +} diff --git a/conf/test_update.config b/conf/test_update.config new file mode 100644 index 0000000..2be1a14 --- /dev/null +++ b/conf/test_update.config @@ -0,0 +1,29 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/proteinfamilies -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Test dataset to check the update pipeline function (non hit sequences will flow into the create function)' + + // Input data + input = params.pipelines_testdata_base_path + 'proteinfamilies/samplesheets/samplesheet_update.csv' + // Clustering + cluster_size_threshold = 5 +} diff --git a/nextflow.config b/nextflow.config index fd7403a..d0c1621 100644 --- a/nextflow.config +++ b/nextflow.config @@ -182,8 +182,11 @@ profiles { ] } } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } + test { includeConfig 'conf/test.config' } + test_minimal { includeConfig 'conf/test_minimal.config' } + test_multi_sample_with_gz { includeConfig 'conf/test_multi_sample_with_gz.config' } + test_update { includeConfig 'conf/test_update.config' } + test_full { includeConfig 'conf/test_full.config' } } // Load nf-core custom profiles from different Institutions From 6c9008c08c97eac3929f12abfd0c5f58b46e72cd Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 26 Dec 2024 11:22:07 +0000 Subject: [PATCH 083/139] samplesheet description updated --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4b4f411..04defef 100644 --- a/README.md +++ b/README.md @@ -58,11 +58,13 @@ First, prepare a samplesheet with your input data that looks as follows: ```csv sample,fasta,existing_hmms_to_update,existing_msas_to_update -CONTROL_REP1,input/mgnifams_input.fa,, -CONTROL_REP2,input/mgnifams_input_copy.fa.gz,, +CONTROL_REP1,input/mgnifams_input_small.fa,, ``` -Each row contains a fasta file (can be zipped or unzipped). +Each row contains a fasta file with amino acid sequences (can be zipped or unzipped). +Optionally, a row may contain tarball archives (tar.gz) of existing families' HMM and MSA folders, in order to be updated. +In this case, the HMM and MSA files must be matching in numbers and in base filenames (not the extension). +Hit families/sequences will be updated, while no hit sequences will create new families. Now, you can run the pipeline using: From 01502b7900491fcce4e796cd92b398360ac77f12 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:13:40 +0000 Subject: [PATCH 084/139] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04defef..fc7af8e 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ A. Create families 1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) 2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) 3. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) -4. Generate family HMMs and fish additional sequences in the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) +4. Generate family HMMs and fish additional sequences into the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) 5. Optionally, remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) 6. Optionally, from the remaining families, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keep cluster representatives 7. Present QC for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) From 27de55fcd5330db78e34f4573ad92b055fd6b34b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 2 Jan 2025 08:18:51 +0000 Subject: [PATCH 085/139] python errors to stderr --- bin/branch_hits_fasta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index 12c4f70..23b07af 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -149,9 +149,9 @@ def write_family_fastas(results, sequences, output_dir): ) family_records.append(new_record) except KeyError: - print(f"Sequence {sequence_name} not found in the input FASTA.") + print(f"Sequence {sequence_name} not found in the input FASTA.", file=sys.stderr) except ValueError: - print(f"Invalid range format for hit: {hit}") + print(f"Invalid range format for hit: {hit}", file=sys.stderr) # Write the extracted sequences to a FASTA file for the family if family_records: From e81cc77bd2e253a905bf7437ddfb2dce15336aed Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:20:21 +0000 Subject: [PATCH 086/139] Update workflows/proteinfamilies.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- workflows/proteinfamilies.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 6b38f3d..50154f2 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -18,7 +18,7 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_prot // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { UPDATE_FAMILIES } from '../subworkflows/local/update_families' +include { UPDATE_FAMILIES } from '../subworkflows/local/update_families' include { EXECUTE_CLUSTERING } from '../subworkflows/local/execute_clustering' include { GENERATE_FAMILIES } from '../subworkflows/local/generate_families' include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' From 2ebf65a5543e1ab5415cc0d81f2c2828a188aca9 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:21:15 +0000 Subject: [PATCH 087/139] Update docs/output.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 1ec91de..3411bcb 100644 --- a/docs/output.md +++ b/docs/output.md @@ -259,7 +259,7 @@ Reporting: - `branch_fasta/` - `hits/` - `.fasta`: (optional) subset of input fasta with hit sequences for each existing family - - `.fasta.gz`: (optional) fasta file with all remaining non-hit input sequences, which will be passed to normal execution mode to create new families + - `.fasta.gz`: (optional) FASTA file that contains all remaining non-hit input sequences, which will be passed to normal execution mode to create new families - `family_reps/` - `/` - `_meta_mqc.csv`: (optional) csv with metadata (Sample Name,Family Id,Size,Representative Length,Representative Id,Sequence) From 37a2c64877984356a799128ff6f096589b9e1b96 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:21:43 +0000 Subject: [PATCH 088/139] Update docs/output.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 3411bcb..24105e8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -258,7 +258,7 @@ Reporting: - `.hmmbuild.txt`: (optional) hmmbuild execution log - `branch_fasta/` - `hits/` - - `.fasta`: (optional) subset of input fasta with hit sequences for each existing family + - `.fasta`: (optional) subset of the input FASTA with hit sequences for each existing family - `.fasta.gz`: (optional) FASTA file that contains all remaining non-hit input sequences, which will be passed to normal execution mode to create new families - `family_reps/` - `/` From 3406075757bc856ff1f27b585480b9d58aff109e Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:22:00 +0000 Subject: [PATCH 089/139] Update docs/output.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 24105e8..07f7671 100644 --- a/docs/output.md +++ b/docs/output.md @@ -254,7 +254,7 @@ Reporting: - `.domtbl.gz`: (optional) hmmsearch results of input fasta file against existing families' HMMs - `hmmbuild/` - `/` - - `.hmm.gz`: (optional) compressed family HMM after update + - `.hmm.gz`: (optional) compressed family HMM after the update - `.hmmbuild.txt`: (optional) hmmbuild execution log - `branch_fasta/` - `hits/` From 5d936517585593499608616f6b2ffb27195791a3 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 2 Jan 2025 10:40:56 +0000 Subject: [PATCH 090/139] syncing of seqs and clusters after clustering done inside the execute_clustering subworkflow to avoid repeat --- subworkflows/local/execute_clustering.nf | 15 ++++++++++++--- subworkflows/local/remove_redundancy.nf | 14 +++----------- subworkflows/local/update_families.nf | 11 +---------- workflows/proteinfamilies.nf | 10 +--------- 4 files changed, 17 insertions(+), 33 deletions(-) diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering.nf index de1d169..7193ede 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering.nf @@ -26,7 +26,7 @@ workflow EXECUTE_CLUSTERING { ch_versions = ch_versions.mix( MMSEQS_LINCLUST.out.versions ) } - // Join together to ensure in sync + // Join to ensure in sync ch_input_for_createtsv = MMSEQS_CREATEDB.out.db .join(cluster_res.db_cluster) .multiMap { meta, db, db_cluster -> @@ -38,7 +38,16 @@ workflow EXECUTE_CLUSTERING { ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) ch_clustering_tsv = MMSEQS_CREATETSV.out.tsv + // Join to ensure in sync + ch_clustering_output = sequences + .join(MMSEQS_CREATETSV.out.tsv) + .multiMap { meta, seqs, clusters -> + seqs: [meta, seqs] + clusters: [meta, clusters] + } + emit: - versions = ch_versions - clustering_tsv = ch_clustering_tsv + versions = ch_versions + seqs = ch_clustering_output.seqs + clusters = ch_clustering_output.clusters } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 8035ca8..ee9b333 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -48,7 +48,7 @@ workflow REMOVE_REDUNDANCY { .groupTuple(by: 0) .set { fasta } - // Join together to ensure in sync + // Join to ensure in sync ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map .join(HMMER_HMMSEARCH.out.domain_summary) .join(fasta) @@ -62,7 +62,7 @@ workflow REMOVE_REDUNDANCY { ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) fasta = REMOVE_REDUNDANT_FAMS.out.fasta - // Join together to ensure in sync + // Join to ensure in sync ch_input_for_hmm_filtering = fasta .join(ch_hmm) .multiMap { meta, seqs, models -> @@ -85,15 +85,7 @@ workflow REMOVE_REDUNDANCY { EXECUTE_CLUSTERING( fasta ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - // Join together to ensure in sync - ch_input_for_seq_removal = fasta - .join(EXECUTE_CLUSTERING.out.clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [meta, seqs] - clusters: [meta, clusters] - } - - REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index e7e25d7..4fbc875 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -22,7 +22,6 @@ workflow UPDATE_FAMILIES { ch_updated_family_reps = Channel.empty() ch_no_hit_seqs = Channel.empty() - ch_samplesheet_for_update .multiMap { meta, _fasta, existing_hmms_to_update, existing_msas_to_update -> hmm: [ meta, existing_hmms_to_update ] @@ -104,15 +103,7 @@ workflow UPDATE_FAMILIES { EXECUTE_CLUSTERING( fasta_ch ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - // Join together to ensure in sync - ch_input_for_seq_removal = fasta_ch - .join(EXECUTE_CLUSTERING.out.clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [meta, seqs] - clusters: [meta, clusters] - } - - REMOVE_REDUNDANT_SEQS( ch_input_for_seq_removal.clusters, ch_input_for_seq_removal.seqs ) + REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) fasta_ch = REMOVE_REDUNDANT_SEQS.out.fasta } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 50154f2..5ac94df 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -80,15 +80,7 @@ workflow PROTEINFAMILIES { EXECUTE_CLUSTERING( ch_samplesheet_for_create ) ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - // Join together to ensure in sync - ch_input_for_cluster_chunking = ch_samplesheet_for_create - .join(EXECUTE_CLUSTERING.out.clustering_tsv) - .multiMap { meta, seqs, clusters -> - seqs: [ meta, seqs ] - clusters: [ meta, clusters ] - } - - CHUNK_CLUSTERS( ch_input_for_cluster_chunking.clusters, ch_input_for_cluster_chunking.seqs, params.cluster_size_threshold ) + CHUNK_CLUSTERS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs, params.cluster_size_threshold ) ch_versions = ch_versions.mix( CHUNK_CLUSTERS.out.versions ) // Multiple sequence alignment From 99a62a9341468e2feaae9599f2e6aa646e1746fb Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 2 Jan 2025 13:14:07 +0000 Subject: [PATCH 091/139] file.getSimpleName --- subworkflows/local/remove_redundancy.nf | 3 +-- subworkflows/local/update_families.nf | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index ee9b333..e59b189 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -75,8 +75,7 @@ workflow REMOVE_REDUNDANCY { fasta .transpose() .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0].split('_')[-1] - [[id: meta.id, chunk: baseName], file] + [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] } .set { fasta } } diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 4fbc875..6153c89 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -65,8 +65,7 @@ workflow UPDATE_FAMILIES { BRANCH_HITS_FASTA.out.hits .transpose() .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0] - [[id: meta.id, family: baseName], file] + [[id: meta.id, family: file.getSimpleName()], file] } .set { hits_fasta } @@ -76,8 +75,7 @@ workflow UPDATE_FAMILIES { } .transpose() .map { meta, file -> - def baseName = file.toString().split('/')[-1].split('\\.')[0] - [[id: meta.id, family: baseName], file] + [[id: meta.id, family: file.getSimpleName()], file] } .set { family_msas } From b542eb6416a6d88a80a58a7004e8ba517325df32 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 2 Jan 2025 13:18:30 +0000 Subject: [PATCH 092/139] chunk in REMOVE_REDUNDANT_SEQS tag --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 904fd1d..5e1b504 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -429,6 +429,7 @@ process { } withName: 'REMOVE_REDUNDANT_SEQS' { + tag = { "${meta.id}_${meta.chunk}" } publishDir = [ path: { "${params.outdir}/remove_redundancy/reps_fasta/${meta.id}/" }, mode: params.publish_dir_mode, From b98c5148855b2a208fbbac95a534486dc0f9e2d5 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:20:33 +0000 Subject: [PATCH 093/139] Update docs/output.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martín Beracochea --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 07f7671..5c640c9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -248,7 +248,7 @@ Reporting: - `update_families/` - `hmmer/` - `concatenated/` - - `.hmm.gz`: (optional) concatenated compressed hmm model for all families in a given sample, to give as input to hmmsearch, to figure which families will be updated with new sequences + - `.hmm.gz`: (optional) concatenated compressed HMM models for all families in a given sample, to be used as input for hmmsearch, to determine which families will be updated with new sequences. - `hmmsearch/` - `/` - `.domtbl.gz`: (optional) hmmsearch results of input fasta file against existing families' HMMs From c0cbae9fdc1b8759ffd70742941adb1d2659c9a5 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 3 Jan 2025 08:04:24 +0000 Subject: [PATCH 094/139] regex for parsed hit sequence name and range --- bin/branch_hits_fasta.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index 23b07af..e24f79e 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -4,6 +4,7 @@ import argparse import os import gzip +import re from Bio import SeqIO from Bio.SeqRecord import SeqRecord from Bio.Seq import Seq @@ -117,6 +118,36 @@ def write_non_hit_sequences(filtered_sequences, sequences, non_hits): print(f"Written {len(non_hit_records)} non-hit sequences to {non_hits}") +def validate_and_parse_hit_name(hit): + """ + Validates and parses a hit string. + The hit must contain a string, at least one '/', and a valid range (integer-integer) after the last '/'. + + Args: + hit (str): The hit string to validate and parse. + + Returns: + tuple: (sequence_name, ali_from, ali_to) if the hit is valid. + + Raises: + ValueError: If the hit is invalid. + """ + # Define the regex pattern + pattern = r"^(.*)/(\d+)-(\d+)$" + + # Match the pattern + match = re.match(pattern, hit) + if not match: + raise ValueError(f"Skipping hit with invalid format: {hit}.") + + # Extract components + sequence_name = match.group(1) # Everything before the last '/' + ali_from = int(match.group(2)) # First integer in the range + ali_to = int(match.group(3)) # Second integer in the range + + return sequence_name, ali_from, ali_to + + def write_family_fastas(results, sequences, output_dir): # Create the output directory if it doesn't exist os.makedirs(output_dir, exist_ok=True) @@ -126,8 +157,7 @@ def write_family_fastas(results, sequences, output_dir): for hit in hits: try: - sequence_name, range_part = hit.split("/") - ali_from, ali_to = map(int, range_part.split("-")) + sequence_name, ali_from, ali_to = validate_and_parse_hit_name(hit) # Get the original sequence original_record = sequences[sequence_name] @@ -150,8 +180,8 @@ def write_family_fastas(results, sequences, output_dir): family_records.append(new_record) except KeyError: print(f"Sequence {sequence_name} not found in the input FASTA.", file=sys.stderr) - except ValueError: - print(f"Invalid range format for hit: {hit}", file=sys.stderr) + except ValueError as e: + print(e, file=sys.stderr) # Write the extracted sequences to a FASTA file for the family if family_records: From 81d0d6755b076b220b92600b11f01222da257882 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 3 Jan 2025 08:49:04 +0000 Subject: [PATCH 095/139] validateMatchingFolders groovy function to check for valid existing HMM and MSA input folder for update --- subworkflows/local/update_families.nf | 39 ++++++++++++------- .../main.nf | 28 ++++++++++++- 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 6153c89..e6ed889 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -1,17 +1,18 @@ -include { UNTAR as UNTAR_HMM } from '../../modules/nf-core/untar/main' -include { UNTAR as UNTAR_MSA } from '../../modules/nf-core/untar/main' -include { CAT_CAT as CAT_HMM } from '../../modules/nf-core/cat/cat/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' -include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' -include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' -include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' -include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' -include { CLIPKIT } from '../../modules/nf-core/clipkit/main' -include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' -include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' +include { UNTAR as UNTAR_HMM } from '../../modules/nf-core/untar/main' +include { UNTAR as UNTAR_MSA } from '../../modules/nf-core/untar/main' +include { validateMatchingFolders } from '../../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { CAT_CAT as CAT_HMM } from '../../modules/nf-core/cat/cat/main' +include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' +include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' +include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' +include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' +include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' +include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' +include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' +include { CLIPKIT } from '../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' +include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' +include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' workflow UPDATE_FAMILIES { take: @@ -35,7 +36,15 @@ workflow UPDATE_FAMILIES { UNTAR_MSA( ch_input_for_untar.msa ) ch_versions = ch_versions.mix( UNTAR_MSA.out.versions ) - // TODO: check that the HMMs and the MSAs match // + // check that the HMMs and the MSAs match + // join to ensure in sync + ch_folders_to_validate = UNTAR_HMM.out.untar + .join(UNTAR_MSA.out.untar) + .multiMap { meta, folder1, folder2 -> + hmm_folder_ch: [meta, folder1] + msa_folder_ch: [meta, folder2] + } + validateMatchingFolders(ch_folders_to_validate.hmm_folder_ch, ch_folders_to_validate.msa_folder_ch) // Squeeze the HMMs into a single file CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("$folder/*")] } ) diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 6eec55a..7d5aa01 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -96,7 +96,7 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") def multiqc_reports = multiqc_report.toList() - + // // Completion email and summary // @@ -206,3 +206,29 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } +// +// Validate that two folders (HMMs and MSAs for update) contain the same number of files and matching base filenames +// +def validateMatchingFolders(channel1, channel2) { + // Fetch the contents of the channels + channel1 + .join(channel2) + .map { meta, folder1, folder2 -> + def files1 = folder1.listFiles() + def files2 = folder2.listFiles() + + // Check if the number of files matches + if (files1.size() != files2.size()) { + error("Folder mismatch: ${folder1} has ${files1.size()} files, but ${folder2} has ${files2.size()} files.") + } + + // Extract base filenames (without extensions) and sort + def baseNames1 = files1.collect { it.getSimpleName() }.sort() + def baseNames2 = files2.collect { it.getSimpleName() }.sort() + + // Check if base filenames match one to one + if (baseNames1 != baseNames2) { + error("Filename mismatch: Expected matching files in ${folder1} and ${folder2}. Base filenames do not match.") + } + } +} From de8421f1b4b4bd3a6512f7842bdda13a8cecea64 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 9 Jan 2025 11:02:26 +0000 Subject: [PATCH 096/139] branch hits fasta updated to use env coords of domtbl --- bin/branch_hits_fasta.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index e24f79e..1430c8c 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -80,13 +80,11 @@ def filter_sequences(domtbl, length_threshold): # Apply the length threshold filter if env_length >= length_threshold * qlen: sequence_name = columns[0] - ali_from = int(columns[17]) - ali_to = int(columns[18]) query_name = columns[3] if query_name not in results: results[query_name] = set() - results[query_name].add(f"{sequence_name}/{ali_from}-{ali_to}") + results[query_name].add(f"{sequence_name}/{env_from}-{env_to}") return results @@ -127,7 +125,7 @@ def validate_and_parse_hit_name(hit): hit (str): The hit string to validate and parse. Returns: - tuple: (sequence_name, ali_from, ali_to) if the hit is valid. + tuple: (sequence_name, env_from, env_to) if the hit is valid. Raises: ValueError: If the hit is invalid. @@ -142,10 +140,10 @@ def validate_and_parse_hit_name(hit): # Extract components sequence_name = match.group(1) # Everything before the last '/' - ali_from = int(match.group(2)) # First integer in the range - ali_to = int(match.group(3)) # Second integer in the range + env_from = int(match.group(2)) # First integer in the range + env_to = int(match.group(3)) # Second integer in the range - return sequence_name, ali_from, ali_to + return sequence_name, env_from, env_to def write_family_fastas(results, sequences, output_dir): @@ -157,19 +155,19 @@ def write_family_fastas(results, sequences, output_dir): for hit in hits: try: - sequence_name, ali_from, ali_to = validate_and_parse_hit_name(hit) + sequence_name, env_from, env_to = validate_and_parse_hit_name(hit) # Get the original sequence original_record = sequences[sequence_name] # Extract the specific range (adjust indices for 0-based indexing) - extracted_seq = original_record.seq[ali_from-1:ali_to] + extracted_seq = original_record.seq[env_from-1:env_to] # Determine the new sequence ID if len(extracted_seq) == len(original_record.seq): new_id = sequence_name # Omit range if full-length else: - new_id = f"{sequence_name}/{ali_from}-{ali_to}" + new_id = f"{sequence_name}/{env_from}-{env_to}" # Create a new SeqRecord for the extracted range new_record = SeqRecord( From ed1cc98bd741861f42b411851573197d2aad2535 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Thu, 9 Jan 2025 12:16:54 +0000 Subject: [PATCH 097/139] tryCatch block added in filter_recruited function of branch_hits_fasta --- bin/branch_hits_fasta.py | 36 +++++++++++-------------- bin/filter_recruited.py | 5 ++-- subworkflows/local/generate_families.nf | 5 +++- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index 1430c8c..1abc4a1 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -62,29 +62,25 @@ def filter_sequences(domtbl, length_threshold): open_func = gzip.open if domtbl.endswith(".gz") else open with open_func(domtbl, "rt") as file: for line in file: - # Skip comment lines if line.startswith("#"): - continue + continue # Skip comments - # Split line into columns columns = line.split() - if len(columns) < 21: # Ensure enough columns are present - continue - - # Extract required values - qlen = float(columns[5]) - env_from = int(columns[19]) - env_to = int(columns[20]) - env_length = env_to - env_from + 1 - - # Apply the length threshold filter - if env_length >= length_threshold * qlen: - sequence_name = columns[0] - query_name = columns[3] - - if query_name not in results: - results[query_name] = set() - results[query_name].add(f"{sequence_name}/{env_from}-{env_to}") + try: + qlen = float(columns[5]) + env_from = int(columns[19]) + env_to = int(columns[20]) + env_length = env_to - env_from + 1 + + if env_length >= length_threshold * qlen: + sequence_name = columns[0] + query_name = columns[3] + + if query_name not in results: + results[query_name] = set() + results[query_name].add(f"{sequence_name}/{env_from}-{env_to}") + except (IndexError, ValueError): + continue # Skip malformed lines return results diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index eb9eec4..06c7dd0 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -54,6 +54,7 @@ def parse_args(args=None): def filter_sequences(domtbl, length_threshold): filtered_sequences = [] + with gzip.open(domtbl, "rt", encoding="utf-8") as file: for line in file: if line.startswith("#"): @@ -68,10 +69,8 @@ def filter_sequences(domtbl, length_threshold): if env_length >= length_threshold * qlen: sequence_name = columns[0] - ali_from = int(columns[17]) - ali_to = int(columns[18]) - filtered_sequences.append(f"{sequence_name}/{ali_from}-{ali_to}") + filtered_sequences.append(f"{sequence_name}/{env_from}-{env_to}") except (IndexError, ValueError): continue # Skip malformed lines diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index ad8b666..bee1e74 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -8,6 +8,7 @@ include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' include { FILTER_RECRUITED } from '../../modules/local/filter_recruited.nf' +// TODO include { HMMER_HMMALIGN } from '../../modules/nf-core/hmmer/hmmalign/main' workflow GENERATE_FAMILIES { take: @@ -51,7 +52,7 @@ workflow GENERATE_FAMILIES { ch_hmm .map { meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(sequences, by: 0) - .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // write_align must always be true + .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // TODO true to false, no .sto .set { ch_input_for_hmmsearch } if (params.recruit_sequences_with_models) { @@ -62,6 +63,8 @@ workflow GENERATE_FAMILIES { ch_versions = ch_versions.mix( FILTER_RECRUITED.out.versions ) ch_msa = FILTER_RECRUITED.out.full_msa ch_fasta = FILTER_RECRUITED.out.fasta + + // TODO HMMER_HMMALIGN } emit: From 040464ee6465d0eaf8419c5654227c2638346007 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 07:40:26 +0000 Subject: [PATCH 098/139] filter recruited updated -not using auto full alignment from hmmsearch, hmmalign installed --- bin/filter_recruited.py | 112 ++++++++++-------- conf/modules.config | 2 +- docs/output.md | 2 +- modules.json | 5 + modules/local/filter_recruited.nf | 7 +- .../nf-core/hmmer/hmmalign/environment.yml | 5 + modules/nf-core/hmmer/hmmalign/main.nf | 46 +++++++ modules/nf-core/hmmer/hmmalign/meta.yml | 54 +++++++++ .../nf-core/hmmer/hmmalign/tests/main.nf.test | 58 +++++++++ .../hmmer/hmmalign/tests/main.nf.test.snap | 68 +++++++++++ subworkflows/local/generate_families.nf | 17 ++- workflows/proteinfamilies.nf | 26 ++-- 12 files changed, 327 insertions(+), 75 deletions(-) create mode 100644 modules/nf-core/hmmer/hmmalign/environment.yml create mode 100644 modules/nf-core/hmmer/hmmalign/main.nf create mode 100644 modules/nf-core/hmmer/hmmalign/meta.yml create mode 100644 modules/nf-core/hmmer/hmmalign/tests/main.nf.test create mode 100644 modules/nf-core/hmmer/hmmalign/tests/main.nf.test.snap diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index 06c7dd0..51d13ec 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -2,28 +2,28 @@ import sys import argparse -import os import gzip -from Bio import AlignIO, SeqIO +import re +from Bio import SeqIO def parse_args(args=None): parser = argparse.ArgumentParser() parser.add_argument( - "-a", - "--alignment", + "-d", + "--domtbl", required=True, metavar="FILE", type=str, - help="Stockholm format multiple sequence alignment from hmmsearch.", + help="Domain summary annotations result from hmmsearch.", ) parser.add_argument( - "-d", - "--domtbl", + "-f", + "--fasta", required=True, metavar="FILE", type=str, - help="Domain summary annotations result from hmmsearch.", + help="Input fasta file containing all protein names with their amino acid sequence for mapping.", ) parser.add_argument( "-l", @@ -33,14 +33,6 @@ def parse_args(args=None): type=float, help="Minimum length percentage threshold of annotated domain (env) against query to keep.", ) - parser.add_argument( - "-m", - "--out_msa", - required=True, - metavar="FILE", - type=str, - help="Name of the output fasta file with the fasta converted multiple sequence alignment (includes gaps).", - ) parser.add_argument( "-o", "--out_fasta", @@ -77,55 +69,73 @@ def filter_sequences(domtbl, length_threshold): return filtered_sequences -def filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta): - base_filename = os.path.basename(alignment).split(".")[0] +def validate_and_parse_hit_name(hit): + """ + Validates and parses a hit string. + The hit must contain a string, at least one '/', and a valid range (integer-integer) after the last '/'. + + Args: + hit (str): The hit string to validate and parse. + + Returns: + tuple: (sequence_name, env_from, env_to) if the hit is valid. - with gzip.open(alignment, "rt", encoding="utf-8") as file: - alignment_data = AlignIO.read(file, "stockholm") - filtered_records = [ - record for record in alignment_data if record.id in filtered_sequences - ] + Raises: + ValueError: If the hit is invalid. + """ + # Define the regex pattern + pattern = r"^(.*)/(\d+)-(\d+)$" - for record in filtered_records: - ungapped_length = len(record.seq.replace("-", "")) - # Extract the part after the slash in the name (if present) - if "/" in record.id: - ranges = record.id.split("/") - if len(ranges) > 2: - # FIXME: we need to adjust the workflow to handle these cases - continue - name, range_info = ranges - start, end = map(int, range_info.split("-")) - # If the sequence starts at 1 and the end matches the ungapped length, remove the slash and range - if start == 1 and end == ungapped_length: - record.id = name + # Match the pattern + match = re.match(pattern, hit) + if not match: + raise ValueError(f"Skipping hit with invalid format: {hit}.") - # Add the family name to the description field - record.description = base_filename + # Extract components + sequence_name = match.group(1) # Everything before the last '/' + env_from = int(match.group(2)) # First integer in the range + env_to = int(match.group(3)) # Second integer in the range - with gzip.open(out_msa, "wt") as gz_file: - SeqIO.write(filtered_records, gz_file, "fasta") + return sequence_name, env_from, env_to - for record in filtered_records: - record.letter_annotations = {} # Clear annotations - record.seq = record.seq.replace("-", "") - with gzip.open(out_fasta, "wt") as gz_file: - SeqIO.write(filtered_records, gz_file, "fasta") +def extract_fasta_subset(filtered_sequences, fasta, out_fasta): + open_func = gzip.open if fasta.endswith(".gz") else open + with open_func(fasta, "rt") as in_fasta: + fasta_dict = {record.id: str(record.seq) for record in SeqIO.parse(in_fasta, "fasta")} + + with gzip.open(out_fasta, "wt") as out_file: + for filtered_sequence in filtered_sequences: + try: + sequence_name, env_from, env_to = validate_and_parse_hit_name(filtered_sequence) - print(f"Filtered alignment saved to {out_msa}") + # Get the original sequence + original_record = fasta_dict[sequence_name] + # Extract the specific range (adjust indices for 0-based indexing) + extracted_seq = original_record[env_from-1:env_to] -def filter_recruited(alignment, domtbl, length_threshold, out_msa, out_fasta): + # Determine the new sequence ID + if len(extracted_seq) == len(original_record): + new_id = sequence_name # Omit range if full-length + else: + new_id = f"{sequence_name}/{env_from}-{env_to}" + + out_file.write(f">{new_id}\n{extracted_seq}\n") + except KeyError: + print(f"Sequence {sequence_name} not found in the input FASTA.", file=sys.stderr) + except ValueError as e: + print(e, file=sys.stderr) + + +def filter_recruited(domtbl, fasta, length_threshold, out_fasta): filtered_sequences = filter_sequences(domtbl, length_threshold) - filter_stockholm_to_fasta(alignment, filtered_sequences, out_msa, out_fasta) + extract_fasta_subset(filtered_sequences, fasta, out_fasta) def main(args=None): args = parse_args(args) - filter_recruited( - args.alignment, args.domtbl, args.length_threshold, args.out_msa, args.out_fasta - ) + filter_recruited(args.domtbl, args.fasta, args.length_threshold, args.out_fasta) if __name__ == "__main__": diff --git a/conf/modules.config b/conf/modules.config index 5e1b504..e9679b8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -368,7 +368,7 @@ process { publishDir = [ path: { "${params.outdir}/hmmer/hmmsearch/${meta.id}/" }, mode: params.publish_dir_mode, - pattern: "*.{sto.gz,domtbl.gz}", + pattern: "*.domtbl.gz", enabled: params.save_hmmsearch_results, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/docs/output.md b/docs/output.md index 5c640c9..87f12f9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -137,7 +137,7 @@ Reporting: - `full_msa/` - `pre_non_redundant/` - `/` - - `_*.fas.gz`: compressed family full MSA (before checking for redundancy) + - `_*.fas.gz`: compressed family full MSA (before checking for redundancy)
    diff --git a/modules.json b/modules.json index 1f8446a..f7079a3 100644 --- a/modules.json +++ b/modules.json @@ -20,6 +20,11 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "hmmer/hmmalign": { + "branch": "master", + "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", + "installed_by": ["modules"] + }, "hmmer/hmmbuild": { "branch": "master", "git_sha": "03a9f356a1a333923c1177c2912fa7bc61bb46f3", diff --git a/modules/local/filter_recruited.nf b/modules/local/filter_recruited.nf index 3bc510c..6b1a2aa 100644 --- a/modules/local/filter_recruited.nf +++ b/modules/local/filter_recruited.nf @@ -8,12 +8,10 @@ process FILTER_RECRUITED { 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" input: - tuple val(meta) , path(sto) - tuple val(meta2), path(domtbl) + tuple val(meta), path(domtbl), path(fa) val(length_threshold) output: - tuple val(meta), path("*.fas.gz") , emit: full_msa tuple val(meta), path("*.fasta.gz"), emit: fasta path "versions.yml" , emit: versions @@ -24,10 +22,9 @@ process FILTER_RECRUITED { def prefix = task.ext.prefix ?: "${meta.id}" """ filter_recruited.py \\ - --alignment ${sto} \\ --domtbl ${domtbl} \\ + --fasta ${fa} \\ --length_threshold ${length_threshold} \\ - --out_msa ${prefix}.fas.gz \\ --out_fasta ${prefix}.fasta.gz cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/hmmer/hmmalign/environment.yml b/modules/nf-core/hmmer/hmmalign/environment.yml new file mode 100644 index 0000000..c5ddec5 --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::hmmer=3.4 diff --git a/modules/nf-core/hmmer/hmmalign/main.nf b/modules/nf-core/hmmer/hmmalign/main.nf new file mode 100644 index 0000000..39b17c7 --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/main.nf @@ -0,0 +1,46 @@ +process HMMER_HMMALIGN { + tag "$meta.id" + label 'process_single' + + 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/07/07c4cbd91c4459dc86b13b5cd799cacba96b27d66c276485550d299c7a4c6f8a/data' : + 'community.wave.seqera.io/library/hmmer:3.4--cb5d2dd2e85974ca' }" + + input: + tuple val(meta), path(fasta) + path hmm + + output: + tuple val(meta), path("*.sto.gz"), emit: sto + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + hmmalign \\ + $args \\ + $hmm \\ + $fasta | gzip -c > ${prefix}.sto.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(hmmalign -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo | gzip > ${prefix}.sto.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmmer: \$(hmmalign -h | grep -o '^# HMMER [0-9.]*' | sed 's/^# HMMER *//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmmer/hmmalign/meta.yml b/modules/nf-core/hmmer/hmmalign/meta.yml new file mode 100644 index 0000000..fb16ba6 --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/meta.yml @@ -0,0 +1,54 @@ +name: hmmer_hmmalign +description: hmmalign from the HMMER suite aligns a number of sequences to an HMM + profile +keywords: + - alignment + - HMMER + - profile + - amino acid + - nucleotide +tools: + - hmmer: + description: Biosequence analysis using profile hidden Markov models + homepage: http://hmmer.org/ + documentation: http://hmmer.org/documentation.html + doi: "10.1371/journal.pcbi.1002195" + licence: ["BSD-3-Clause"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Amino acid or nucleotide gzipped compressed fasta file + pattern: "*.{fna.gz,faa.gz,fasta.gz,fa.gz}" + - - hmm: + type: file + description: A gzipped HMM file + pattern: "*.hmm.gz" +output: + - sto: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sto.gz": + type: file + description: Multiple alignment in gzipped Stockholm format + pattern: "*.sto.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@erikrikarddaniel" + - "@jfy133" +maintainers: + - "@erikrikarddaniel" + - "@jfy133" + - "@vagkaratzas" diff --git a/modules/nf-core/hmmer/hmmalign/tests/main.nf.test b/modules/nf-core/hmmer/hmmalign/tests/main.nf.test new file mode 100644 index 0000000..7b0368f --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/tests/main.nf.test @@ -0,0 +1,58 @@ + +nextflow_process { + + name "Test Process HMMER_HMMALIGN" + script "../main.nf" + process "HMMER_HMMALIGN" + + tag "modules" + tag "modules_nfcore" + tag "hmmer" + tag "hmmer/hmmalign" + + test("test-hmmer-hmmalign") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-hmmer-hmmalign-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.modules_testdata_base_path + 'delete_me/hmmer/e_coli_k12_16s.fna.gz', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'delete_me/hmmer/bac.16S_rRNA.hmm.gz', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/hmmer/hmmalign/tests/main.nf.test.snap b/modules/nf-core/hmmer/hmmalign/tests/main.nf.test.snap new file mode 100644 index 0000000..ae65cac --- /dev/null +++ b/modules/nf-core/hmmer/hmmalign/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test-hmmer-hmmalign": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.sto.gz:md5,4ae989d5ade2aaae9578cb88ba031e8f" + ] + ], + "1": [ + "versions.yml:md5,601e13e7a1e6057766d862a828d501c4" + ], + "sto": [ + [ + { + "id": "test" + }, + "test.sto.gz:md5,4ae989d5ade2aaae9578cb88ba031e8f" + ] + ], + "versions": [ + "versions.yml:md5,601e13e7a1e6057766d862a828d501c4" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "23.04.5" + }, + "timestamp": "2024-11-13T12:37:26.551497424" + }, + "test-hmmer-hmmalign-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.sto.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,601e13e7a1e6057766d862a828d501c4" + ], + "sto": [ + [ + { + "id": "test" + }, + "test.sto.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,601e13e7a1e6057766d862a828d501c4" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "23.04.5" + }, + "timestamp": "2024-11-13T12:37:32.244343836" + } +} \ No newline at end of file diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index bee1e74..a423e95 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -52,24 +52,33 @@ workflow GENERATE_FAMILIES { ch_hmm .map { meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(sequences, by: 0) - .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, true, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } // TODO true to false, no .sto + .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, false, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } .set { ch_input_for_hmmsearch } if (params.recruit_sequences_with_models) { HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - FILTER_RECRUITED( HMMER_HMMSEARCH.out.alignments, HMMER_HMMSEARCH.out.domain_summary, params.hmmsearch_query_length_threshold ) + // Combine with same id to ensure in sync + HMMER_HMMSEARCH.out.domain_summary + .map { meta, domtbl -> [ [id: meta.id], meta, domtbl ] } + .combine(sequences, by: 0) + .map { id, meta, domtbl, seqs -> [ meta, domtbl, seqs ] } + .set { ch_input_for_filter_recruited } + + FILTER_RECRUITED( ch_input_for_filter_recruited, params.hmmsearch_query_length_threshold ) ch_versions = ch_versions.mix( FILTER_RECRUITED.out.versions ) - ch_msa = FILTER_RECRUITED.out.full_msa ch_fasta = FILTER_RECRUITED.out.fasta + ch_fasta.view() // TODO HMMER_HMMALIGN + // ch_msa = FILTER_RECRUITED.out.full_msa + } emit: versions = ch_versions - msa = ch_msa + // msa = ch_msa // TODO update fasta = ch_fasta hmm = ch_hmm } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 5ac94df..41c5634 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -87,19 +87,19 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES( ch_samplesheet_for_create, CHUNK_CLUSTERS.out.fasta_chunks ) ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) - // Remove redundant sequences and families - REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) - - // Post-processing - REMOVE_REDUNDANCY.out.msa - .map { meta, aln -> [ [id: meta.id], aln ] } - .groupTuple(by: 0) - .set { ch_msa } - - EXTRACT_FAMILY_REPS( ch_msa ) - ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) - ch_family_reps = ch_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) + // // Remove redundant sequences and families + // REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) + // ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + + // // Post-processing + // REMOVE_REDUNDANCY.out.msa + // .map { meta, aln -> [ [id: meta.id], aln ] } + // .groupTuple(by: 0) + // .set { ch_msa } + + // EXTRACT_FAMILY_REPS( ch_msa ) + // ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + // ch_family_reps = ch_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) // // Collate and save software versions From 7577bcc1c47d3cc839b03b0ef463ea0747b6d6c6 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 08:04:30 +0000 Subject: [PATCH 099/139] HMMER_HMMALIGN added, checkpoint --- conf/modules.config | 13 +++- subworkflows/local/generate_families.nf | 17 +++-- subworkflows/local/remove_redundancy.nf | 98 +++++++++++++------------ workflows/proteinfamilies.nf | 8 +- 4 files changed, 78 insertions(+), 58 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e9679b8..596387b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -406,7 +406,18 @@ process { publishDir = [ path: { "${params.outdir}/full_msa/pre_non_redundant/${meta.id}/" }, mode: params.publish_dir_mode, - enabled: true, + enabled: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'HMMER_HMMALIGN' { + ext.prefix = { "${meta.id}_${meta.chunk}" } + tag = { "${meta.id}_${meta.chunk}" } + publishDir = [ + path: { "${params.outdir}/full_msa/pre_non_redundant/${meta.id}/" }, + mode: params.publish_dir_mode, + pattern: "*.sto.gz", saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index a423e95..1e5a12c 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -8,7 +8,7 @@ include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' include { FILTER_RECRUITED } from '../../modules/local/filter_recruited.nf' -// TODO include { HMMER_HMMALIGN } from '../../modules/nf-core/hmmer/hmmalign/main' +include { HMMER_HMMALIGN } from '../../modules/nf-core/hmmer/hmmalign/main' workflow GENERATE_FAMILIES { take: @@ -70,15 +70,22 @@ workflow GENERATE_FAMILIES { ch_versions = ch_versions.mix( FILTER_RECRUITED.out.versions ) ch_fasta = FILTER_RECRUITED.out.fasta - ch_fasta.view() - // TODO HMMER_HMMALIGN - // ch_msa = FILTER_RECRUITED.out.full_msa + // Join to ensure in sync + ch_input_for_hmmalign = ch_fasta + .join(ch_hmm) + .multiMap { meta, seqs, hmms -> + seq: [ meta, seqs ] + hmm: [ hmms ] + } + HMMER_HMMALIGN( ch_input_for_hmmalign.seq, ch_input_for_hmmalign.hmm ) + ch_versions = ch_versions.mix( HMMER_HMMALIGN.out.versions ) + ch_msa = HMMER_HMMALIGN.out.sto } emit: versions = ch_versions - // msa = ch_msa // TODO update + msa = ch_msa fasta = ch_fasta hmm = ch_hmm } diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index e59b189..7e27ab2 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -40,59 +40,61 @@ workflow REMOVE_REDUNDANCY { .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } .set { ch_input_for_hmmsearch } - HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - - fasta - .map { meta, fas -> [[id: meta.id], fas] } - .groupTuple(by: 0) - .set { fasta } - - // Join to ensure in sync - ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map - .join(HMMER_HMMSEARCH.out.domain_summary) - .join(fasta) - .multiMap { meta, map, domtbl, seqs -> - map: [meta, map] - domtbl: [meta, domtbl] - seqs: [meta, seqs] - } - - REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) - fasta = REMOVE_REDUNDANT_FAMS.out.fasta - - // Join to ensure in sync - ch_input_for_hmm_filtering = fasta - .join(ch_hmm) - .multiMap { meta, seqs, models -> - seqs: [meta, seqs] - models: [meta, models] - } - FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) - ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) - - fasta - .transpose() - .map { meta, file -> - [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] - } - .set { fasta } + ch_input_for_hmmsearch.view() + + // HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + // ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + + // fasta + // .map { meta, fas -> [[id: meta.id], fas] } + // .groupTuple(by: 0) + // .set { fasta } + + // // Join to ensure in sync + // ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map + // .join(HMMER_HMMSEARCH.out.domain_summary) + // .join(fasta) + // .multiMap { meta, map, domtbl, seqs -> + // map: [meta, map] + // domtbl: [meta, domtbl] + // seqs: [meta, seqs] + // } + + // REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) + // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) + // fasta = REMOVE_REDUNDANT_FAMS.out.fasta + + // // Join to ensure in sync + // ch_input_for_hmm_filtering = fasta + // .join(ch_hmm) + // .multiMap { meta, seqs, models -> + // seqs: [meta, seqs] + // models: [meta, models] + // } + // FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) + // ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) + + // fasta + // .transpose() + // .map { meta, file -> + // [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] + // } + // .set { fasta } } - if (params.remove_sequence_redundancy) { - EXECUTE_CLUSTERING( fasta ) - ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + // if (params.remove_sequence_redundancy) { + // EXECUTE_CLUSTERING( fasta ) + // ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) - ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + // REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) + // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) - ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) - ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) - msa = ALIGN_SEQUENCES.out.alignments - } + // ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) + // ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + // msa = ALIGN_SEQUENCES.out.alignments + // } emit: versions = ch_versions - msa = msa + // msa = msa } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 41c5634..89eddd4 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -87,11 +87,11 @@ workflow PROTEINFAMILIES { GENERATE_FAMILIES( ch_samplesheet_for_create, CHUNK_CLUSTERS.out.fasta_chunks ) ch_versions = ch_versions.mix( GENERATE_FAMILIES.out.versions ) - // // Remove redundant sequences and families - // REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) - // ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) + // Remove redundant sequences and families + REMOVE_REDUNDANCY( GENERATE_FAMILIES.out.msa, GENERATE_FAMILIES.out.fasta, GENERATE_FAMILIES.out.hmm ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) - // // Post-processing + // Post-processing // REMOVE_REDUNDANCY.out.msa // .map { meta, aln -> [ [id: meta.id], aln ] } // .groupTuple(by: 0) From 85272bdfffbb484729cc961d1a84934f465b8bd2 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 08:36:56 +0000 Subject: [PATCH 100/139] remove redundancy updated to work with sto alignments as well --- bin/extract_family_reps.py | 7 +- docs/output.md | 2 +- subworkflows/local/remove_redundancy.nf | 98 ++++++++++++------------- workflows/proteinfamilies.nf | 16 ++-- 4 files changed, 61 insertions(+), 62 deletions(-) diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index e1627fb..98047bf 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -74,13 +74,14 @@ def extract_first_sequences(msa_folder, metadata_file, out_fasta): if filepath.endswith(".gz") else open(filepath, "r") ) as fasta_file: - records = list(SeqIO.parse(fasta_file, "fasta")) + format = "stockholm" if filepath.endswith(".sto.gz") else "fasta" + records = list(SeqIO.parse(fasta_file, format)) family_size = len(records) if records: first_record = records[0] - # Remove gaps from the sequence + # Remove gaps from the sequence, and convert all to upper case cleaned_sequence = ( - str(first_record.seq).replace("-", "").replace(".", "") + str(first_record.seq).replace("-", "").replace(".", "").upper() ) # Modify the ID to only include the part before the first space cleaned_id = first_record.id.split(" ")[0] diff --git a/docs/output.md b/docs/output.md index 87f12f9..cf3c73c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -137,7 +137,7 @@ Reporting: - `full_msa/` - `pre_non_redundant/` - `/` - - `_*.fas.gz`: compressed family full MSA (before checking for redundancy) + - `_*.sto.gz`: compressed family full MSA produced by hmmalign (before checking for redundancy) diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index 7e27ab2..e59b189 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -40,61 +40,59 @@ workflow REMOVE_REDUNDANCY { .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } .set { ch_input_for_hmmsearch } - ch_input_for_hmmsearch.view() - - // HMMER_HMMSEARCH( ch_input_for_hmmsearch ) - // ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - - // fasta - // .map { meta, fas -> [[id: meta.id], fas] } - // .groupTuple(by: 0) - // .set { fasta } - - // // Join to ensure in sync - // ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map - // .join(HMMER_HMMSEARCH.out.domain_summary) - // .join(fasta) - // .multiMap { meta, map, domtbl, seqs -> - // map: [meta, map] - // domtbl: [meta, domtbl] - // seqs: [meta, seqs] - // } - - // REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) - // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) - // fasta = REMOVE_REDUNDANT_FAMS.out.fasta - - // // Join to ensure in sync - // ch_input_for_hmm_filtering = fasta - // .join(ch_hmm) - // .multiMap { meta, seqs, models -> - // seqs: [meta, seqs] - // models: [meta, models] - // } - // FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) - // ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) - - // fasta - // .transpose() - // .map { meta, file -> - // [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] - // } - // .set { fasta } + HMMER_HMMSEARCH( ch_input_for_hmmsearch ) + ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) + + fasta + .map { meta, fas -> [[id: meta.id], fas] } + .groupTuple(by: 0) + .set { fasta } + + // Join to ensure in sync + ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map + .join(HMMER_HMMSEARCH.out.domain_summary) + .join(fasta) + .multiMap { meta, map, domtbl, seqs -> + map: [meta, map] + domtbl: [meta, domtbl] + seqs: [meta, seqs] + } + + REMOVE_REDUNDANT_FAMS( ch_input_for_fam_removal.map, ch_input_for_fam_removal.domtbl, ch_input_for_fam_removal.seqs, params.hmmsearch_family_length_threshold ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_FAMS.out.versions ) + fasta = REMOVE_REDUNDANT_FAMS.out.fasta + + // Join to ensure in sync + ch_input_for_hmm_filtering = fasta + .join(ch_hmm) + .multiMap { meta, seqs, models -> + seqs: [meta, seqs] + models: [meta, models] + } + FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) + ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) + + fasta + .transpose() + .map { meta, file -> + [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] + } + .set { fasta } } - // if (params.remove_sequence_redundancy) { - // EXECUTE_CLUSTERING( fasta ) - // ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) + if (params.remove_sequence_redundancy) { + EXECUTE_CLUSTERING( fasta ) + ch_versions = ch_versions.mix( EXECUTE_CLUSTERING.out.versions ) - // REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) - // ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) + REMOVE_REDUNDANT_SEQS( EXECUTE_CLUSTERING.out.clusters, EXECUTE_CLUSTERING.out.seqs ) + ch_versions = ch_versions.mix( REMOVE_REDUNDANT_SEQS.out.versions ) - // ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) - // ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) - // msa = ALIGN_SEQUENCES.out.alignments - // } + ALIGN_SEQUENCES( REMOVE_REDUNDANT_SEQS.out.fasta ) + ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) + msa = ALIGN_SEQUENCES.out.alignments + } emit: versions = ch_versions - // msa = msa + msa = msa } diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 89eddd4..5ac94df 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -92,14 +92,14 @@ workflow PROTEINFAMILIES { ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing - // REMOVE_REDUNDANCY.out.msa - // .map { meta, aln -> [ [id: meta.id], aln ] } - // .groupTuple(by: 0) - // .set { ch_msa } - - // EXTRACT_FAMILY_REPS( ch_msa ) - // ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) - // ch_family_reps = ch_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) + REMOVE_REDUNDANCY.out.msa + .map { meta, aln -> [ [id: meta.id], aln ] } + .groupTuple(by: 0) + .set { ch_msa } + + EXTRACT_FAMILY_REPS( ch_msa ) + ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) + ch_family_reps = ch_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) // // Collate and save software versions From 7a74d6ebdf01207b1616db5ec47354b5a678b3f0 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 08:43:10 +0000 Subject: [PATCH 101/139] metro map updated with hmmalign --- docs/images/proteinfamilies_workflow.png | Bin 404399 -> 410458 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index a7bafb7ad4482e45d78ea4937ba42db210f991f2..83a8c0600a7d83930ce57a1bc494fe3b164b4b39 100644 GIT binary patch delta 222830 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 delta 218668 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�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

    _| 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 X|L1pHUI$!M%)sF3>gTe~DWM4f;sH0b From 49acd97b07e845b1e589f2fc2601cac22fd44c69 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 08:45:39 +0000 Subject: [PATCH 102/139] metro updated with hmmalign --- docs/images/proteinfamilies_workflow.png | Bin 404399 -> 410458 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index a7bafb7ad4482e45d78ea4937ba42db210f991f2..83a8c0600a7d83930ce57a1bc494fe3b164b4b39 100644 GIT binary patch delta 222830 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 delta 218668 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�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

    _| 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 X|L1pHUI$!M%)sF3>gTe~DWM4f;sH0b From 54980f746f0896d9aadb7d6e6ae8620571d18f41 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 08:48:10 +0000 Subject: [PATCH 103/139] output.md updated --- docs/output.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index cf3c73c..e1fa4be 100644 --- a/docs/output.md +++ b/docs/output.md @@ -22,7 +22,7 @@ Multiple sequence alignment: Generating family models: -- [hmmer](#hmmer) to build the family HMM (hmmbuild) and to 'fish' additional sequences from the input fasta file, with given thresholds, into the family and also build the family full MSA (hmmsearch) +- [hmmer](#hmmer) to build the family HMM (hmmbuild) and to optionally 'fish' additional sequences from the input fasta file (hmmsearch), with given thresholds, into the family and also build the family full MSA (hmmalign) Removing redundancy: @@ -131,7 +131,6 @@ Reporting: - `_*.hmmbuild.txt`: (optional) hmmbuild execution log - `hmmsearch/` - `/` - - `_*.sto.gz`: (optional) full multiple sequence alignment of the family - `_*.domtbl.gz`: (optional) hmmsearch results along parameters info - `_*.txt.gz`: (optional) hmmsearch execution log - `full_msa/` From 51e0b9bcb12c7badac95237143b7df36f32af12c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 09:20:32 +0000 Subject: [PATCH 104/139] filter_non_redundant_hmms updated to work properly even without fishing new sequences (different filenames to check) --- bin/filter_non_redundant_hmms.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/filter_non_redundant_hmms.py b/bin/filter_non_redundant_hmms.py index 1a626b8..169a9d0 100755 --- a/bin/filter_non_redundant_hmms.py +++ b/bin/filter_non_redundant_hmms.py @@ -39,14 +39,14 @@ def filter_non_redundant_hmms(seqs, models, out_folder): seq_basenames = { os.path.basename(f).split(".")[0] for f in os.listdir(seqs) - if f.endswith(".fasta.gz") + if f.endswith(".fasta.gz") or f.endswith(".fasta") } - # Iterate through the models folder and copy matching files for model_file in os.listdir(models): if model_file.endswith(".hmm.gz"): model_basename = os.path.basename(model_file).split(".")[0] - if model_basename in seq_basenames: + model_chunk = model_basename.split("_")[-1] # for the case where we didn't fish additional sequences, fastas only have the chunk id for name + if model_basename or model_chunk in seq_basenames: src = os.path.join(models, model_file) dst = os.path.join(out_folder, model_file) shutil.copy(src, dst) From f4849e9070b309beea26a7e29a1aa7c1c61bf687 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 10 Jan 2025 15:42:15 +0000 Subject: [PATCH 105/139] usage.md samplesheet input description update --- docs/usage.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 559dc86..d6d1981 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,22 +10,24 @@ The input data can be passed to nf-core/proteinfamilies using the `--input` para ## Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 2 columns, and a header row as shown in the examples below. +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 2 mandatory and 2 optional columns, and a header row as shown in the examples below. ```bash --input '[path to samplesheet file]' ``` ```csv -sample,fasta -CONTROL_REP1,input/mgnifams_input.fa -CONTROL_REP2,input/mgnifams_input_copy.fa.gz +sample,fasta,existing_hmms_to_update,existing_msas_to_update +CONTROL_REP1,amino_acid_sequences_input.fasta,, +CONTROL_REP2,amino_acid_sequences_extra.fa.gz,existing_hmms.tar.gz,existing_msas.tar.gz ``` -| Column | Description | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | -| `fasta` | Full path to amino acid fasta file. File can be gzipped and allowed extensions include ".fasta", ".fasta.gz", ".fa" or ".fa.gz". | +| Column | Description | +| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | +| `fasta` | Full path to amino acid fasta file. File can be gzipped and allowed extensions include ".fasta", ".fasta.gz", ".fa" or ".fa.gz". | +| `existing_hmms_to_update` | Full path to compressed archive with existing family HMMs. Allowed extension should be ".tar.gz". | +| `existing_msas_to_update` | Full path to compressed archive with existing family MSAs. Allowed extension should be ".tar.gz". | ## Running the pipeline From dc5a8847eb1e8b47de77737f8c221db024d4b40d Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 27 Jan 2025 12:39:45 +0000 Subject: [PATCH 106/139] modules update (mmseqs, multiqc, seqkit) --- modules.json | 12 +++--- .../nf-core/mmseqs/cluster/environment.yml | 2 +- modules/nf-core/mmseqs/cluster/main.nf | 7 ++-- .../mmseqs/cluster/mmseqs-cluster.diff | 4 +- .../mmseqs/cluster/tests/main.nf.test.snap | 10 ++--- .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 7 ++-- .../mmseqs/createdb/tests/main.nf.test.snap | 36 ++++++++--------- .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 13 +++--- .../mmseqs/createtsv/mmseqs-createtsv.diff | 2 +- .../mmseqs/createtsv/tests/main.nf.test.snap | 36 ++++++++--------- .../nf-core/mmseqs/linclust/environment.yml | 2 +- modules/nf-core/mmseqs/linclust/main.nf | 7 ++-- .../mmseqs/linclust/mmseqs-linclust.diff | 4 +- .../mmseqs/linclust/tests/main.nf.test.snap | 10 ++--- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 24 +++++------ modules/nf-core/seqkit/seq/environment.yml | 2 +- modules/nf-core/seqkit/seq/main.nf | 4 +- .../seqkit/seq/tests/main.nf.test.snap | 40 +++++++++---------- 22 files changed, 114 insertions(+), 118 deletions(-) diff --git a/modules.json b/modules.json index f7079a3..35b13f3 100644 --- a/modules.json +++ b/modules.json @@ -42,35 +42,35 @@ }, "mmseqs/cluster": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff" }, "mmseqs/createdb": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/linclust": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff" }, "multiqc": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", "installed_by": ["modules"] }, "seqkit/seq": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "60645c2b45e56579de0a0c89416805cae44c1f46", "installed_by": ["modules"] }, "untar": { diff --git a/modules/nf-core/mmseqs/cluster/environment.yml b/modules/nf-core/mmseqs/cluster/environment.yml index 235ad03..c79df33 100644 --- a/modules/nf-core/mmseqs/cluster/environment.yml +++ b/modules/nf-core/mmseqs/cluster/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f \ No newline at end of file diff --git a/modules/nf-core/mmseqs/cluster/main.nf b/modules/nf-core/mmseqs/cluster/main.nf index 3010fef..5e894fc 100644 --- a/modules/nf-core/mmseqs/cluster/main.nf +++ b/modules/nf-core/mmseqs/cluster/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CLUSTER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(db_input, stageAs: "db_input") @@ -34,8 +34,7 @@ process MMSEQS_CLUSTER { ${prefix}/${prefix} \\ tmp1 \\ $args \\ - --threads ${task.cpus} \\ - --compressed 1 + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff index ed5c31c..acde641 100644 --- a/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff +++ b/modules/nf-core/mmseqs/cluster/mmseqs-cluster.diff @@ -1,11 +1,11 @@ -Changes in module 'nf-core/mmseqs/cluster' +Changes in component 'nf-core/mmseqs/cluster' 'modules/nf-core/mmseqs/cluster/meta.yml' is unchanged 'modules/nf-core/mmseqs/cluster/environment.yml' is unchanged Changes in 'mmseqs/cluster/main.nf': --- modules/nf-core/mmseqs/cluster/main.nf +++ modules/nf-core/mmseqs/cluster/main.nf @@ -8,7 +8,7 @@ - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: - tuple val(meta), path(db_input) diff --git a/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap b/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap index 6fc9869..09bc83f 100644 --- a/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/cluster/tests/main.nf.test.snap @@ -8,15 +8,15 @@ "test_output_cluster.index" ], [ - "test_output_cluster.dbtype:md5,5c879eb8a8613fd4537b919e7d68d089", - "test_output_cluster.index:md5,ca7e1f0967222b06d7e05e47bcbe1e50" + "test_output_cluster.dbtype:md5,b9d9c6dbc098c97ae446f612efd8eafd", + "test_output_cluster.index:md5,9848b52b6df827d80a04f7c71c50056b" ], - "versions.yml:md5,4acad55952c6d1fb41ad7f5a44468aed" + "versions.yml:md5,8cd8fdc3e9d128b0a4dc634b8748c213" ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:44:45.713270981" + "timestamp": "2025-01-20T14:07:52.454357" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 235ad03..d356134 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index b1d6caf..6f8d5b1 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(sequence) @@ -33,8 +33,7 @@ process MMSEQS_CREATEDB { createdb \\ ${sequence_name} \\ ${prefix}/${prefix} \\ - $args \\ - --compressed 1 + $args cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap index 92f1e6d..9eee149 100644 --- a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -8,26 +8,26 @@ "single_end": false }, [ - "test:md5,7c3c2c5926cf8fa82e66b9628f680256", - "test.dbtype:md5,c8ed20c23ba91f4577f84c940c86c7db", - "test.index:md5,5b2fd8abd0ad3fee24738af7082e6a6e", + "test:md5,a2cda8768736a7a317a09d61556194bd", + "test.dbtype:md5,4352d88a78aa39750bf70cd6f27bcaa5", + "test.index:md5,4ba298b011e2472ce9f6b99fe6b6e3d5", "test.lookup:md5,32f88756dbcb6aaf7b239b0d61730f1b", "test.source:md5,9ada5b3ea6e1a7e16c4418eb98ae8d9d", - "test_h:md5,8c29f5ed94d83d7115e9c8a883ce358d", - "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", - "test_h.index:md5,87c7c8c6d16018ebfaa6f408391a5ae2" + "test_h:md5,21c399702a071bdeecce09f9d1df4531", + "test_h.dbtype:md5,740bab4f9ec8808aedb68d6b1281aeb2", + "test_h.index:md5,d767fb43b37c0a644c676b00f9f93477" ] ] ], [ - "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" + "versions.yml:md5,c62b08152082097334109fe08ec6333a" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:35:27.322864475" + "timestamp": "2025-01-20T14:11:57.883871" }, "Should build an mmseqs db from a zipped amino acid sequence file": { "content": [ @@ -37,25 +37,25 @@ "id": "test" }, [ - "test:md5,4b494965ed7ab67da8ca3f39523eb104", - "test.dbtype:md5,152afd7bf4dbe26f85032eee0269201a", - "test.index:md5,46f9d884e9a7f442fe1cd2ce339734e3", + "test:md5,1162504bc65aacf734abdcb0cdbe87de", + "test.dbtype:md5,f1d3ff8443297732862df21dc4e57262", + "test.index:md5,8cdcbc06c2b99fdb09f3d1735a76def9", "test.lookup:md5,3e27cb93d9ee875ad42a6f32f5651bdc", "test.source:md5,eaa64fc8a5f7ec1ee49b0dcbd1a72e9d", - "test_h:md5,6e798b81c70d191f78939c2dd6223a7f", - "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", - "test_h.index:md5,d5ac49ff56df064b980fa0eb5da57673" + "test_h:md5,f258f8cc04f83c270a75e8b00a6d2d89", + "test_h.dbtype:md5,740bab4f9ec8808aedb68d6b1281aeb2", + "test_h.index:md5,844bf1950bcd37284fdc5d7117ee4241" ] ] ], [ - "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" + "versions.yml:md5,c62b08152082097334109fe08ec6333a" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:35:33.418552595" + "timestamp": "2025-01-20T14:12:10.986433" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 235ad03..d356134 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 2fdd85c..f3e3b95 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(db_result) @@ -22,9 +22,9 @@ process MMSEQS_CREATETSV { script: def args = task.ext.args ?: '' - def args2 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... - def args3 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb - def args4 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb + def args2 = task.ext.args2 ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... + def args3 = task.ext.args3 ?: "*.dbtype" // database generated by mmyseqs/createdb + def args4 = task.ext.args4 ?: "*.dbtype" // database generated by mmyseqs/createdb def prefix = task.ext.prefix ?: "${meta.id}" """ @@ -40,8 +40,7 @@ process MMSEQS_CREATETSV { \$DB_RESULT_PATH_NAME \\ ${prefix}.tsv \\ $args \\ - --threads ${task.cpus} \\ - --compressed 1 + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff index 6c677f6..bcdb48a 100644 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -1,4 +1,4 @@ -Changes in module 'nf-core/mmseqs/createtsv' +Changes in component 'nf-core/mmseqs/createtsv' 'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged 'modules/nf-core/mmseqs/createtsv/environment.yml' is unchanged Changes in 'mmseqs/createtsv/main.nf': diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index 6192fa1..a70f839 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -24,15 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:48.386202112" + "timestamp": "2025-01-20T17:29:15.220926" }, "mmseqs/createtsv - sarscov2 - cluster - stub": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -59,15 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:56.33475153" + "timestamp": "2025-01-20T17:29:32.089204" }, "mmseqs/createtsv - bacteroides_fragilis - taxonomy": { "content": [ @@ -82,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -94,15 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T11:25:54.741775111" + "timestamp": "2025-01-20T17:28:41.472818" }, "mmseqs/createtsv - sarscov2 - cluster": { "content": [ @@ -113,11 +113,11 @@ "id": "test_result", "single_end": true }, - "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + "test_result.tsv:md5,c81449fb936b76aad6f925b965e84bc5" ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -125,18 +125,18 @@ "id": "test_result", "single_end": true }, - "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + "test_result.tsv:md5,c81449fb936b76aad6f925b965e84bc5" ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:42.432284995" + "timestamp": "2025-01-20T17:28:58.633976" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/linclust/environment.yml b/modules/nf-core/mmseqs/linclust/environment.yml index 235ad03..d356134 100644 --- a/modules/nf-core/mmseqs/linclust/environment.yml +++ b/modules/nf-core/mmseqs/linclust/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/linclust/main.nf b/modules/nf-core/mmseqs/linclust/main.nf index d51cbd6..128453f 100644 --- a/modules/nf-core/mmseqs/linclust/main.nf +++ b/modules/nf-core/mmseqs/linclust/main.nf @@ -4,8 +4,8 @@ process MMSEQS_LINCLUST { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(db_input, stageAs: "db_input") @@ -34,8 +34,7 @@ process MMSEQS_LINCLUST { ${prefix}/${prefix} \\ tmp1 \\ $args \\ - --threads ${task.cpus} \\ - --compressed 1 + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff index bd6092f..de5a13e 100644 --- a/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff +++ b/modules/nf-core/mmseqs/linclust/mmseqs-linclust.diff @@ -1,11 +1,11 @@ -Changes in module 'nf-core/mmseqs/linclust' +Changes in component 'nf-core/mmseqs/linclust' 'modules/nf-core/mmseqs/linclust/meta.yml' is unchanged 'modules/nf-core/mmseqs/linclust/environment.yml' is unchanged Changes in 'mmseqs/linclust/main.nf': --- modules/nf-core/mmseqs/linclust/main.nf +++ modules/nf-core/mmseqs/linclust/main.nf @@ -8,7 +8,7 @@ - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: - tuple val(meta), path(db_input) diff --git a/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap index e1622d4..ab999b3 100644 --- a/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/linclust/tests/main.nf.test.snap @@ -8,15 +8,15 @@ "test_output_cluster.index" ], [ - "test_output_cluster.dbtype:md5,5c879eb8a8613fd4537b919e7d68d089", - "test_output_cluster.index:md5,38908275cdd5727ae0eb9be017f9ca13" + "test_output_cluster.dbtype:md5,b9d9c6dbc098c97ae446f612efd8eafd", + "test_output_cluster.index:md5,a0b78f31aee2c327d72f32919814baf1" ], - "versions.yml:md5,969cb26241f66ac758c104f9561860b1" + "versions.yml:md5,acd9806d081cf15f08f26263bd9dfe80" ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:43:26.020522437" + "timestamp": "2025-01-20T18:13:05.966684" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 6f5b867..a27122c 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.25.1 + - bioconda::multiqc=1.27 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index cc0643e..58d9313 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.27--pyhdfd78af_0' : + 'biocontainers/multiqc:1.27--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 2fcbb5f..7b7c132 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:51:46.317523" + "timestamp": "2025-01-27T09:29:57.631982377" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:20.680978" + "timestamp": "2025-01-27T09:30:34.743726958" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:09.185842" + "timestamp": "2025-01-27T09:30:21.44383553" } } \ No newline at end of file diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml index 4f8058a..160a67c 100644 --- a/modules/nf-core/seqkit/seq/environment.yml +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::seqkit=2.8.1" + - "bioconda::seqkit=2.9.0" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf index d7d38fc..9d76da2 100644 --- a/modules/nf-core/seqkit/seq/main.nf +++ b/modules/nf-core/seqkit/seq/main.nf @@ -5,8 +5,8 @@ process SEQKIT_SEQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': - 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/seqkit:2.9.0--h9ee0642_0': + 'biocontainers/seqkit:2.9.0--h9ee0642_0' }" input: tuple val(meta), path(fastx) diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap index e691096..6817193 100644 --- a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -22,15 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:52:18.220051903" + "timestamp": "2025-01-15T15:13:34.513457" }, "sarscov2-test_1_fastq_gz": { "content": [ @@ -44,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -55,15 +55,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:55.607826581" + "timestamp": "2025-01-15T15:13:27.316329" }, "sarscov2-genome_fasta": { "content": [ @@ -77,7 +77,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -88,15 +88,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:27.717072933" + "timestamp": "2025-01-15T15:13:18.463038" }, "sarscov2-genome_fasta_gz": { "content": [ @@ -110,7 +110,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -121,14 +121,14 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:37.917560104" + "timestamp": "2025-01-15T15:13:22.960973" } } \ No newline at end of file From 3b377ab1c400dc057b21c4ab7326f904419e485b Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Tue, 28 Jan 2025 05:57:11 +0000 Subject: [PATCH 107/139] Update README.md Co-authored-by: Edmund Miller <20095261+edmundmiller@users.noreply.github.com> --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc7af8e..acd7c66 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ Optionally, paths to existing family HMMs and MSAs can be given (must have match nf-core/proteinfamilies workflow overview

    -A. Create families +### Create families + 1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) 2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/)) 3. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/)) @@ -37,7 +38,8 @@ A. Create families 6. Optionally, from the remaining families, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keep cluster representatives 7. Present QC for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) -B. Update families +### Update families + 1. Find which families to update by comparing the input sequences against existing family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) 2. For non hit sequences continue with the above: A. Create families. For hit sequences and families continue to: 3 3. Extract family sequences ([`SeqKit`](https://github.com/shenwei356/seqkit/)) and concatenate with filtered hit sequences of each family From 6b877bebeaaed68600d48150a5c6114d21d897e8 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Tue, 28 Jan 2025 13:36:10 +0000 Subject: [PATCH 108/139] local modules mem reqs in base.config --- conf/base.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/conf/base.config b/conf/base.config index 647189b..d3959cc 100644 --- a/conf/base.config +++ b/conf/base.config @@ -57,4 +57,12 @@ process { errorStrategy = 'retry' maxRetries = 2 } + + withName: CHUNK_CLUSTERS { + memory = { 36.GB * task.attempt } + } + withName: FILTER_RECRUITED { + memory = { 36.GB * task.attempt } + } + } From 704ebe48a72d59c52e9a5f344a2853336c7701b1 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 11:26:57 +0000 Subject: [PATCH 109/139] metro map updated and svg added --- docs/images/proteinfamilies_workflow.png | Bin 410458 -> 459859 bytes docs/images/proteinfamilies_workflow.svg | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 docs/images/proteinfamilies_workflow.svg diff --git a/docs/images/proteinfamilies_workflow.png b/docs/images/proteinfamilies_workflow.png index 83a8c0600a7d83930ce57a1bc494fe3b164b4b39..4268a7d96de8faf649afee7b62cffd3be070709b 100644 GIT binary patch literal 459859 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 o3|_yD6JsoX-yQb+xW4<;!&*d0hq1)x8rnBv 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%0D)g5xtDF=si_Up|L8@K=yFR?n&N2; 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

    D8-6 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 + + +
    1b
    1b
    2
    2
    1a
    1a
    fasta
    fasta
    mmseqs
    createdb
    mmseqs...
    mmseqs
    cluster
    mmseqs...
    mmseqs
    linclust
    mmseqs...
    TSV
    TSV
    mmseqs
    createtsv
    mmseqs...
    mafft
    align
    mafft...
    famsa
    align
    famsa...
    clipkit
    clipkit
    MSA
    MSA
    HMM
    HMM
    MSA
    MSA
    hmmer
    hmmbuild
    hmmer...
    hmmer
    hmmsearch
    hmmer...
    3
    3
    hmmer
    hmmsearch
    hmmer...
    mmseqs
    createdb
    mmseqs...
    mmseqs
    cluster
    mmseqs...
    mmseqs
    linclust
    mmseqs...
    mmseqs
    createtsv
    mmseqs...
    `
    `
    mafft
    align
    mafft...
    famsa
    align
    famsa...
    MSA
    MSA
    HTML
    HTML
    MultiQC
    MultiQC
    STAGE
    1a. Initial clustering
    1b. Family update
    2. Family generation
    3. Redundancy removal
    STAGE...
    METHOD
    Amino acid fasta file to protein families
    Existing families update
    METHOD...
    HMM
    HMM
    hmmer
    hmmsearch
    hmmer...
    mmseqs
    createdb
    mmseqs...
    mmseqs
    cluster
    mmseqs...
    mmseqs
    linclust
    mmseqs...
    mmseqs
    createtsv
    mmseqs...
    clipkit
    clipkit
    hmmer
    hmmbuild
    hmmer...
    HTML
    HTML
    MultiQC
    MultiQC
    MSA
    MSA
    HMM
    HMM
    mafft
    align
    mafft...
    famsa
    align
    famsa...
    HMM
    HMM
    MSA
    MSA
    cat
    cat
    cat...
    cat
    cat
    cat...
    cat
    cat
    cat...
    seqkit
    seq
    seqkit...
    untar
    untar
    untar
    untar
    hmmer
    hmmalign
    hmmer...
    \ No newline at end of file From a5a8383f78afbd1ba75c803e3abd22f4e24007f7 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 11:34:44 +0000 Subject: [PATCH 110/139] changelog updated for first release --- CHANGELOG.md | 14 ++++++++------ README.md | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76a80c3..30d7d9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0dev - [date] +## v1.0.0 - [2025/01/31] Initial release of nf-core/proteinfamilies, created with the [nf-core](https://nf-co.re/) template. ### `Added` -### `Fixed` - -### `Dependencies` - -### `Deprecated` +- Amino acid sequence clustering (mmseqs) +- Multiple sequence alignment (famsa, mafft, clipkit) +- Hidden Markov Model generation (hmmer) +- Between families redundancy removal (hmmer) +- In-family sequence redundancy removal (mmseqs) +- Family updating (hmmer, seqkit, mmseqs, famsa, mafft, clipkit) +- Family statistics presentation (multiqc) diff --git a/README.md b/README.md index acd7c66..33b3e17 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Optionally, paths to existing family HMMs and MSAs can be given (must have match 4. Generate family HMMs and fish additional sequences into the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) 5. Optionally, remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/)) 6. Optionally, from the remaining families, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keep cluster representatives -7. Present QC for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) +7. Present statistics for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/)) ### Update families From 02ec8aa856f356909997c365db9dced1ba991375 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 11:38:47 +0000 Subject: [PATCH 111/139] Biopython citation added --- CITATIONS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CITATIONS.md b/CITATIONS.md index fd1a84f..9cb5c87 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -34,6 +34,10 @@ > Shen W, Sipos B, Zhao L. SeqKit2: A Swiss army knife for sequence and alignment processing. iMeta. 2024 Apr 5:e191. doi: 10.1002/imt2.191. PubMed PMID: 38898985; PubMed Central PMCID: PMC11183193. +- [Biopython](https://pubmed.ncbi.nlm.nih.gov/19304878/) + +> Cock PJ, Antao T, Chang JT, Chapman BA, Cox CJ, Dalke A, Friedberg I, Hamelryck T, Kauff F, Wilczynski B, De Hoon MJ. Biopython: freely available Python tools for computational molecular biology and bioinformatics. Bioinformatics. 2009 Jun 6;25(11):1422. doi: 10.1093/bioinformatics/btp163. PubMed PMID: 19304878; PubMed Central PMCID: PMC2682512. + - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. From 891706b76daafd000d945d57b59d7e38377aa162 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 11:44:52 +0000 Subject: [PATCH 112/139] schema pattern updated to include faa and fas input files --- assets/schema_input.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 8911d3d..277439e 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,8 +17,8 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?a(\\.gz)?$", - "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.fa.gz' or '.fasta.gz'" + "pattern": "^\\S+\\.(fa|fasta|faa|fas)(\\.gz)?$", + "errorMessage": "Fasta file for amino acid sequences must be provided, cannot contain spaces and must have extension '.fa', '.fasta', '.faa', '.fas', '.fa.gz', '.fasta.gz', '.faa.gz' or '.fas.gz'" }, "existing_hmms_to_update": { "type": "string", From 228659e83d5176b9b518a6c0987c60750c27f8da Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:45:32 +0000 Subject: [PATCH 113/139] Update assets/schema_input.json Co-authored-by: James A. Fellows Yates --- assets/schema_input.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 8911d3d..7501d2a 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -25,7 +25,7 @@ "format": "file-path", "exists": true, "pattern": "^\\S+\\.tar\\.gz$", - "description": "Tarball file containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." + "description": "Gzipped tarball file containing existing protein family HMMs. These models will be used to 'fish' new sequences from the input and then be updated accordingly." }, "existing_msas_to_update": { "type": "string", From e83d6b42369e466705734b1f9436acbbca273f29 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 11:51:42 +0000 Subject: [PATCH 114/139] python script licensing --- bin/branch_hits_fasta.py | 3 +++ bin/chunk_clusters.py | 3 +++ bin/clip_ends.py | 3 +++ bin/extract_family_reps.py | 3 +++ bin/filter_non_redundant_hmms.py | 3 +++ bin/filter_recruited.py | 3 +++ bin/remove_redundant_fams.py | 3 +++ bin/remove_redundant_seqs.py | 3 +++ 8 files changed, 24 insertions(+) diff --git a/bin/branch_hits_fasta.py b/bin/branch_hits_fasta.py index 1abc4a1..64c7c6d 100755 --- a/bin/branch_hits_fasta.py +++ b/bin/branch_hits_fasta.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import argparse import os diff --git a/bin/chunk_clusters.py b/bin/chunk_clusters.py index 8ede06c..ae99828 100755 --- a/bin/chunk_clusters.py +++ b/bin/chunk_clusters.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import os import argparse diff --git a/bin/clip_ends.py b/bin/clip_ends.py index da43dcb..4a01684 100755 --- a/bin/clip_ends.py +++ b/bin/clip_ends.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import numpy as np import argparse diff --git a/bin/extract_family_reps.py b/bin/extract_family_reps.py index 98047bf..afae2ed 100755 --- a/bin/extract_family_reps.py +++ b/bin/extract_family_reps.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import os import gzip diff --git a/bin/filter_non_redundant_hmms.py b/bin/filter_non_redundant_hmms.py index 169a9d0..6434a95 100755 --- a/bin/filter_non_redundant_hmms.py +++ b/bin/filter_non_redundant_hmms.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import os import sys import argparse diff --git a/bin/filter_recruited.py b/bin/filter_recruited.py index 51d13ec..e9044f8 100755 --- a/bin/filter_recruited.py +++ b/bin/filter_recruited.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import argparse import gzip diff --git a/bin/remove_redundant_fams.py b/bin/remove_redundant_fams.py index 5da880a..29d2f81 100755 --- a/bin/remove_redundant_fams.py +++ b/bin/remove_redundant_fams.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import os import sys import pandas as pd diff --git a/bin/remove_redundant_seqs.py b/bin/remove_redundant_seqs.py index c1fb66c..57737ba 100755 --- a/bin/remove_redundant_seqs.py +++ b/bin/remove_redundant_seqs.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +## Originally written by Evangelos Karatzas and released under the MIT license. +## See git repository (https://github.com/nf-core/proteinfamilies) for full license text. + import sys import gzip import argparse From 00c2c6f6d2eedd71a89b231bc27df81ffc18ebe7 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:58:03 +0000 Subject: [PATCH 115/139] Update conf/test_full.config Co-authored-by: James A. Fellows Yates --- conf/test_full.config | 5 ----- 1 file changed, 5 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index cfca67b..eeeea3d 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -11,11 +11,6 @@ */ process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] } params { From bdb1bececb7acfbe59fb9522f0fd915f40877707 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 12:00:01 +0000 Subject: [PATCH 116/139] removed unused process block from test_full config --- conf/test_full.config | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index eeeea3d..9d266ef 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,9 +10,6 @@ ---------------------------------------------------------------------------------------- */ -process { -} - params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check simultaneous create and update/create pipeline functions with two input samples' From bc594f880be494405843a030aabd75da8852e7ee Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 12:43:25 +0000 Subject: [PATCH 117/139] Parameter specifications in usage.md --- docs/usage.md | 13 +++++++++++++ nextflow_schema.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index da924ed..0aa1fb2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -29,6 +29,19 @@ CONTROL_REP2,amino_acid_sequences_extra.fa.gz,existing_hmms.tar.gz,existing_msas | `existing_hmms_to_update` | Full path to compressed archive with existing family HMMs. Allowed extension should be ".tar.gz". | | `existing_msas_to_update` | Full path to compressed archive with existing family MSAs. Allowed extension should be ".tar.gz". | +## Parameter specifications +Here we provide guidance regarding some parameter choices. + +- clustering_tool ["cluster", "linclust"]: The mmseqs algorithm used for clustering. +The 'cluster' option is very slow and should only be used for small or medium size inputs. +The 'linclust' option is somewhat less sensitive, but extremely fast for clustering larger datasets. +- alignment_tool ["famsa", "mafft"]: Multiple Sequence Alignment (MSA) options. +The 'famsa' option is generally recommended as best time-memory-accuracy combination. +The 'mafft' option is also very fast and may still produce better alignments in some edge cases. +- clipping_tool ["clip_ends", "clipkit"]: Options for MSA gap trimming. +The 'clipkit' options clips gaps throughout the sequence while 'clip_ends' only at the ends. +The authors suggest using 'clip_ends', since the gaps inside the sequences may still carry evolutionary significance. + ## Running the pipeline The typical command for running the pipeline is as follows: diff --git a/nextflow_schema.json b/nextflow_schema.json index 29d0025..80678bb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -202,7 +202,7 @@ "type": "string", "description": "Choose clustering algorithm. Either simple 'cluster' for medium size inputs, or 'linclust' for less sensitive clustering of larger datasets.", "help_text": "mmseqs algorithms available: 'cluster' or 'linclust'.", - "enum": ["cluster", "linclust"] + "enum": ["linclust", "cluster"] }, "cluster_seq_identity": { "type": "number", From dd2cc976e5f5042f87feeb44b0dc01e4a2eff949 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:46:30 +0000 Subject: [PATCH 118/139] Update subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf Co-authored-by: James A. Fellows Yates --- .../local/utils_nfcore_proteinfamilies_pipeline/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 7d5aa01..35ad4c1 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -219,7 +219,7 @@ def validateMatchingFolders(channel1, channel2) { // Check if the number of files matches if (files1.size() != files2.size()) { - error("Folder mismatch: ${folder1} has ${files1.size()} files, but ${folder2} has ${files2.size()} files.") + error("[nf-core/proteinfamilies] ERROR: Folder mismatch: ${folder1} has ${files1.size()} files, but ${folder2} has ${files2.size()} files.") } // Extract base filenames (without extensions) and sort From 07d52a3160edb69504cfe1b60a9f45993cd1f8bf Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 12:53:19 +0000 Subject: [PATCH 119/139] checkIfExists: true added to file() --- subworkflows/local/generate_families.nf | 2 +- subworkflows/local/update_families.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index 1e5a12c..a943ffd 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -24,7 +24,7 @@ workflow GENERATE_FAMILIES { fasta_chunks .transpose() .map { meta, file_path -> - [ [id: meta.id, chunk: file(file_path).baseName], file_path ] + [ [id: meta.id, chunk: file(file_path, checkIfExists: true).baseName], file_path ] } .set { ch_fasta } diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index e6ed889..14a51cf 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -47,7 +47,7 @@ workflow UPDATE_FAMILIES { validateMatchingFolders(ch_folders_to_validate.hmm_folder_ch, ch_folders_to_validate.msa_folder_ch) // Squeeze the HMMs into a single file - CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("$folder/*")] } ) + CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("$folder/*", checkIfExists: true)] } ) ch_versions = ch_versions.mix( CAT_HMM.out.versions ) // Prep the sequences to search against the HMM concatenated model of families @@ -80,7 +80,7 @@ workflow UPDATE_FAMILIES { UNTAR_MSA.out.untar .map { meta, folder -> - [meta, file("$folder/*")] + [meta, file("$folder/*", checkIfExists: true)] } .transpose() .map { meta, file -> From f6cb471bd9a3095c10d9a63a75c3e81535122e3d Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:54:40 +0000 Subject: [PATCH 120/139] Update nextflow_schema.json Co-authored-by: James A. Fellows Yates --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 29d0025..8097c63 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -258,7 +258,7 @@ "gap_threshold": { "type": "number", "default": 0.5, - "description": "Seed MSA positions with gappyness greater than this threshold will be trimmed" + "description": "Seed MSA positions with gappiness greater than this threshold will be trimmed" }, "recruit_sequences_with_models": { "type": "boolean", From 0ce6ee0ddccbf57ac61cfeab337396cfa1399c1a Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:56:13 +0000 Subject: [PATCH 121/139] Update nextflow.config Co-authored-by: James A. Fellows Yates --- nextflow.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index a3c26d0..acc3965 100644 --- a/nextflow.config +++ b/nextflow.config @@ -191,7 +191,8 @@ profiles { // Load nf-core custom profiles from different Institutions includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" - +// Load nf-core/proteinfamilies custom profiles from different institutions. +includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/proteinfamilies.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers From f050d84c7aecd8d0c2f6fdb6917defb9471a964e Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:56:36 +0000 Subject: [PATCH 122/139] Update docs/output.md Co-authored-by: James A. Fellows Yates --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index e1fa4be..73d4a89 100644 --- a/docs/output.md +++ b/docs/output.md @@ -247,7 +247,7 @@ Reporting: - `update_families/` - `hmmer/` - `concatenated/` - - `.hmm.gz`: (optional) concatenated compressed HMM models for all families in a given sample, to be used as input for hmmsearch, to determine which families will be updated with new sequences. + - `.hmm.gz`: (optional) concatenated compressed HMM models for all families in a given sample, to be used as input for hmmsearch, to determine which families will be updated with new sequences - `hmmsearch/` - `/` - `.domtbl.gz`: (optional) hmmsearch results of input fasta file against existing families' HMMs From 1b2d81bf6cf38b4e664808426521659b87d5a7c5 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:58:47 +0000 Subject: [PATCH 123/139] Update docs/usage.md Co-authored-by: James A. Fellows Yates --- docs/usage.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index da924ed..7a20b0e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -6,7 +6,9 @@ ## Introduction -The input data can be passed to nf-core/proteinfamilies using the `--input` parameter of amino acid fasta files. +**nf-core/proteinfamilies** is a bioinformatics pipeline that generates protein families from amino acid sequences and/or updates existing families with new sequences. +It takes a protein fasta file as input, clusters the sequences and then generates protein family Hiden Markov Models (HMMs) along with their multiple sequence alignments (MSAs). +Optionally, paths to existing family HMMs and MSAs can be given (must have matching base filenames one-to-one) in order to update with new sequences in case of matching hits. ## Samplesheet input From 921cf061085051d83c03fd85a0a3b73b18634c3d Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:59:52 +0000 Subject: [PATCH 124/139] Update docs/output.md Co-authored-by: James A. Fellows Yates --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 73d4a89..6474dcc 100644 --- a/docs/output.md +++ b/docs/output.md @@ -393,7 +393,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Custom output MultiQC data includes a metadata file (multiqc_data/multiqc_family_metadata.txt) with family information such as: Sample,Family Id,Size,Representative Length,Representative Id,Sequence -This custom metadata is presented as a data table on the web page. +This custom metadata is presented as a data table in the MultiQC report file. ### Pipeline information From 0ab063f4cc25c0393aef7b51711bae7be703f27b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 13:30:35 +0000 Subject: [PATCH 125/139] ch_ notation instead of set {}, .map changed to multiline everywhere, optional directory parameters added to output.md --- docs/output.md | 10 ++++----- nextflow.config | 1 + subworkflows/local/generate_families.nf | 9 +++----- subworkflows/local/remove_redundancy.nf | 15 +++++-------- subworkflows/local/update_families.nf | 22 +++++++------------ .../main.nf | 3 +-- workflows/proteinfamilies.nf | 15 +++++++------ 7 files changed, 31 insertions(+), 44 deletions(-) diff --git a/docs/output.md b/docs/output.md index 6474dcc..92e594e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -58,13 +58,13 @@ Reporting: - `.tsv`: tab-separated table containing 2 columns; the first one with the cluster representative sequences, and the second with the cluster members - `mmseqs_createdb/` - `/` - - `*`: (optional) mmseqs format db of fasta sequences + - `*`: (optional) mmseqs format db of fasta sequences. Can be turned on with --save_mmseqs_db - `mmseqs_linclust/` - `/` - - `*`: (optional) mmseqs format clustered db + - `*`: (optional) mmseqs format clustered db. Can be turned on with --save_mmseqs_clustering - `mmseqs_cluster/` - `/` - - `*`: (optional) mmseqs format clustered db + - `*`: (optional) mmseqs format clustered db. Can be turned on with --save_mmseqs_clustering - `filtered_fasta_chunks/` - `/` - `chunked_fasta/` @@ -131,8 +131,8 @@ Reporting: - `_*.hmmbuild.txt`: (optional) hmmbuild execution log - `hmmsearch/` - `/` - - `_*.domtbl.gz`: (optional) hmmsearch results along parameters info - - `_*.txt.gz`: (optional) hmmsearch execution log + - `_*.domtbl.gz`: (optional) hmmsearch results along parameters info. Can be turned on with --save_hmmsearch_results + - `_*.txt.gz`: (optional) hmmsearch execution log. Can be turned on with --save_hmmsearch_results - `full_msa/` - `pre_non_redundant/` - `/` diff --git a/nextflow.config b/nextflow.config index acc3965..70c1705 100644 --- a/nextflow.config +++ b/nextflow.config @@ -193,6 +193,7 @@ profiles { includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" // Load nf-core/proteinfamilies custom profiles from different institutions. includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/proteinfamilies.config" : "/dev/null" + // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families.nf index a943ffd..f8f6273 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families.nf @@ -21,12 +21,11 @@ workflow GENERATE_FAMILIES { ch_fasta = Channel.empty() ch_hmm = Channel.empty() - fasta_chunks + ch_fasta = fasta_chunks .transpose() .map { meta, file_path -> [ [id: meta.id, chunk: file(file_path, checkIfExists: true).baseName], file_path ] } - .set { ch_fasta } ALIGN_SEQUENCES( ch_fasta ) ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) @@ -49,22 +48,20 @@ workflow GENERATE_FAMILIES { ch_hmm = HMMER_HMMBUILD.out.hmm // Combine with same id to ensure in sync - ch_hmm + ch_input_for_hmmsearch = ch_hmm .map { meta, hmm -> [ [id: meta.id], meta, hmm ] } .combine(sequences, by: 0) .map { id, meta, hmm, seqs -> [ meta, hmm, seqs, false, params.hmmsearch_write_target, params.hmmsearch_write_domain ] } - .set { ch_input_for_hmmsearch } if (params.recruit_sequences_with_models) { HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) // Combine with same id to ensure in sync - HMMER_HMMSEARCH.out.domain_summary + ch_input_for_filter_recruited = HMMER_HMMSEARCH.out.domain_summary .map { meta, domtbl -> [ [id: meta.id], meta, domtbl ] } .combine(sequences, by: 0) .map { id, meta, domtbl, seqs -> [ meta, domtbl, seqs ] } - .set { ch_input_for_filter_recruited } FILTER_RECRUITED( ch_input_for_filter_recruited, params.hmmsearch_query_length_threshold ) ch_versions = ch_versions.mix( FILTER_RECRUITED.out.versions ) diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy.nf index e59b189..dbe8a07 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy.nf @@ -21,32 +21,28 @@ workflow REMOVE_REDUNDANCY { ch_versions = Channel.empty() if (params.remove_family_redundancy) { - msa + ch_msa = msa .map { meta, aln -> [[id: meta.id], aln] } .groupTuple(by: 0) - .set { ch_msa } EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) - hmm + ch_hmm = hmm .map { meta, model -> [[id: meta.id], model] } .groupTuple(by: 0) - .set { ch_hmm } CAT_CAT( ch_hmm ) ch_versions = ch_versions.mix( CAT_CAT.out.versions ) - CAT_CAT.out.file_out + ch_input_for_hmmsearch = CAT_CAT.out.file_out .combine(EXTRACT_FAMILY_REPS.out.fasta, by: 0) .map { meta, model, seqs -> [meta, model, seqs, false, false, true] } - .set { ch_input_for_hmmsearch } HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) - fasta + fasta = fasta .map { meta, fas -> [[id: meta.id], fas] } .groupTuple(by: 0) - .set { fasta } // Join to ensure in sync ch_input_for_fam_removal = EXTRACT_FAMILY_REPS.out.map @@ -72,12 +68,11 @@ workflow REMOVE_REDUNDANCY { FILTER_NON_REDUNDANT_HMMS( ch_input_for_hmm_filtering.seqs, ch_input_for_hmm_filtering.models ) ch_versions = ch_versions.mix( FILTER_NON_REDUNDANT_HMMS.out.versions ) - fasta + fasta = fasta .transpose() .map { meta, file -> [[id: meta.id, chunk: file.getSimpleName().split('_')[-1]], file] } - .set { fasta } } if (params.remove_sequence_redundancy) { diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families.nf index 14a51cf..d7893d9 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families.nf @@ -23,12 +23,11 @@ workflow UPDATE_FAMILIES { ch_updated_family_reps = Channel.empty() ch_no_hit_seqs = Channel.empty() - ch_samplesheet_for_update + ch_input_for_untar = ch_samplesheet_for_update .multiMap { meta, _fasta, existing_hmms_to_update, existing_msas_to_update -> hmm: [ meta, existing_hmms_to_update ] msa: [ meta, existing_msas_to_update ] } - .set { ch_input_for_untar } UNTAR_HMM( ch_input_for_untar.hmm ) ch_versions = ch_versions.mix( UNTAR_HMM.out.versions ) @@ -51,10 +50,9 @@ workflow UPDATE_FAMILIES { ch_versions = ch_versions.mix( CAT_HMM.out.versions ) // Prep the sequences to search against the HMM concatenated model of families - CAT_HMM.out.file_out + ch_input_for_hmmsearch = CAT_HMM.out.file_out .combine(ch_samplesheet_for_update, by: 0) .map { meta, concatenated_hmm, fasta, _existing_hmms_to_update, _existing_msas_to_update -> [meta, concatenated_hmm, fasta, false, false, true] } - .set { ch_input_for_hmmsearch } HMMER_HMMSEARCH( ch_input_for_hmmsearch ) ch_versions = ch_versions.mix( HMMER_HMMSEARCH.out.versions ) @@ -71,14 +69,13 @@ workflow UPDATE_FAMILIES { ch_versions = ch_versions.mix( BRANCH_HITS_FASTA.out.versions ) ch_no_hit_seqs = BRANCH_HITS_FASTA.out.non_hit_fasta - BRANCH_HITS_FASTA.out.hits + ch_hits_fasta = BRANCH_HITS_FASTA.out.hits .transpose() .map { meta, file -> [[id: meta.id, family: file.getSimpleName()], file] } - .set { hits_fasta } - UNTAR_MSA.out.untar + ch_family_msas = UNTAR_MSA.out.untar .map { meta, folder -> [meta, file("$folder/*", checkIfExists: true)] } @@ -86,19 +83,17 @@ workflow UPDATE_FAMILIES { .map { meta, file -> [[id: meta.id, family: file.getSimpleName()], file] } - .set { family_msas } // Keep fasta with family sequences by removing gaps - SEQKIT_SEQ( family_msas ) + SEQKIT_SEQ( ch_family_msas ) ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) // Match newly recruited sequences with existing ones for each family - SEQKIT_SEQ.out.fastx - .combine(hits_fasta, by: 0) + ch_input_for_cat = SEQKIT_SEQ.out.fastx + .combine(ch_hits_fasta, by: 0) .map { meta, family_fasta, new_fasta -> [meta, [family_fasta, new_fasta]] } - .set { ch_input_for_cat } // Aggregate each family's MSA sequences with the newly recruited ones CAT_FASTA( ch_input_for_cat ) @@ -134,10 +129,9 @@ workflow UPDATE_FAMILIES { HMMER_HMMBUILD( ch_msa, [] ) ch_versions = ch_versions.mix( HMMER_HMMBUILD.out.versions ) - ch_msa + ch_msa = ch_msa .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_msa } EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) ch_updated_family_reps = ch_updated_family_reps.mix( EXTRACT_FAMILY_REPS.out.map ) diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 35ad4c1..79f0c57 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -67,9 +67,8 @@ workflow PIPELINE_INITIALISATION { // Create channel from input file provided through params.input // - Channel + ch_samplesheet = Channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) - .set { ch_samplesheet } emit: samplesheet = ch_samplesheet diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index 5ac94df..ed315f0 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -48,12 +48,11 @@ workflow PROTEINFAMILIES { ch_samplesheet_for_create = Channel.empty() ch_samplesheet_for_update = Channel.empty() - ch_samplesheet + ch_branch_result = ch_samplesheet .branch { _meta, _fasta, existing_hmms_to_update, existing_msas_to_update -> to_create: !existing_hmms_to_update?.size() && !existing_msas_to_update?.size() to_update: existing_hmms_to_update?.size() && existing_msas_to_update?.size() } - .set { branch_result } /************************************/ /* Splitting the samplesheet into 2 */ @@ -63,11 +62,14 @@ workflow PROTEINFAMILIES { /* families (existing HMM models */ /* and MSAs) */ /************************************/ - ch_samplesheet_for_create = branch_result.to_create.map { meta, fasta, _existing_hmms, _existing_msas -> [meta, fasta] } - ch_samplesheet_for_update = branch_result.to_update + ch_samplesheet_for_create = ch_branch_result.to_create + .map { meta, fasta, _existing_hmms, _existing_msas -> + [meta, fasta] + } + ch_samplesheet_for_update = ch_branch_result.to_update // Updating existing families - if (branch_result.to_update) { + if (ch_branch_result.to_update) { UPDATE_FAMILIES( ch_samplesheet_for_update ) ch_versions = ch_versions.mix( UPDATE_FAMILIES.out.versions ) @@ -92,10 +94,9 @@ workflow PROTEINFAMILIES { ch_versions = ch_versions.mix( REMOVE_REDUNDANCY.out.versions ) // Post-processing - REMOVE_REDUNDANCY.out.msa + ch_msa = REMOVE_REDUNDANCY.out.msa .map { meta, aln -> [ [id: meta.id], aln ] } .groupTuple(by: 0) - .set { ch_msa } EXTRACT_FAMILY_REPS( ch_msa ) ch_versions = ch_versions.mix( EXTRACT_FAMILY_REPS.out.versions ) From 9be00f7374ca7ffa29a5392dd69593d8eff24c5b Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 13:33:36 +0000 Subject: [PATCH 126/139] assets/samplesheet.csv added back --- assets/samplesheet.csv | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 assets/samplesheet.csv diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv new file mode 100644 index 0000000..925bedb --- /dev/null +++ b/assets/samplesheet.csv @@ -0,0 +1,2 @@ +sample,fasta,existing_hmms_to_update,existing_msas_to_update +mgnifams_test,https://github.com/nf-core/test-datasets/raw/proteinfamilies/test_data/mgnifams_input_small.fa,, From e39a34902a7ec4d9a95ba830f1b7b897e2581355 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 13:59:00 +0000 Subject: [PATCH 127/139] modules and subworkflows moved to respective folders + env --- .../local/branch_hits_fasta/environment.yml | 5 ++++ .../main.nf} | 4 +-- modules/local/chunk_clusters/environment.yml | 5 ++++ .../main.nf} | 4 +-- modules/local/clip_ends/environment.yml | 5 ++++ .../local/{clip_ends.nf => clip_ends/main.nf} | 4 +-- .../local/extract_family_reps/environment.yml | 5 ++++ .../main.nf} | 4 +-- .../filter_non_redundant_hmms/environment.yml | 5 ++++ .../main.nf} | 2 +- .../local/filter_recruited/environment.yml | 5 ++++ .../main.nf} | 4 +-- .../remove_redundant_fams/environment.yml | 5 ++++ .../main.nf} | 4 +-- .../remove_redundant_seqs/environment.yml | 5 ++++ .../main.nf} | 4 +-- .../main.nf} | 4 +-- .../main.nf} | 8 ++--- .../main.nf} | 14 ++++----- .../main.nf} | 16 +++++----- .../main.nf} | 30 +++++++++---------- workflows/proteinfamilies.nf | 4 +-- 22 files changed, 93 insertions(+), 53 deletions(-) create mode 100644 modules/local/branch_hits_fasta/environment.yml rename modules/local/{branch_hits_fasta.nf => branch_hits_fasta/main.nf} (88%) create mode 100644 modules/local/chunk_clusters/environment.yml rename modules/local/{chunk_clusters.nf => chunk_clusters/main.nf} (89%) create mode 100644 modules/local/clip_ends/environment.yml rename modules/local/{clip_ends.nf => clip_ends/main.nf} (86%) create mode 100644 modules/local/extract_family_reps/environment.yml rename modules/local/{extract_family_reps.nf => extract_family_reps/main.nf} (87%) create mode 100644 modules/local/filter_non_redundant_hmms/environment.yml rename modules/local/{filter_non_redundant_hmms.nf => filter_non_redundant_hmms/main.nf} (96%) create mode 100644 modules/local/filter_recruited/environment.yml rename modules/local/{filter_recruited.nf => filter_recruited/main.nf} (87%) create mode 100644 modules/local/remove_redundant_fams/environment.yml rename modules/local/{remove_redundant_fams.nf => remove_redundant_fams/main.nf} (87%) create mode 100644 modules/local/remove_redundant_seqs/environment.yml rename modules/local/{remove_redundant_seqs.nf => remove_redundant_seqs/main.nf} (88%) rename subworkflows/local/{align_sequences.nf => align_sequences/main.nf} (83%) rename subworkflows/local/{execute_clustering.nf => execute_clustering/main.nf} (82%) rename subworkflows/local/{generate_families.nf => generate_families/main.nf} (83%) rename subworkflows/local/{remove_redundancy.nf => remove_redundancy/main.nf} (80%) rename subworkflows/local/{update_families.nf => update_families/main.nf} (79%) diff --git a/modules/local/branch_hits_fasta/environment.yml b/modules/local/branch_hits_fasta/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/branch_hits_fasta/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/branch_hits_fasta.nf b/modules/local/branch_hits_fasta/main.nf similarity index 88% rename from modules/local/branch_hits_fasta.nf rename to modules/local/branch_hits_fasta/main.nf index 0bc14a2..5f91985 100644 --- a/modules/local/branch_hits_fasta.nf +++ b/modules/local/branch_hits_fasta/main.nf @@ -2,7 +2,7 @@ process BRANCH_HITS_FASTA { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -33,7 +33,7 @@ process BRANCH_HITS_FASTA { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/modules/local/chunk_clusters/environment.yml b/modules/local/chunk_clusters/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/chunk_clusters/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/chunk_clusters.nf b/modules/local/chunk_clusters/main.nf similarity index 89% rename from modules/local/chunk_clusters.nf rename to modules/local/chunk_clusters/main.nf index 6b30d33..14b6e54 100644 --- a/modules/local/chunk_clusters.nf +++ b/modules/local/chunk_clusters/main.nf @@ -2,7 +2,7 @@ process CHUNK_CLUSTERS { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -36,7 +36,7 @@ process CHUNK_CLUSTERS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/modules/local/clip_ends/environment.yml b/modules/local/clip_ends/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/clip_ends/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/clip_ends.nf b/modules/local/clip_ends/main.nf similarity index 86% rename from modules/local/clip_ends.nf rename to modules/local/clip_ends/main.nf index 4ccb60c..082cb9e 100644 --- a/modules/local/clip_ends.nf +++ b/modules/local/clip_ends/main.nf @@ -2,7 +2,7 @@ process CLIP_ENDS { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -29,7 +29,7 @@ process CLIP_ENDS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/modules/local/extract_family_reps/environment.yml b/modules/local/extract_family_reps/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/extract_family_reps/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/extract_family_reps.nf b/modules/local/extract_family_reps/main.nf similarity index 87% rename from modules/local/extract_family_reps.nf rename to modules/local/extract_family_reps/main.nf index b4f5985..e4eb233 100644 --- a/modules/local/extract_family_reps.nf +++ b/modules/local/extract_family_reps/main.nf @@ -2,7 +2,7 @@ process EXTRACT_FAMILY_REPS { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -28,7 +28,7 @@ process EXTRACT_FAMILY_REPS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/modules/local/filter_non_redundant_hmms/environment.yml b/modules/local/filter_non_redundant_hmms/environment.yml new file mode 100644 index 0000000..7ecb6f2 --- /dev/null +++ b/modules/local/filter_non_redundant_hmms/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::python=3.13.1 diff --git a/modules/local/filter_non_redundant_hmms.nf b/modules/local/filter_non_redundant_hmms/main.nf similarity index 96% rename from modules/local/filter_non_redundant_hmms.nf rename to modules/local/filter_non_redundant_hmms/main.nf index d4d369d..072fc16 100644 --- a/modules/local/filter_non_redundant_hmms.nf +++ b/modules/local/filter_non_redundant_hmms/main.nf @@ -2,7 +2,7 @@ process FILTER_NON_REDUNDANT_HMMS { tag "$meta.id" label 'process_single' - conda "conda-forge::python=3.13.1" + 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/31/313e1c18a344323886cf97a151ab66d81c1a146fb129558cb9382b69a72d5532/data' : 'community.wave.seqera.io/library/python:b1b4b1f458c605bb' }" diff --git a/modules/local/filter_recruited/environment.yml b/modules/local/filter_recruited/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/filter_recruited/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/filter_recruited.nf b/modules/local/filter_recruited/main.nf similarity index 87% rename from modules/local/filter_recruited.nf rename to modules/local/filter_recruited/main.nf index 6b1a2aa..92e1384 100644 --- a/modules/local/filter_recruited.nf +++ b/modules/local/filter_recruited/main.nf @@ -2,7 +2,7 @@ process FILTER_RECRUITED { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -30,7 +30,7 @@ process FILTER_RECRUITED { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/modules/local/remove_redundant_fams/environment.yml b/modules/local/remove_redundant_fams/environment.yml new file mode 100644 index 0000000..07d55ab --- /dev/null +++ b/modules/local/remove_redundant_fams/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::pandas=1.4.3 diff --git a/modules/local/remove_redundant_fams.nf b/modules/local/remove_redundant_fams/main.nf similarity index 87% rename from modules/local/remove_redundant_fams.nf rename to modules/local/remove_redundant_fams/main.nf index ae3d041..2e160fb 100644 --- a/modules/local/remove_redundant_fams.nf +++ b/modules/local/remove_redundant_fams/main.nf @@ -2,7 +2,7 @@ process REMOVE_REDUNDANT_FAMS { tag "$meta.id" label 'process_single' - conda "conda-forge::pandas=1.4.3" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pandas:1.4.3' : 'biocontainers/pandas:1.4.3' }" @@ -32,7 +32,7 @@ process REMOVE_REDUNDANT_FAMS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - pandas: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('pandas').version)") + pandas: \$(python -c "import importlib.metadata; print(importlib.metadata.version('pandas'))") END_VERSIONS """ } diff --git a/modules/local/remove_redundant_seqs/environment.yml b/modules/local/remove_redundant_seqs/environment.yml new file mode 100644 index 0000000..7ef7d0b --- /dev/null +++ b/modules/local/remove_redundant_seqs/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::biopython=1.84 diff --git a/modules/local/remove_redundant_seqs.nf b/modules/local/remove_redundant_seqs/main.nf similarity index 88% rename from modules/local/remove_redundant_seqs.nf rename to modules/local/remove_redundant_seqs/main.nf index 6e853d5..3e758e8 100644 --- a/modules/local/remove_redundant_seqs.nf +++ b/modules/local/remove_redundant_seqs/main.nf @@ -2,7 +2,7 @@ process REMOVE_REDUNDANT_SEQS { tag "$meta.id" label 'process_single' - conda "conda-forge::biopython=1.84" + 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/eb/eb3700531c7ec639f59f084ab64c05e881d654dcf829db163539f2f0b095e09d/data' : 'community.wave.seqera.io/library/biopython:1.84--3318633dad0031e7' }" @@ -34,7 +34,7 @@ process REMOVE_REDUNDANT_SEQS { cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version 2>&1 | sed 's/Python //g') - biopython: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('biopython').version)") + biopython: \$(python -c "import importlib.metadata; print(importlib.metadata.version('biopython'))") END_VERSIONS """ } diff --git a/subworkflows/local/align_sequences.nf b/subworkflows/local/align_sequences/main.nf similarity index 83% rename from subworkflows/local/align_sequences.nf rename to subworkflows/local/align_sequences/main.nf index b75efdf..2239b33 100644 --- a/subworkflows/local/align_sequences.nf +++ b/subworkflows/local/align_sequences/main.nf @@ -2,8 +2,8 @@ MULTIPLE SEQUENCE ALIGNMENT */ -include { FAMSA_ALIGN } from '../../modules/nf-core/famsa/align/main' -include { MAFFT_ALIGN } from '../../modules/nf-core/mafft/align/main' +include { FAMSA_ALIGN } from '../../../modules/nf-core/famsa/align/main' +include { MAFFT_ALIGN } from '../../../modules/nf-core/mafft/align/main' workflow ALIGN_SEQUENCES { take: diff --git a/subworkflows/local/execute_clustering.nf b/subworkflows/local/execute_clustering/main.nf similarity index 82% rename from subworkflows/local/execute_clustering.nf rename to subworkflows/local/execute_clustering/main.nf index 7193ede..5626c02 100644 --- a/subworkflows/local/execute_clustering.nf +++ b/subworkflows/local/execute_clustering/main.nf @@ -2,10 +2,10 @@ SEQUENCE CLUSTERING */ -include { MMSEQS_CREATEDB } from '../../modules/nf-core/mmseqs/createdb/main' -include { MMSEQS_CLUSTER } from '../../modules/nf-core/mmseqs/cluster/main' -include { MMSEQS_LINCLUST } from '../../modules/nf-core/mmseqs/linclust/main' -include { MMSEQS_CREATETSV } from '../../modules/nf-core/mmseqs/createtsv/main' +include { MMSEQS_CREATEDB } from '../../../modules/nf-core/mmseqs/createdb/main' +include { MMSEQS_CLUSTER } from '../../../modules/nf-core/mmseqs/cluster/main' +include { MMSEQS_LINCLUST } from '../../../modules/nf-core/mmseqs/linclust/main' +include { MMSEQS_CREATETSV } from '../../../modules/nf-core/mmseqs/createtsv/main' workflow EXECUTE_CLUSTERING { take: diff --git a/subworkflows/local/generate_families.nf b/subworkflows/local/generate_families/main.nf similarity index 83% rename from subworkflows/local/generate_families.nf rename to subworkflows/local/generate_families/main.nf index f8f6273..9d235c2 100644 --- a/subworkflows/local/generate_families.nf +++ b/subworkflows/local/generate_families/main.nf @@ -2,13 +2,13 @@ FAMILY MODEL GENERATION */ -include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' -include { CLIPKIT } from '../../modules/nf-core/clipkit/main' -include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' -include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { FILTER_RECRUITED } from '../../modules/local/filter_recruited.nf' -include { HMMER_HMMALIGN } from '../../modules/nf-core/hmmer/hmmalign/main' +include { ALIGN_SEQUENCES } from '../../../subworkflows/local/align_sequences' +include { CLIPKIT } from '../../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../../modules/local/clip_ends/main' +include { HMMER_HMMBUILD } from '../../../modules/nf-core/hmmer/hmmbuild/main' +include { HMMER_HMMSEARCH } from '../../../modules/nf-core/hmmer/hmmsearch/main' +include { FILTER_RECRUITED } from '../../../modules/local/filter_recruited/main' +include { HMMER_HMMALIGN } from '../../../modules/nf-core/hmmer/hmmalign/main' workflow GENERATE_FAMILIES { take: diff --git a/subworkflows/local/remove_redundancy.nf b/subworkflows/local/remove_redundancy/main.nf similarity index 80% rename from subworkflows/local/remove_redundancy.nf rename to subworkflows/local/remove_redundancy/main.nf index dbe8a07..0df5582 100644 --- a/subworkflows/local/remove_redundancy.nf +++ b/subworkflows/local/remove_redundancy/main.nf @@ -2,14 +2,14 @@ REMOVAL OF REDUNDANT SEQUENCES AND FAMILIES */ -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' -include { CAT_CAT } from '../../modules/nf-core/cat/cat' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { REMOVE_REDUNDANT_FAMS } from '../../modules/local/remove_redundant_fams.nf' -include { FILTER_NON_REDUNDANT_HMMS } from '../../modules/local/filter_non_redundant_hmms.nf' -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' -include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' -include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' +include { EXTRACT_FAMILY_REPS } from '../../../modules/local/extract_family_reps/main' +include { CAT_CAT } from '../../../modules/nf-core/cat/cat' +include { HMMER_HMMSEARCH } from '../../../modules/nf-core/hmmer/hmmsearch/main' +include { REMOVE_REDUNDANT_FAMS } from '../../../modules/local/remove_redundant_fams/main' +include { FILTER_NON_REDUNDANT_HMMS } from '../../../modules/local/filter_non_redundant_hmms/main' +include { EXECUTE_CLUSTERING } from '../../../subworkflows/local/execute_clustering' +include { REMOVE_REDUNDANT_SEQS } from '../../../modules/local/remove_redundant_seqs/main' +include { ALIGN_SEQUENCES } from '../../../subworkflows/local/align_sequences' workflow REMOVE_REDUNDANCY { take: diff --git a/subworkflows/local/update_families.nf b/subworkflows/local/update_families/main.nf similarity index 79% rename from subworkflows/local/update_families.nf rename to subworkflows/local/update_families/main.nf index d7893d9..279ff2f 100644 --- a/subworkflows/local/update_families.nf +++ b/subworkflows/local/update_families/main.nf @@ -1,18 +1,18 @@ -include { UNTAR as UNTAR_HMM } from '../../modules/nf-core/untar/main' -include { UNTAR as UNTAR_MSA } from '../../modules/nf-core/untar/main' -include { validateMatchingFolders } from '../../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' -include { CAT_CAT as CAT_HMM } from '../../modules/nf-core/cat/cat/main' -include { HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' -include { BRANCH_HITS_FASTA } from '../../modules/local/branch_hits_fasta' -include { SEQKIT_SEQ } from '../../modules/nf-core/seqkit/seq/main' -include { CAT_CAT as CAT_FASTA } from '../../modules/nf-core/cat/cat/main' -include { EXECUTE_CLUSTERING } from '../../subworkflows/local/execute_clustering' -include { REMOVE_REDUNDANT_SEQS } from '../../modules/local/remove_redundant_seqs.nf' -include { ALIGN_SEQUENCES } from '../../subworkflows/local/align_sequences' -include { CLIPKIT } from '../../modules/nf-core/clipkit/main' -include { CLIP_ENDS } from '../../modules/local/clip_ends.nf' -include { HMMER_HMMBUILD } from '../../modules/nf-core/hmmer/hmmbuild/main' -include { EXTRACT_FAMILY_REPS } from '../../modules/local/extract_family_reps.nf' +include { UNTAR as UNTAR_HMM } from '../../../modules/nf-core/untar/main' +include { UNTAR as UNTAR_MSA } from '../../../modules/nf-core/untar/main' +include { validateMatchingFolders } from '../../../subworkflows/local/utils_nfcore_proteinfamilies_pipeline' +include { CAT_CAT as CAT_HMM } from '../../../modules/nf-core/cat/cat/main' +include { HMMER_HMMSEARCH } from '../../../modules/nf-core/hmmer/hmmsearch/main' +include { BRANCH_HITS_FASTA } from '../../../modules/local/branch_hits_fasta' +include { SEQKIT_SEQ } from '../../../modules/nf-core/seqkit/seq/main' +include { CAT_CAT as CAT_FASTA } from '../../../modules/nf-core/cat/cat/main' +include { EXECUTE_CLUSTERING } from '../../../subworkflows/local/execute_clustering' +include { REMOVE_REDUNDANT_SEQS } from '../../../modules/local/remove_redundant_seqs/main' +include { ALIGN_SEQUENCES } from '../../../subworkflows/local/align_sequences' +include { CLIPKIT } from '../../../modules/nf-core/clipkit/main' +include { CLIP_ENDS } from '../../../modules/local/clip_ends/main' +include { HMMER_HMMBUILD } from '../../../modules/nf-core/hmmer/hmmbuild/main' +include { EXTRACT_FAMILY_REPS } from '../../../modules/local/extract_family_reps/main' workflow UPDATE_FAMILIES { take: diff --git a/workflows/proteinfamilies.nf b/workflows/proteinfamilies.nf index ed315f0..18ddcff 100644 --- a/workflows/proteinfamilies.nf +++ b/workflows/proteinfamilies.nf @@ -26,8 +26,8 @@ include { REMOVE_REDUNDANCY } from '../subworkflows/local/remove_redundancy' // // MODULE: Local to the pipeline // -include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters.nf' -include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps.nf' +include { CHUNK_CLUSTERS } from '../modules/local/chunk_clusters/main' +include { EXTRACT_FAMILY_REPS } from '../modules/local/extract_family_reps/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From f64c7696378f3ce283c9e4657fe4d7189f8f7c36 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 14:02:44 +0000 Subject: [PATCH 128/139] prefix instead of meta.id for output naming in two of the local modules --- modules/local/extract_family_reps/main.nf | 5 +++-- modules/local/remove_redundant_seqs/main.nf | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/local/extract_family_reps/main.nf b/modules/local/extract_family_reps/main.nf index e4eb233..3cdeb09 100644 --- a/modules/local/extract_family_reps/main.nf +++ b/modules/local/extract_family_reps/main.nf @@ -19,11 +19,12 @@ process EXTRACT_FAMILY_REPS { task.ext.when == null || task.ext.when script: + def prefix = task.ext.prefix ?: "${meta.id}" """ extract_family_reps.py \\ --full_msa_folder aln \\ - --metadata ${meta.id}_meta_mqc.csv \\ - --out_fasta ${meta.id}_reps.fa + --metadata ${prefix}_meta_mqc.csv \\ + --out_fasta ${prefix}_reps.fa cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/remove_redundant_seqs/main.nf b/modules/local/remove_redundant_seqs/main.nf index 3e758e8..18ac7d8 100644 --- a/modules/local/remove_redundant_seqs/main.nf +++ b/modules/local/remove_redundant_seqs/main.nf @@ -21,6 +21,7 @@ process REMOVE_REDUNDANT_SEQS { script: def is_compressed = sequences.getName().endsWith(".gz") ? true : false def fasta_name = sequences.name.replace(".gz", "") + def prefix = task.ext.prefix ?: "${meta.id}" """ if [ "$is_compressed" == "true" ]; then gzip -c -d $sequences > $fasta_name @@ -29,7 +30,7 @@ process REMOVE_REDUNDANT_SEQS { remove_redundant_seqs.py \\ --clustering ${clustering} \\ --sequences ${fasta_name} \\ - --out_fasta ${meta.id}_reps.fa + --out_fasta ${prefix}_reps.fa cat <<-END_VERSIONS > versions.yml "${task.process}": From d6e2e3e6e8ee80d9be5b1fd206f7d5c4a4e11625 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 14:04:19 +0000 Subject: [PATCH 129/139] only main author mail kept --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 70c1705..6433a69 100644 --- a/nextflow.config +++ b/nextflow.config @@ -261,7 +261,6 @@ manifest { [ name: 'Martin Beracochea', affiliation: 'EMBL-EBI', - email: 'mbc@ebi.ac.uk', github: 'https://github.com/mberacochea', contribution: ['contributor'], // List of contribution types ('author', 'maintainer' or 'contributor') orcid: '0000-0003-3472-3736' From 86cdb61129fa7f2bcab13ef294af206e90c60a7c Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 14:06:57 +0000 Subject: [PATCH 130/139] removed duplicate includeConfig 'conf/modules.config' --- nextflow.config | 3 --- 1 file changed, 3 deletions(-) diff --git a/nextflow.config b/nextflow.config index 6433a69..f034b3e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -275,9 +275,6 @@ manifest { doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' - // Nextflow plugins plugins { id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet From 99de435ef8ad91d62bfc446c86ea5bc7987c0351 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 15:15:40 +0000 Subject: [PATCH 131/139] interpretation of folder outputs in output.md, strict clustering thresholds changed to 0.97 --- conf/test_minimal.config | 2 +- docs/output.md | 72 ++++++++++++++++++++ nextflow.config | 6 +- nextflow_schema.json | 10 +-- subworkflows/local/generate_families/main.nf | 2 +- subworkflows/local/update_families/main.nf | 2 +- 6 files changed, 83 insertions(+), 11 deletions(-) diff --git a/conf/test_minimal.config b/conf/test_minimal.config index 129420e..268ca85 100644 --- a/conf/test_minimal.config +++ b/conf/test_minimal.config @@ -27,7 +27,7 @@ params { // Clustering cluster_size_threshold = 5 // Alignment - trim_seed_msa = false + trim_msa = false recruit_sequences_with_models = false // Redundancy remove_family_redundancy = false diff --git a/docs/output.md b/docs/output.md index 92e594e..0c037eb 100644 --- a/docs/output.md +++ b/docs/output.md @@ -72,6 +72,11 @@ Reporting: +The `mmseqs_createtsv/.tsv` contains the mmseqs clustering of sequences, which will then be filtered by size and split into chunks for further parallel processing. +The optionally saved `chunked_fasta` folder contains these fasta files of sequences for each cluster. +These per cluster fasta files act as input to produce downstream families in the next steps of the pipeline. +The original mmseqs db and the clustered mmseqs db can be optional saved to the output folder, but they won't be further utilised in this pipeline. + [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. ### FAMSA aligner @@ -86,6 +91,9 @@ Reporting: +This folder contains the generated seed MSA family files, if `famsa` was chosen as the `--alignment_tool`. +These MSA files only contain the original sequences of each cluster as calculated by mmseqs. + [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. ### mafft aligner @@ -100,6 +108,9 @@ Reporting: +This folder contains the generated seed MSA family files, if `mafft` was chosen as the `--alignment_tool`. +These MSA files only contain the original sequences of each cluster as calculated by mmseqs. + [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. ### ClipKIT @@ -117,6 +128,11 @@ Reporting: +If the `--trim_msa` parameter was set to `true`, then depending on the `--clipping_tool`, and according to the `--gap_threshold` either +`clipkit` is run and gaps (above threshold) are removed throughout the alignment, +or `clip_ends` is run and gaps (above threshold) are removed only at the ends. +Results are stored in the `seed_msa` folder. + [ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. ### hmmer @@ -140,6 +156,11 @@ Reporting: +The `hmmer/hmmbuild` folder contains all originally created family HMMs. These models will be used downstream used to 'fish' extra sequences +in each family if `--recruit_sequences_with_models` is set to true, and/or to remove between-families redundancy if `--remove_family_redundancy` is set to true. +The models can also be used in the `update_families` execution mode of the pipeline, +along with the families' respective MSAs, to recruit sequences from a new input fasta file into the families, updating both family HMM and MSA files. + [hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. ### hmmer for redundancy removal @@ -165,6 +186,11 @@ Reporting: +If `--remove_family_redundancy` is set to true, the `hmmer/hmmsearch` module is used +to identify family representative sequences that are highly identical to other family HMMs. +In these cases, the smaller sized families are deemed redundant and flagged for removal. +These `remove_redundancy` optional folders only contain intermediate pipeline results that by default are not saved in the output results. + [hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. ### MMseqs2 for redundancy removal @@ -192,6 +218,11 @@ Reporting: +If `--remove_sequence_redundancy` is set to true, the mmseqs clustering subworkflow will be executed +to very strictly cluster (`--cluster_seq_identity_for_redundancy` = 0.97, `cluster_coverage_for_redundancy` = 0.97, +`cluster_cov_mode_for_redundancy` = 0 -meaning both strands) in-family sequences, keeping only cluster representatives +before recalculating the family MSAs. + [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. ### FAMSA for redundancy removal @@ -207,6 +238,9 @@ Reporting: +If `--remove_sequence_redundancy` is set to true, then the MSAs will be recalculated after in-family sequence redundancy is removed. +If the `--alignment_tool` is `famsa`, then this `famsa_align` folder will be created, containing the final MSA files. + [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. ### mafft for redundancy removal @@ -222,6 +256,9 @@ Reporting: +If `--remove_sequence_redundancy` is set to true, then the MSAs will be recalculated after in-family sequence redundancy is removed. +If the `--alignment_tool` is `mafft`, then this `mafft_align` folder will be created, containing the final MSA files. + [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. ### untar @@ -266,6 +303,11 @@ Reporting: +The `update_families` execution mode is run if paths to `existing_hmms_to_update` and `existing_msas_to_update` are provided in the input samplesheet.csv. +The `hmmer/hmmsearch` module is used to match new incoming sequences in the existing family models. +If there were hits, the new sequences are reclustered along their matching family existing ones, and new models are build with `hmmer/hmmbuild` +in the `update_families/hmmer/hmmbuild` folder, from the respective new MSAs. + [hmmer](https://github.com/EddyRivasLab/hmmer) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. ### SeqKit @@ -281,6 +323,11 @@ Reporting: +The seqkit module is mainly used during the `update_families` mode +to extract sequences from family MSA, into intermediate fasta files (`seqkit` output folder). +The intermediate `update_families/fasta` folder contains the aggregation of existing family sequences along with their newly matching ones, +that will together produce the updated family MSA. + [SeqKit](https://github.com/shenwei356/seqkit) is a cross-platform and ultrafast toolkit for FASTA/Q file manipulation. ### MMseqs2 for updating families @@ -307,6 +354,10 @@ Reporting: +Similarly to the in-family sequence redundancy removal mechanism, the mmseqs suite is used to strictly cluster +existing family sequences along newly recruited ones, keeping a non redundant set. +The new family representative sequences can now be found in the intermediate `mmseqs/reps_fasta` folder. + [MMseqs2](https://github.com/soedinglab/MMseqs2) clusters amino acid fasta files via either the 'cluster' or the 'linclust' algorithms. ### FAMSA for updating families @@ -322,6 +373,11 @@ Reporting: +In the `update_families` mode, if new sequences are added in an existing family, +and after (optionally) removing in-family sequence redundacny, if `--remove_sequence_redundancy` is set to `true`, +then the family MSA is recalculated. +If the `--alignment_tool` is `famsa`, then this `famsa_align` folder will be created, containing the updated family MSA files. + [FAMSA](https://github.com/refresh-bio/FAMSA) is a progressive algorithm for large-scale multiple sequence alignments. ### mafft for updating families @@ -338,6 +394,11 @@ Reporting: +In the `update_families` mode, if new sequences are added in an existing family, +and after (optionally) removing in-family sequence redundacny, if `--remove_sequence_redundancy` is set to `true`, +then the family MSA is recalculated. +If the `--alignment_tool` is `mafft`, then this `mafft_align` folder will be created, containing the updated family MSA files. + [mafft](https://github.com/GSLBiotech/mafft) is a fast but not very sensitive multiple sequence alignment tool. ### ClipKIT for updating families @@ -356,6 +417,11 @@ Reporting: +If the `--trim_msa` parameter was set to `true`, then depending on the `--clipping_tool`, and according to the `--gap_threshold` either +`clipkit` is run and gaps (above threshold) are removed throughout the alignment, +or `clip_ends` is run and gaps (above threshold) are removed only at the ends. +Results are stored in the `update_families/full_msa` folder. + [ClipKIT](https://github.com/JLSteenwyk/ClipKIT) is a fast and flexible alignment trimming tool that keeps phylogenetically informative sites and removes others. ### Extract family representatives @@ -375,6 +441,12 @@ Reporting: +The final report of the nf-core/proteinfamilies pipeline. +The `*_meta_mqc.csv` file are used to report family metadata and statistics in the browser, via the MultiQC software. +The `*_reps.fa` protein fasta file contains all family representative sequence in one place. +This file can be further used as input in other pipelines such as nf-core/proteinfold for structural prediction +or in fasta annotation pipelines. + ### MultiQC
    diff --git a/nextflow.config b/nextflow.config index f034b3e..91ae017 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,7 +23,7 @@ params { cluster_size_threshold = 25 // Alignment alignment_tool = 'famsa' - trim_seed_msa = true + trim_msa = true clipping_tool = 'clip_ends' gap_threshold = 0.5 recruit_sequences_with_models = true @@ -36,8 +36,8 @@ params { remove_family_redundancy = true hmmsearch_family_length_threshold = 0.8 remove_sequence_redundancy = true - cluster_seq_identity_for_redundancy = 0.95 - cluster_coverage_for_redundancy = 0.95 + cluster_seq_identity_for_redundancy = 0.97 + cluster_coverage_for_redundancy = 0.97 cluster_cov_mode_for_redundancy = 0 // MultiQC options diff --git a/nextflow_schema.json b/nextflow_schema.json index 62affe1..9e02ac3 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -242,9 +242,9 @@ "help_text": "Available tools: 'famsa' or 'mafft'.", "enum": ["famsa", "mafft"] }, - "trim_seed_msa": { + "trim_msa": { "type": "boolean", - "description": "Boolean whether to trim the seed MSA gaps", + "description": "Boolean whether to trim the MSA gaps", "default": true, "fa_icon": "fas fa-check-square", "hidden": true @@ -258,7 +258,7 @@ "gap_threshold": { "type": "number", "default": 0.5, - "description": "Seed MSA positions with gappiness greater than this threshold will be trimmed" + "description": "MSA positions with gappiness greater than this threshold will be trimmed" }, "recruit_sequences_with_models": { "type": "boolean", @@ -324,12 +324,12 @@ }, "cluster_seq_identity_for_redundancy": { "type": "number", - "default": 0.95, + "default": 0.97, "description": "mmseqs parameter for minimum sequence identity" }, "cluster_coverage_for_redundancy": { "type": "number", - "default": 0.95, + "default": 0.97, "description": "mmseqs parameter for minimum sequence coverage ratio" }, "cluster_cov_mode_for_redundancy": { diff --git a/subworkflows/local/generate_families/main.nf b/subworkflows/local/generate_families/main.nf index 9d235c2..b610698 100644 --- a/subworkflows/local/generate_families/main.nf +++ b/subworkflows/local/generate_families/main.nf @@ -31,7 +31,7 @@ workflow GENERATE_FAMILIES { ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) ch_msa = ALIGN_SEQUENCES.out.alignments - if (params.trim_seed_msa) { + if (params.trim_msa) { if (params.clipping_tool == 'clipkit') { CLIPKIT( ch_msa ) ch_versions = ch_versions.mix( CLIPKIT.out.versions ) diff --git a/subworkflows/local/update_families/main.nf b/subworkflows/local/update_families/main.nf index 279ff2f..9401145 100644 --- a/subworkflows/local/update_families/main.nf +++ b/subworkflows/local/update_families/main.nf @@ -114,7 +114,7 @@ workflow UPDATE_FAMILIES { ch_versions = ch_versions.mix( ALIGN_SEQUENCES.out.versions ) ch_msa = ALIGN_SEQUENCES.out.alignments - if (params.trim_seed_msa) { + if (params.trim_msa) { if (params.clipping_tool == 'clipkit') { CLIPKIT( ch_msa ) ch_versions = ch_versions.mix( CLIPKIT.out.versions ) From ada936811df080a92e9fba28150f2899e3bacf26 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Fri, 31 Jan 2025 15:47:17 +0000 Subject: [PATCH 132/139] help_text in most schema params --- nextflow_schema.json | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 9e02ac3..ce0d670 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -207,17 +207,20 @@ "cluster_seq_identity": { "type": "number", "default": 0.5, - "description": "mmseqs parameter for minimum sequence identity" + "description": "mmseqs parameter for minimum sequence identity", + "help_text": "Minimum sequence identity required for clustering. The mmseqs default is 0.9, but protein families contain way more diverse sequences." }, "cluster_coverage": { "type": "number", "default": 0.9, - "description": "mmseqs parameter for minimum sequence coverage ratio" + "description": "mmseqs parameter for minimum sequence coverage ratio", + "help_text": "Minimum sequence length coverage required for clustering" }, "cluster_cov_mode": { "type": "integer", "default": 0, - "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" + "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence", + "help_text": "Defined by the number of aligned residue pairs divided by 0: the maximum of the length of query/centre and target/non-centre sequences, 1: the length of the target/non-centre sequence, 2: the length of the query/centre" }, "save_mmseqs_clustering": { "type": "boolean", @@ -227,7 +230,8 @@ "cluster_size_threshold": { "type": "integer", "default": 25, - "description": "Minimum clustering chunk size threshold to create seed multiple sequence alignments upon." + "description": "Minimum clustering chunk size threshold to create seed multiple sequence alignments upon.", + "help_text": "This is an initial filter for the mmseqs clustering results. The lower the threshold, the more families will be generated. Additional sequences may be later recruited in the families." } } }, @@ -265,21 +269,24 @@ "description": "Set to true to recruit additional sequences from the input FASTA file using the family HMMs to refine the alignments", "default": true, "fa_icon": "fas fa-check-square", - "hidden": true + "hidden": true, + "help_text": "If this is set to true, the hmmer/hmmsearch module will be used to recruit additional sequences from the input fasta file into the family (above the hmmsearch_query_length_threshold), resulting in bigger but better described families" }, "hmmsearch_write_target": { "type": "boolean", "description": "Boolean whether to generate target results file of hmmsearch", "default": false, "fa_icon": "fas fa-check-square", - "hidden": true + "hidden": true, + "help_text": "Specify to calculate the hmmsearch tabular (space-delimited) summary of per-target output (*.tbl.gz)." }, "hmmsearch_write_domain": { "type": "boolean", "description": "Boolean whether to generate domain results file of hmmsearch", "default": true, "fa_icon": "fas fa-check-square", - "hidden": true + "hidden": true, + "help_text": "Specify to calculate the hmmsearch tabular (space-delimited) summary of per-domain output (*.domtbl.gz)." }, "hmmsearch_evalue_cutoff": { "type": "number", @@ -288,13 +295,14 @@ }, "save_hmmsearch_results": { "type": "boolean", - "description": "Save the output of hmmsearch (stockholm msa and domtblout)", - "help_text": "Specify to save the .sto.gz and .domtbl.gz files generated by running hmmsearch on the family model against the input set of sequences." + "description": "Save the output of hmmsearch (.domtbl.gz and .tbl.gz)", + "help_text": "Specify to save the .domtbl.gz and .tbl.gz files generated by running hmmsearch on the family model against the input set of sequences." }, "hmmsearch_query_length_threshold": { "type": "number", "default": 0.8, - "description": "hmmsearch minimum length percentage filter of hit env vs query length" + "description": "hmmsearch minimum length percentage filter of hit env vs query length", + "help_text": "This length threshold should be quite high to make sure that small, fragmented sequences are not recruited in the family models" } } }, @@ -308,7 +316,8 @@ "description": "Removal of between-family redundancy via hmmsearch.", "default": true, "fa_icon": "fas fa-question-circle", - "hidden": true + "hidden": true, + "help_text": "Similar families should not be further processed, for better resource management and to avoid duplication of families." }, "hmmsearch_family_length_threshold": { "type": "number", @@ -320,22 +329,26 @@ "description": "Removal of inside-family redundancy of sequences via mmseqs clustering.", "default": true, "fa_icon": "fas fa-question-circle", - "hidden": true + "hidden": true, + "help_text": "Highly similar sequences within the same family should be removed, while making sure that the protein family diversity is still well captured." }, "cluster_seq_identity_for_redundancy": { "type": "number", "default": 0.97, - "description": "mmseqs parameter for minimum sequence identity" + "description": "mmseqs parameter for minimum sequence identity", + "help_text": "Need to be quite high, to make sure that the diversity is still well captured, well highly similar sequences are removed" }, "cluster_coverage_for_redundancy": { "type": "number", "default": 0.97, - "description": "mmseqs parameter for minimum sequence coverage ratio" + "description": "mmseqs parameter for minimum sequence coverage ratio", + "help_text": "Need to be quite high, to make sure that the diversity is still well captured, well highly similar sequences are removed" }, "cluster_cov_mode_for_redundancy": { "type": "integer", "default": 0, - "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence" + "description": "mmseqs parameter for coverage mode: 0 for both, 1 for target and 2 for query sequence", + "help_text": "Defined by the number of aligned residue pairs divided by 0: the maximum of the length of query/centre and target/non-centre sequences, 1: the length of the target/non-centre sequence, 2: the length of the query/centre" } } } From d3a9e21789ebfaef7bdfe7d41cc4d66bb33c5a6f Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Mon, 3 Feb 2025 09:47:28 +0000 Subject: [PATCH 133/139] first release version bump (1.0.0) --- .nf-core.yml | 14 ++++----- CHANGELOG.md | 2 +- assets/multiqc_config.yml | 7 +++-- nextflow.config | 2 +- ro-crate-metadata.json | 65 ++++++++++++++++++++++++++++++--------- 5 files changed, 63 insertions(+), 27 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index c269926..4e391e1 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,9 +1,9 @@ lint: files_exist: - - conf/igenomes.config - - conf/igenomes_ignored.config - - conf/igenomes.config - - conf/igenomes_ignored.config + - conf/igenomes.config + - conf/igenomes_ignored.config + - conf/igenomes.config + - conf/igenomes_ignored.config nf_core_version: 3.2.0 repository_type: pipeline template: @@ -16,6 +16,6 @@ template: org: nf-core outdir: . skip_features: - - igenomes - - fastqc - version: 1.0.0dev + - igenomes + - fastqc + version: 1.0.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 30d7d9d..a56c287 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0 - [2025/01/31] +## v1.0.0 - [2025/02/03] Initial release of nf-core/proteinfamilies, created with the [nf-core](https://nf-co.re/) template. diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 156d48a..79c783f 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,8 @@ report_comment: > - This report has been generated by the nf-core/proteinfamilies - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/proteinfamilies analysis pipeline. For information about + how to interpret these results, please see the documentation. report_section_order: "nf-core-proteinfamilies-methods-description": order: -1000 diff --git a/nextflow.config b/nextflow.config index 91ae017..e81d18f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -271,7 +271,7 @@ manifest { mainScript = 'main.nf' defaultBranch = 'master' nextflowVersion = '!>=24.04.2' - version = '1.0.0dev' + version = '1.0.0' doi = '' } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 1236db2..cb51440 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,9 +21,9 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-27T14:48:14+00:00", - "description": "

    \n \n \n \"nf-core/proteinfamilies\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/proteinfamilies/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/proteinfamilies/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/proteinfamilies/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/proteinfamilies/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/proteinfamilies/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/proteinfamilies)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23proteinfamilies-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/proteinfamilies)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/proteinfamilies** is a bioinformatics pipeline that ...\n\n\n\n\n2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/proteinfamilies \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/proteinfamilies/usage) and the [parameter documentation](https://nf-co.re/proteinfamilies/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/proteinfamilies/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/proteinfamilies/output).\n\n## Credits\n\nnf-core/proteinfamilies was originally written by Evangelos Karatzas.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#proteinfamilies` channel](https://nfcore.slack.com/channels/proteinfamilies) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "creativeWorkStatus": "Stable", + "datePublished": "2025-02-03T09:44:15+00:00", + "description": "

    \n \n \n \"nf-core/proteinfamilies\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/proteinfamilies/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/proteinfamilies/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/proteinfamilies/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/proteinfamilies/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/proteinfamilies/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/proteinfamilies)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23proteinfamilies-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/proteinfamilies)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/proteinfamilies** is a bioinformatics pipeline that generates protein families from amino acid sequences and/or updates existing families with new sequences.\nIt takes a protein fasta file as input, clusters the sequences and then generates protein family Hiden Markov Models (HMMs) along with their multiple sequence alignments (MSAs).\nOptionally, paths to existing family HMMs and MSAs can be given (must have matching base filenames one-to-one) in order to update with new sequences in case of matching hits.\n\n\n

    \n \"nf-core/proteinfamilies\n

    \n\n### Create families\n\n1. Cluster sequences ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/))\n2. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/))\n3. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/))\n4. Generate family HMMs and fish additional sequences into the family ([`hmmer`](https://github.com/EddyRivasLab/hmmer/))\n5. Optionally, remove redundant families by comparing family representative sequences against family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/))\n6. Optionally, from the remaining families, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keep cluster representatives\n7. Present statistics for remaining/updated families size distributions and representative sequence lengths ([`MultiQC`](http://multiqc.info/))\n\n### Update families\n\n1. Find which families to update by comparing the input sequences against existing family models with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/))\n2. For non hit sequences continue with the above: A. Create families. For hit sequences and families continue to: 3\n3. Extract family sequences ([`SeqKit`](https://github.com/shenwei356/seqkit/)) and concatenate with filtered hit sequences of each family\n4. Optionally, remove in-family redundant sequences by strictly clustering with ([`MMseqs2`](https://github.com/soedinglab/MMseqs2/)) and keeping cluster representatives\n5. Perform multiple sequence alignment (MSA) ([`FAMSA`](https://github.com/refresh-bio/FAMSA/) or [`mafft`](https://github.com/GSLBiotech/mafft/))\n6. Optionally, clip gap parts of the MSA ([`ClipKIT`](https://github.com/JLSteenwyk/ClipKIT/))\n7. Update family HMM with ([`hmmer`](https://github.com/EddyRivasLab/hmmer/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.csv`:\n\n```csv\nsample,fasta,existing_hmms_to_update,existing_msas_to_update\nCONTROL_REP1,input/mgnifams_input_small.fa,,\n```\n\nEach row contains a fasta file with amino acid sequences (can be zipped or unzipped).\nOptionally, a row may contain tarball archives (tar.gz) of existing families' HMM and MSA folders, in order to be updated.\nIn this case, the HMM and MSA files must be matching in numbers and in base filenames (not the extension).\nHit families/sequences will be updated, while no hit sequences will create new families.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/proteinfamilies \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/proteinfamilies/usage) and the [parameter documentation](https://nf-co.re/proteinfamilies/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/proteinfamilies/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/proteinfamilies/output).\n\n## Credits\n\nnf-core/proteinfamilies was originally written by Evangelos Karatzas.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Martin Beracochea](https://github.com/mberacochea)\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#proteinfamilies` channel](https://nfcore.slack.com/channels/proteinfamilies) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -31,6 +31,9 @@ { "@id": "assets/" }, + { + "@id": "bin/" + }, { "@id": "conf/" }, @@ -43,6 +46,9 @@ { "@id": "modules/" }, + { + "@id": "modules/local/" + }, { "@id": "modules/nf-core/" }, @@ -99,7 +105,7 @@ }, "mentions": [ { - "@id": "#b16a2c17-506e-47b5-828a-ab5eecd6fcce" + "@id": "#a37271bb-3044-4545-9788-69aae39e1c58" } ], "name": "nf-core/proteinfamilies" @@ -121,21 +127,40 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "dateCreated": "", - "dateModified": "2025-01-27T14:48:14Z", + "dateModified": "2025-02-03T09:44:15Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", - "keywords": ["nf-core", "nextflow", "metagenomics", "protein-families", "proteomics"], - "license": ["MIT"], - "name": ["nf-core/proteinfamilies"], + "keywords": [ + "nf-core", + "nextflow", + "metagenomics", + "protein-families", + "proteomics" + ], + "license": [ + "MIT" + ], + "name": [ + "nf-core/proteinfamilies" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/proteinfamilies", "https://nf-co.re/proteinfamilies/dev/"], - "version": ["1.0.0dev"] + "url": [ + "https://github.com/nf-core/proteinfamilies", + "https://nf-co.re/proteinfamilies/1.0.0/" + ], + "version": [ + "1.0.0" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -150,11 +175,11 @@ "version": "!>=24.04.2" }, { - "@id": "#b16a2c17-506e-47b5-828a-ab5eecd6fcce", + "@id": "#a37271bb-3044-4545-9788-69aae39e1c58", "@type": "TestSuite", "instance": [ { - "@id": "#f760361b-0f06-46b2-9386-2773235ea937" + "@id": "#959646ff-6477-433a-9da5-35d4cbeb15c8" } ], "mainEntity": { @@ -163,7 +188,7 @@ "name": "Test suite for nf-core/proteinfamilies" }, { - "@id": "#f760361b-0f06-46b2-9386-2773235ea937", + "@id": "#959646ff-6477-433a-9da5-35d4cbeb15c8", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/proteinfamilies", "resource": "repos/nf-core/proteinfamilies/actions/workflows/ci.yml", @@ -185,6 +210,11 @@ "@type": "Dataset", "description": "Additional files" }, + { + "@id": "bin/", + "@type": "Dataset", + "description": "Scripts that must be callable from a pipeline process" + }, { "@id": "conf/", "@type": "Dataset", @@ -205,6 +235,11 @@ "@type": "Dataset", "description": "Modules used by the pipeline" }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, { "@id": "modules/nf-core/", "@type": "Dataset", @@ -292,4 +327,4 @@ "url": "https://nf-co.re/" } ] -} +} \ No newline at end of file From 6ffb2df6f102d6b32a0c91858a33ff986dbdefe9 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 5 Feb 2025 05:33:53 +0100 Subject: [PATCH 134/139] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a56c287..9c1285e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0 - [2025/02/03] +## v1.0.0 - [2025/02/05] Initial release of nf-core/proteinfamilies, created with the [nf-core](https://nf-co.re/) template. From a380e495af9aca3e3a4cc010d1a794435a9a96eb Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 5 Feb 2025 04:37:55 +0000 Subject: [PATCH 135/139] [automated] Fix code linting --- .nf-core.yml | 12 ++++----- README.md | 2 -- docs/output.md | 7 +++--- docs/usage.md | 25 ++++++++++--------- .../nf-core/mmseqs/cluster/environment.yml | 2 +- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 4e391e1..92703f4 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,9 +1,9 @@ lint: files_exist: - - conf/igenomes.config - - conf/igenomes_ignored.config - - conf/igenomes.config - - conf/igenomes_ignored.config + - conf/igenomes.config + - conf/igenomes_ignored.config + - conf/igenomes.config + - conf/igenomes_ignored.config nf_core_version: 3.2.0 repository_type: pipeline template: @@ -16,6 +16,6 @@ template: org: nf-core outdir: . skip_features: - - igenomes - - fastqc + - igenomes + - fastqc version: 1.0.0 diff --git a/README.md b/README.md index 33b3e17..cf6323c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,6 @@ It takes a protein fasta file as input, clusters the sequences and then generates protein family Hiden Markov Models (HMMs) along with their multiple sequence alignments (MSAs). Optionally, paths to existing family HMMs and MSAs can be given (must have matching base filenames one-to-one) in order to update with new sequences in case of matching hits. -

    nf-core/proteinfamilies workflow overview

    @@ -53,7 +52,6 @@ Optionally, paths to existing family HMMs and MSAs can be given (must have match > [!NOTE] > If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - First, prepare a samplesheet with your input data that looks as follows: `samplesheet.csv`: diff --git a/docs/output.md b/docs/output.md index 0c037eb..663434c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -212,9 +212,9 @@ These `remove_redundancy` optional folders only contain intermediate pipeline re - `/` - `*`: (optional) mmseqs format clustered db - `remove_redundancy/` - - `reps_fasta/` - - `/` - - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family) + - `reps_fasta/` + - `/` + - `_reps.fa`: (optional) fasta file of all family representative sequences (one sequence per family)
    @@ -385,7 +385,6 @@ If the `--alignment_tool` is `famsa`, then this `famsa_align` folder will be cre
    Output files - - `update_families/` - `full_msa/` - `mafft_align/` diff --git a/docs/usage.md b/docs/usage.md index 5c7d58c..0ad52f4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -24,25 +24,26 @@ CONTROL_REP1,amino_acid_sequences_input.fasta,, CONTROL_REP2,amino_acid_sequences_extra.fa.gz,existing_hmms.tar.gz,existing_msas.tar.gz ``` -| Column | Description | -| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | -| `fasta` | Full path to amino acid fasta file. File can be gzipped and allowed extensions include ".fasta", ".fasta.gz", ".fa" or ".fa.gz". | -| `existing_hmms_to_update` | Full path to compressed archive with existing family HMMs. Allowed extension should be ".tar.gz". | -| `existing_msas_to_update` | Full path to compressed archive with existing family MSAs. Allowed extension should be ".tar.gz". | +| Column | Description | +| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | +| `fasta` | Full path to amino acid fasta file. File can be gzipped and allowed extensions include ".fasta", ".fasta.gz", ".fa" or ".fa.gz". | +| `existing_hmms_to_update` | Full path to compressed archive with existing family HMMs. Allowed extension should be ".tar.gz". | +| `existing_msas_to_update` | Full path to compressed archive with existing family MSAs. Allowed extension should be ".tar.gz". | ## Parameter specifications + Here we provide guidance regarding some parameter choices. - clustering_tool ["cluster", "linclust"]: The mmseqs algorithm used for clustering. -The 'cluster' option is very slow and should only be used for small or medium size inputs. -The 'linclust' option is somewhat less sensitive, but extremely fast for clustering larger datasets. + The 'cluster' option is very slow and should only be used for small or medium size inputs. + The 'linclust' option is somewhat less sensitive, but extremely fast for clustering larger datasets. - alignment_tool ["famsa", "mafft"]: Multiple Sequence Alignment (MSA) options. -The 'famsa' option is generally recommended as best time-memory-accuracy combination. -The 'mafft' option is also very fast and may still produce better alignments in some edge cases. + The 'famsa' option is generally recommended as best time-memory-accuracy combination. + The 'mafft' option is also very fast and may still produce better alignments in some edge cases. - clipping_tool ["clip_ends", "clipkit"]: Options for MSA gap trimming. -The 'clipkit' options clips gaps throughout the sequence while 'clip_ends' only at the ends. -The authors suggest using 'clip_ends', since the gaps inside the sequences may still carry evolutionary significance. + The 'clipkit' options clips gaps throughout the sequence while 'clip_ends' only at the ends. + The authors suggest using 'clip_ends', since the gaps inside the sequences may still carry evolutionary significance. ## Running the pipeline diff --git a/modules/nf-core/mmseqs/cluster/environment.yml b/modules/nf-core/mmseqs/cluster/environment.yml index c79df33..d356134 100644 --- a/modules/nf-core/mmseqs/cluster/environment.yml +++ b/modules/nf-core/mmseqs/cluster/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=17.b804f \ No newline at end of file + - bioconda::mmseqs2=17.b804f From 506c00536b1df9d66c7c3fc666403efa3d4b628a Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Wed, 5 Feb 2025 09:33:25 +0000 Subject: [PATCH 136/139] Update docs/output.md Co-authored-by: James A. Fellows Yates --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 663434c..86eb51a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -462,7 +462,7 @@ or in fasta annotation pipelines. Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . -Custom output MultiQC data includes a metadata file (multiqc_data/multiqc_family_metadata.txt) with family information such as: Sample,Family Id,Size,Representative Length,Representative Id,Sequence +Custom output MultiQC data includes a metadata file (`multiqc_data/multiqc_family_metadata.txt`) with family information such as: Sample,Family Id,Size,Representative Length,Representative Id,Sequence This custom metadata is presented as a data table in the MultiQC report file. From cf862431d782cfa5eacf9379eeeef28490b012b2 Mon Sep 17 00:00:00 2001 From: Evangelos Karatzas <32259775+vagkaratzas@users.noreply.github.com> Date: Wed, 5 Feb 2025 09:35:14 +0000 Subject: [PATCH 137/139] Update subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf Co-authored-by: James A. Fellows Yates --- .../local/utils_nfcore_proteinfamilies_pipeline/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index 79f0c57..a1bfb91 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -227,7 +227,7 @@ def validateMatchingFolders(channel1, channel2) { // Check if base filenames match one to one if (baseNames1 != baseNames2) { - error("Filename mismatch: Expected matching files in ${folder1} and ${folder2}. Base filenames do not match.") + error("nf-core/proteinfamilies] ERROR: Filename mismatch: Expected matching files in ${folder1} and ${folder2}. Base filenames do not match.") } } } From 528d4930ca15b519c254865a7133dc1765ccfed2 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 5 Feb 2025 09:43:35 +0000 Subject: [PATCH 138/139] minor typo fix --- .../local/utils_nfcore_proteinfamilies_pipeline/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf index a1bfb91..c3f887b 100644 --- a/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_proteinfamilies_pipeline/main.nf @@ -227,7 +227,7 @@ def validateMatchingFolders(channel1, channel2) { // Check if base filenames match one to one if (baseNames1 != baseNames2) { - error("nf-core/proteinfamilies] ERROR: Filename mismatch: Expected matching files in ${folder1} and ${folder2}. Base filenames do not match.") + error("[nf-core/proteinfamilies] ERROR: Filename mismatch: Expected matching files in ${folder1} and ${folder2}. Base filenames do not match.") } } } From dbf534c107d0e712d3d79bcc983e732106b94be0 Mon Sep 17 00:00:00 2001 From: vagkaratzas Date: Wed, 5 Feb 2025 11:39:41 +0000 Subject: [PATCH 139/139] folder.toUriString() --- subworkflows/local/update_families/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/update_families/main.nf b/subworkflows/local/update_families/main.nf index 9401145..df1120d 100644 --- a/subworkflows/local/update_families/main.nf +++ b/subworkflows/local/update_families/main.nf @@ -46,7 +46,7 @@ workflow UPDATE_FAMILIES { validateMatchingFolders(ch_folders_to_validate.hmm_folder_ch, ch_folders_to_validate.msa_folder_ch) // Squeeze the HMMs into a single file - CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("$folder/*", checkIfExists: true)] } ) + CAT_HMM( UNTAR_HMM.out.untar.map { meta, folder -> [meta, file("${folder.toUriString()}/*", checkIfExists: true)] } ) ch_versions = ch_versions.mix( CAT_HMM.out.versions ) // Prep the sequences to search against the HMM concatenated model of families @@ -77,7 +77,7 @@ workflow UPDATE_FAMILIES { ch_family_msas = UNTAR_MSA.out.untar .map { meta, folder -> - [meta, file("$folder/*", checkIfExists: true)] + [meta, file("${folder.toUriString()}/*", checkIfExists: true)] } .transpose() .map { meta, file ->

    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�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