AveryanAlex/zhunters
GitHub: AveryanAlex/zhunters
ZHunters 是一款基于 Rust 的 Z-DNA 扫描器,用于快速分析 DNA 序列。
Stars: 0 | Forks: 0
# ZHunters
`zhunters` 是 Z-HUNT 3 Z-DNA 扫描器的 Rust 版本。它提供了 `zhunt` 命令行工具,用于扫描 DNA 序列并写入与旧版本兼容的 `.Z-SCORE` 输出文件。
该项目基于科罗拉多州立大学 Ho 实验室的原版 Z-HUNT 实现:
https://github.com/Ho-Lab-Colostate/zhunt
它还结合了 Carlos Bederián 的 Fast Z-Hunt 实现的正确性和优化思想:
https://github.com/zzzoom/fast-zhunt
## 基准测试
在 Ryzen 7 5800X 上对 `NC_043715.1[1..59306649].fa`(59.3 Mbases)进行本地基准测试,使用 `zhunt 12 8 12`:
| 扫描器 | 实际时间 | 加速比 | 用户时间 | 系统时间 | CPU |
| --- | ---: | ---: | ---: | ---: | ---: |
| `zhunters` | `0:13.96` | `6.89×` | `156.82s` | `4.91s` | `1158%` |
| `fast-zhunt` | `1:36.23` | `1.00×` | `710.58s` | `8.53s` | `747%` |
| `zhunt` | `38:56.40` | `0.04×` | `2329.38s` | `6.72s` | `99%` |
## 原版 Z-HUNT 的变更
命令行界面、输入处理和 `.Z-SCORE` 输出格式与原版扫描器保持兼容。主要变更按是否添加到本 Rust 版本或从 Fast Z-Hunt 适配进行分组。
### Rust 版本改进
- **Delta-linking 候选者剪枝:** 使用 delta-linking 方程的单调性跳过无法击败当前最佳 delta-linking 值的候选者长度。
- **Delta-linking 根搜索加速:** 根搜索使用受保护的新ton 预测器,捕捉到二分网格,并使用原始方程验证最终点。预测器还使用 delta-linking 方程的因式分解形式来减少运行时 `exp()` 调用。
- **Rayon 多线程:** 使用 Rayon 工作窃取并行化评分。结果以有序的评分块形式流式传输,以便写入器可以消费已完成的工作,而无需等待整个大型计算块。默认情况下,具有 8 个或更多逻辑 CPU 的系统保留一个 CPU 用于写入,并使用 `cores - 1` 评分工作者;较小的系统使用所有可用的 CPU。`--threads` 覆盖此默认值。
- **输入/输出流:** 输入文件通过缓冲读取器解析为标准化基,`.Z-SCORE` 行以有界、有序的块形式生成,然后刷新到磁盘。扫描器不保留原始 FASTA 文本或完整结果文件在 RAM 中,以保持大型基因组内存使用的可预测性。
- **进度报告:** 长时间扫描在评分和流式传输到磁盘时显示进度条。
- **工作器端输出格式化:** 评分块由 Rayon 工作器格式化为字节缓冲区,然后按顺序由写入器线程写入。
### 从 Fast Z-Hunt 衍生的修复和优化
- **Anti/syn 评分修复:** anti/syn 路径选择使用精确的整数百卡能量总和,而不是累积递归 `float` 添加/减法。这避免了 Ho-Lab-Colostate/zhunt 问题 [#9](https://github.com/Ho-Lab-Colostate/zhunt/issues/9) 中描述的数值漂移。
- **斜率修复:** 报告的斜率是从实际最佳二核苷酸长度的对数系数计算的,而不是运行最后发生的任何长度。这修复了 Ho-Lab-Colostate/zhunt 问题 [#10](https://github.com/Ho-Lab-Colostate/zhunt/issues/10) 中描述的 `logcoef` 错误。
- **Anti/syn 动态规划优化:** 使用紧凑的两种状态动态规划评估精确的 anti/syn 评分,仅保留以 `AS` 结尾的最佳前缀和以 `SA` 结尾的最佳前缀。此优化基于 Carlos Bederián 的 Fast Z-Hunt 实现中使用的紧凑 anti/syn DP。
## 安装
安装 Rust,然后构建发布二进制文件:
```
cargo build --release
```
二进制文件将在以下位置可用:
```
target/release/zhunt
```
### Jupyter/Colab
在 Jupyter 或 Google Colab 笔记本中,在单元格中运行以下命令以安装 Rust、构建 `zhunt` 并使其在 `PATH` 上可用:
```
!curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
!rm -rf /tmp/zhunters && GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 https://github.com/AveryanAlex/zhunters.git /tmp/zhunters
!cd /tmp/zhunters && PATH="$PATH:/root/.cargo/bin" cargo build --release && cd -
!cp /tmp/zhunters/target/release/zhunt /usr/local/bin/zhunt && rm -rf /tmp/zhunters
!zhunt --help
```
## 使用方法
```
zhunt [--threads ] [-o
标签:DNA序列分析, DNS解析, Rayon库, Rust编程, Z-DNA扫描, 二分搜索, 代码优化, 代码重构, 可视化界面, 学术研究, 工作窃取, 并行计算, 开源项目, 性能优化, 性能比较, 数据科学, 数据管道, 检测绕过, 牛顿法, 生物信息学, 科学计算, 算法改进, 计算机科学, 资源验证, 软件工程, 软件移植, 通知系统