rustyhmmer
Pure-Rust reimplementation of HMMER3's hmmsearch,
producing byte-identical --tblout output to HMMER 3.4 for protein
profile-HMM search.
HMMER is pronounced "hammer"; this is a rusty one.
Status
- Amino-acid
hmmsearchpipeline: MSV/SSV (F1) → bias (F3b) → Viterbi (F2) → Forward (F3) → domain definition → per-sequence / per-domain scoring →--tbloutreporting. - Output is validated byte-for-byte against C HMMER 3.4
--tblouthit rows. - No
unsafe, no architecture-specific intrinsics; SIMD is obtained through auto-vectorization, so it runs on both x86-64 (SSE2) and AArch64 (NEON).
Build
Usage
The tool reads a HMMER3/f .hmm file and a protein FASTA database and writes
--tblout-format tabular results to standard output.
Scope and limitations
- Protein (amino-acid) models only.
hmmsearchonly (nohmmscan/nhmmer/phmmer/jackhmmer).- Local, multihit mode (HMMER's default).
Changelog
0.1.2
- Profile-parallel
search(). The in-process librarysearch()now parallelizes over profiles (coarse-grained) instead of over sequences within each profile. On a genome-sized query set most profiles are rejected cheaply by the MSV filter, so the old per-profile sequencepar_iterpaid rayon fork/join overhead on ~10^5 near-empty dispatches (~35% core use on 16 threads). The coarse dispatch is an order-preservingIndexedParallelIterator, so the concatenated output is byte-identical to before — pure throughput.
0.1.1
- Synced hmmsearch / Easel / DP code from the dev tree; full
--help, graceful thread-pool error handling.
0.1.0
- Initial release: pure-Rust HMMER3
hmmsearch(--tblout), byte-parity with C HMMER 3.4; in-processHmmAnnotatorlibrary API.
License
BSD-3-Clause. rustyhmmer is a derivative work of HMMER and its Easel library and is distributed under the same terms. See LICENSE for the full HMMER and Easel copyright notices.
Author
Sunju Kim n.e.coli.1822@gmail.com