diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cf3bb1..c51aae7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Initial release of nf-core/proteinannotator, created with the [nf-core](https:// ### `Added` +- [#68](https://github.com/nf-core/proteinannotator/pull/68) - Using the `ARIA2` and `UNTAR` nf-core modules to download and decompress the InterProScan database. (by @vagkaratzas) - [#67](https://github.com/nf-core/proteinannotator/pull/67) - Swapped to the updated, non-buggy, nf-core version of `INTERPROSCAN`. (by @vagkaratzas) - [#65](https://github.com/nf-core/proteinannotator/pull/65) - Converted the pipeline schematic to nf-core metromap. (by @vagkaratzas) - [#62](https://github.com/nf-core/proteinannotator/pull/62) - Added the option to download and use the latest FunFam HMM library (or use path to an existing one) for domain annotation. (by @vagkaratzas) diff --git a/conf/modules.config b/conf/modules.config index 765af96..ec1428c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -110,7 +110,15 @@ process { ] } - withName: 'NFCORE_PROTEINANNOTATOR:PROTEINANNOTATOR:FUNCTIONAL_ANNOTATION:INTERPROSCAN_DATABASE' { + withName: 'NFCORE_PROTEINANNOTATOR:PROTEINANNOTATOR:FUNCTIONAL_ANNOTATION:ARIA2' { + publishDir = [ + path: { "${params.outdir}/downloaded_dbs/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'NFCORE_PROTEINANNOTATOR:PROTEINANNOTATOR:FUNCTIONAL_ANNOTATION:UNTAR' { publishDir = [ path: { "${params.outdir}/downloaded_dbs/" }, mode: params.publish_dir_mode, diff --git a/docs/output.md b/docs/output.md index 6e1abd5..f4ee3ef 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,12 +14,14 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [SeqFu](#seqfu) for input amino acid sequences quality check (QC) - [SeqKit](#seqkit) for preprocessing input amino acid sequences (i.e., gap removal, convert to upper case, validate, filter by length, replace special characters such as `/`, and remove duplicate sequences) +- [Database download](#database-download) Optionally download selected databases for annotation. + - [aria2](#aria2) - To optionally download the Pfam, FunFam, and/or InterProScan databases through the pipeline. + - [Domain annotation](#domain-annotation) Annotate proteins with domains from established repositories. - - [aria2](#aria2) - To optionally download the latest Pfam and/or FunFam databases through the pipeline. - [hmmer](#hmmer) - To optionally match the input sequence to known Pfam and/or FunFam domains through `hmmer/hmmsearch` - [Functional annotation](#functional-annotation) Annotate proteins with functional domains - - [InterProScan](#Interproscan) - Search the InterPro database for functional domains + - [InterProScan](#Interproscan) - Search the InterProScan database for functional domains - [s4pred](#s4pred) - Predict secondary structures of sequences, producing per amino acid probabilities of being an α-helix, a β-strand or a coil. @@ -62,7 +64,7 @@ The `seqkit` module is used for initial preprocessing (i.e., gap removal, conver [SeqKit](https://github.com/shenwei356/seqkit) is a cross-platform and ultrafast toolkit for FASTA/Q file manipulation. -### Domain annotation +### Database download #### aria2 @@ -70,15 +72,20 @@ The `seqkit` module is used for initial preprocessing (i.e., gap removal, conver Output files - `downloaded_dbs/` + - `interproscan_db/`: (optional) uncompressed archive data from the downloaded InterProScan database + - `*/`: (optional) one directory for each of the member databases of InterProScan - `Pfam-A*.hmm.gz`: (optional) The latest full, or a minimal test, Pfam-A HMM database that can be downloaded through the pipeline. + - `interproscan_test.tar.gz`: (optional) the downloaded InterProScan archive of member databases according to the optional user-provided url - `funfam-hmm3-v4_3_0*.lib.gz`: (optional) The latest (v4_3_0) full, or a minimal test, FunFam HMM database that can be downloaded through the pipeline. -If the `skip_*` flags (e.g., `skip_pfam`, `skip_funfam`) for each domain annotation database is set to `true`, or the `*_db` parameter paths (e.g., `pfam_db`, `funfam_db`) are set (i.e., not `null`), or the run is resumed after a successful database download, then the respective database will not be (re)downloaded. The full database links can be found in the main `nextflow.config` file, while minimal test versions can be found in the `test` and `test_full` profiles (i.e., `conf/test.config`, `conf/test_full.config`). +If the `skip_*` flags (e.g., `skip_pfam`, `skip_funfam`, `skip_interproscan`) for each annotation database is set to `true`, or the `*_db` parameter paths (e.g., `pfam_db`, `funfam_db`, `interproscan_db`) are set (i.e., not `null`), or the run is resumed after a successful database download, then the respective database will not be (re)downloaded. The full database links can be found in the main `nextflow.config` file, while minimal test versions can be found in the `test` and `test_full` profiles (i.e., `conf/test.config`, `conf/test_full.config`). [aria2](https://github.com/aria2/aria2/) is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink. +### Domain annotation + #### hmmer
@@ -103,10 +110,6 @@ Each of the `domain_annotation/` subfolders (e.g., `pfam`, `funfam`) contain a `
Output files -- `downloaded_dbs/` - - `data/`: (optional) uncompressed archive data from the downloaded InterProScan database - - `*/`: (optional) one directory for each of the member databases of InterProScan - - `interproscan_test.tar.gz`: (optional) the downloaded InterProScan archive of member databases according to the optional user-provided url - `functional_annotation/` - `interproscan/` - `/` @@ -117,9 +120,8 @@ Each of the `domain_annotation/` subfolders (e.g., `pfam`, `funfam`) contain a `
-[InterProScan](https://interproscan-docs.readthedocs.io/en/v5/#) is a protein annotation tool that searches [InterPro](http://www.ebi.ac.uk/interpro/), a database which integrates predictive information about protein function from a number of member resources, giving an overview of the families that a protein belongs to and the domains and sites it contains. -For `nf-core/proteinannotator`, the default database applications that are used to functionally annotate sequences include -Hamap, PANTHER, PIRSF, TIGRFAM and sfld. The main `nextflow.config` contains a [url]("https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz") parameter (`--interproscan_db_url`) for the full version of the InterProScan database. If, instead, a local database is provided via the `--interproscan_db` parameter, then the download is skipped. +[InterProScan](https://interproscan-docs.readthedocs.io/en/v5/#) is a protein annotation tool that searches [InterPro](http://www.ebi.ac.uk/interpro/), a database which integrates predictive information about protein function from a number of member resources, giving an overview of the families that a protein belongs to and the domains and sites it contains. The default database applications that are used to functionally annotate sequences include +Hamap, PANTHER, PIRSF, TIGRFAM and sfld, and are set through the `--interproscan_applications` parameter. See also [InterProScan output documentation](https://interproscan-docs.readthedocs.io/en/v5/), where most of these examples are taken from. diff --git a/modules.json b/modules.json index 1d3d5dd..3c9fb89 100644 --- a/modules.json +++ b/modules.json @@ -54,6 +54,11 @@ "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] + }, + "untar": { + "branch": "master", + "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", + "installed_by": ["modules"] } } }, diff --git a/modules/local/interproscan/database/main.nf b/modules/local/interproscan/database/main.nf deleted file mode 100644 index 119e602..0000000 --- a/modules/local/interproscan/database/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -process INTERPROSCAN_DATABASE { - tag "interproscan_database_download" - label 'process_long' - - conda "conda-forge::sed=4.7" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/curl:7.80.0' : - 'biocontainers/curl:7.80.0' }" - - input: - val database_url - - output: - path("interproscan_db/*"), emit: db - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - """ - mkdir -p interproscan_db/ - - filename=\$(basename ${database_url}) - - curl -L ${database_url} -o interproscan_db/\$filename - tar -xzf interproscan_db/\$filename -C interproscan_db/ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tar: \$(tar --version 2>&1 | sed -n '1s/tar (busybox) //p') - curl: "\$(curl --version 2>&1 | sed -n '1s/^curl \\([0-9.]*\\).*/\\1/p')" - END_VERSIONS - """ -} diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml new file mode 100644 index 0000000..9b926b1 --- /dev/null +++ b/modules/nf-core/untar/environment.yml @@ -0,0 +1,12 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +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..b9c324d --- /dev/null +++ b/modules/nf-core/untar/main.nf @@ -0,0 +1,75 @@ +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 + tuple val("${task.process}"), val('untar'), eval('tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//"'), emit: versions_untar, topic: 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 + + """ + + 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 + """ +} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml new file mode 100644 index 0000000..571d807 --- /dev/null +++ b/modules/nf-core/untar/meta.yml @@ -0,0 +1,73 @@ +name: untar +description: Extract files from tar, tar.gz, tar.bz2, tar.xz archives +keywords: + - untar + - uncompress + - extract +tools: + - untar: + description: | + Extract tar, tar.gz, tar.bz2, tar.xz 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 untarred + pattern: "*.{tar,tar.gz,tar.bz2,tar.xz}" + ontologies: + - edam: http://edamontology.org/format_3981 # TAR format + - edam: http://edamontology.org/format_3989 # GZIP format +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_untar: + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - untar: + type: string + description: The name of the tool + - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +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..fde8db1 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,97 @@ +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.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).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.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).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.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).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.untar, + process.out.findAll { key, val -> key.startsWith('versions') } + ).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..51a414d --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,118 @@ +{ + "test_untar_onlyfiles": { + "content": [ + [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:32.000491" + }, + "test_untar_onlyfiles - stub": { + "content": [ + [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:58.812479" + }, + "test_untar - stub": { + "content": [ + [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:48.119456" + }, + "test_untar": { + "content": [ + [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + { + "versions_untar": [ + [ + "UNTAR", + "untar", + "1.34" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-01-28T17:49:17.252494" + } +} \ No newline at end of file diff --git a/subworkflows/local/functional_annotation/main.nf b/subworkflows/local/functional_annotation/main.nf index cf44f03..3aeb539 100644 --- a/subworkflows/local/functional_annotation/main.nf +++ b/subworkflows/local/functional_annotation/main.nf @@ -1,5 +1,6 @@ -include { INTERPROSCAN_DATABASE } from '../../../modules/local/interproscan/database/main' -include { INTERPROSCAN } from '../../../modules/nf-core/interproscan/main' +include { ARIA2 } from '../../../modules/nf-core/aria2/main' +include { UNTAR } from '../../../modules/nf-core/untar/main' +include { INTERPROSCAN } from '../../../modules/nf-core/interproscan/main' workflow FUNCTIONAL_ANNOTATION { take: @@ -17,9 +18,11 @@ workflow FUNCTIONAL_ANNOTATION { ch_interproscan_db = channel.fromPath(interproscan_db).first() } else { - INTERPROSCAN_DATABASE( interproscan_db_url ) - ch_versions = ch_versions.mix(INTERPROSCAN_DATABASE.out.versions) - ch_interproscan_db = INTERPROSCAN_DATABASE.out.db + ARIA2( [ [ id:'interproscan_db' ], interproscan_db_url ] ) + ch_versions = ch_versions.mix(ARIA2.out.versions.first()) + + UNTAR( ARIA2.out.downloaded_file ) + ch_interproscan_db = UNTAR.out.untar.map{ f -> f[1] } } INTERPROSCAN( ch_fasta, ch_interproscan_db ) diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index dad2975..76cd534 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,8 +1,11 @@ { "-profile test": { "content": [ - 31, + 32, { + "ARIA2": { + "aria2": "1.36.0" + }, "ARIA2_FUNFAM": { "aria2": "1.36.0" }, @@ -18,10 +21,6 @@ "INTERPROSCAN": { "interproscan": "5.59-91.0" }, - "INTERPROSCAN_DATABASE": { - "tar": "1.32.1", - "curl": "7.80.0" - }, "S4PRED_RUNMODEL": { "s4pred": "1.2.1" }, @@ -40,6 +39,9 @@ "SEQKIT_SEQ": { "seqkit": "v2.9.0" }, + "UNTAR": { + "untar": 1.34 + }, "Workflow": { "nf-core/proteinannotator": "v1.0.0dev" } @@ -58,25 +60,24 @@ "downloaded_dbs/Pfam-A_test.hmm.gz", "downloaded_dbs/funfam-hmm3-v4_3_0_test.lib.gz", "downloaded_dbs/interproscan_db", - "downloaded_dbs/interproscan_db/data", - "downloaded_dbs/interproscan_db/data/hamap", - "downloaded_dbs/interproscan_db/data/hamap/2023_05", - "downloaded_dbs/interproscan_db/data/hamap/2023_05/hamap.hmm.lib", - "downloaded_dbs/interproscan_db/data/hamap/2023_05/hamap.prf", - "downloaded_dbs/interproscan_db/data/hamap/2023_05/profiles", - "downloaded_dbs/interproscan_db/data/hamap/2023_05/profiles/MF_00457.prf", - "downloaded_dbs/interproscan_db/data/hamap/2023_05/profiles/MF_01458.prf", - "downloaded_dbs/interproscan_db/data/sfld", - "downloaded_dbs/interproscan_db/data/sfld/4", - "downloaded_dbs/interproscan_db/data/sfld/4/sfld.hmm", - "downloaded_dbs/interproscan_db/data/sfld/4/sfld.msa", - "downloaded_dbs/interproscan_db/data/sfld/4/sfld_hierarchy_flat.txt", - "downloaded_dbs/interproscan_db/data/sfld/4/sfld_sites.annot", - "downloaded_dbs/interproscan_db/data/tigrfam", - "downloaded_dbs/interproscan_db/data/tigrfam/15.0", - "downloaded_dbs/interproscan_db/data/tigrfam/15.0/TIGRFAMs_15.0_HMM.LIB", - "downloaded_dbs/interproscan_db/data/tigrfam/15.0/TIGRFAMs_HMM.LIB", - "downloaded_dbs/interproscan_db/interproscan_test.tar.gz", + "downloaded_dbs/interproscan_db/hamap", + "downloaded_dbs/interproscan_db/hamap/2023_05", + "downloaded_dbs/interproscan_db/hamap/2023_05/hamap.hmm.lib", + "downloaded_dbs/interproscan_db/hamap/2023_05/hamap.prf", + "downloaded_dbs/interproscan_db/hamap/2023_05/profiles", + "downloaded_dbs/interproscan_db/hamap/2023_05/profiles/MF_00457.prf", + "downloaded_dbs/interproscan_db/hamap/2023_05/profiles/MF_01458.prf", + "downloaded_dbs/interproscan_db/sfld", + "downloaded_dbs/interproscan_db/sfld/4", + "downloaded_dbs/interproscan_db/sfld/4/sfld.hmm", + "downloaded_dbs/interproscan_db/sfld/4/sfld.msa", + "downloaded_dbs/interproscan_db/sfld/4/sfld_hierarchy_flat.txt", + "downloaded_dbs/interproscan_db/sfld/4/sfld_sites.annot", + "downloaded_dbs/interproscan_db/tigrfam", + "downloaded_dbs/interproscan_db/tigrfam/15.0", + "downloaded_dbs/interproscan_db/tigrfam/15.0/TIGRFAMs_15.0_HMM.LIB", + "downloaded_dbs/interproscan_db/tigrfam/15.0/TIGRFAMs_HMM.LIB", + "downloaded_dbs/interproscan_test.tar.gz", "functional_annotation", "functional_annotation/interproscan", "functional_annotation/interproscan/T1024", @@ -221,6 +222,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.3" }, - "timestamp": "2026-02-02T16:07:55.774168762" + "timestamp": "2026-02-04T10:35:30.572658533" } } \ No newline at end of file