# rustyhmmer
Pure-Rust reimplementation of [HMMER3](http://hmmer.org/)'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 `hmmsearch` pipeline: MSV/SSV (F1) → bias (F3b) → Viterbi (F2)
→ Forward (F3) → domain definition → per-sequence / per-domain scoring →
`--tblout` reporting.
- Output is validated byte-for-byte against C HMMER 3.4 `--tblout` hit 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
```sh
cargo build --release
```
## Usage
```sh
rustyhmmer-hmmsearch [options] <query.hmm> <target.faa>
```
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.
- `hmmsearch` only (no `hmmscan` / `nhmmer` / `phmmer` / `jackhmmer`).
- Local, multihit mode (HMMER's default).
## Changelog
### 0.1.3
- **Striped-SSE (Farrar) Viterbi filter.** The Viterbi filter score now runs a
striped-SIMD i16 kernel (`p7_ViterbiFilter`, `impl_sse/vitfilter.c`) on
SSE2-capable x86-64, built from the same quantized tables as the scalar path
and dispatched at runtime. Output is **byte-identical** to the scalar oracle
(verified by the `sse_matches_scalar` differential test); pure throughput.
### 0.1.2
- **Profile-parallel `search()`.** The in-process library `search()` 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 sequence `par_iter` paid
rayon fork/join overhead on ~10^5 near-empty dispatches (~35% core use on 16
threads). The coarse dispatch is an order-preserving `IndexedParallelIterator`,
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-process `HmmAnnotator` library 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](LICENSE) for the full
HMMER and Easel copyright notices.
## Author
Sunju Kim <n.e.coli.1822@gmail.com>