JACKHMMER

https://img.shields.io/github/issues-pr/snakemake/snakemake-wrappers/bio/hmmer/jackhmmer?label=version%20update%20pull%20requests

search profile(s) against a sequence database

URL: http://hmmer.org/

Example

This wrapper can be used in the following way:

rule jackhmmer:
    input:
        db="test-protein.fa",
        query="query.fa"
    output:
        hits_tbl="test-prot-tbl.txt",
        hits_aln="test-prot-alignment-hits.sto",
        dom_tbl="test-prot-domtbl.txt",
        summary="test-prot-out1.txt",
    log:
        "logs/jackhmmer.log"
    params:
       # Additional flags can be set using extra, for example:
       extra="-E 0.001 --F1=0.005"
    threads: 4
    wrapper:
        "v6.1.0/bio/hmmer/jackhmmer"

Note that input, output and log file paths can be chosen freely.

When running with

snakemake --use-conda

the software dependencies will be automatically deployed into an isolated environment before execution.

Software dependencies

  • hmmer=3.4

Input/Output

Input:

  • query: query file in FASTA format

  • db: database file in FASTA format.

Output:

  • hits_tbl: table of per-sequence hits (optional)

  • hits_aln: multiple sequence alignment (MSA) in Stockholm format of all significant hits (optional)

  • dom_tbl: table of per-domain hits (optional)

  • summary: human-readable output (optional)

Authors

  • Thomas Mulvaney

Code

"""Snakemake wrapper for jackhmmer"""

__author__ = "Thomas Mulvaney, N. Tessa Pierce"
__copyright__ = "Copyright 2025, Thomas Mulvaney, N. Tessa Pierce"
__email__ = "mulvaney@mailbox.org"
__license__ = "MIT"

from os import path
from snakemake.shell import shell


extra = snakemake.params.get("extra", "")
log = snakemake.log_fmt_shell(stdout=False, stderr=True)

# Output must be set even if its not desired.  Default to '/dev/null'
out_cmd = f" -o {snakemake.output.get('summary', '/dev/null')}"

if snakemake.output.get("hits_tbl") is not None:
    out_cmd += f" --tblout {snakemake.output.get('hits_tbl')}"

if snakemake.output.get("dom_tbl") is not None:
    out_cmd += f" --domtblout {snakemake.output.get('dom_tbl')}"

if snakemake.output.get("hits_aln") is not None:
    out_cmd += f" -A {snakemake.output.get('hits_aln')}"

shell(
    "jackhmmer --cpu {snakemake.threads}"
    " {extra}"
    " {out_cmd}"
    " {snakemake.input.query}"
    " {snakemake.input.db}"
    " {log}"
)