Files
bttoxin-pipeline/bttoxin_digger_v5_repro/README_CN.md
zly fe353fc0bc chore: 初始版本提交 - 简化架构 + 轮询改造
- 移除 Motia Streams 实时通信,改用 3 秒轮询
- 简化前端代码,移除冗余组件
- 简化后端架构,准备 FastAPI 重构
- 更新 pixi.toml 环境配置
- 保留 bttoxin_digger_v5_repro 作为参考文档

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-13 16:50:09 +08:00

196 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BtToxin_Digger (pixi) 复现环境
本仓库是 BtToxin_Digger 1.0.10 的**可复现运行环境 + 示例输出**,支持 **BLAST v5 数据库兼容性**。这**不是**官方分支或新版本发布。
## 许可证 / 引用 / 免责声明
- **BtToxin_Digger** 由原作者开发,如在研究中使用请引用上游论文
- **本仓库**仅提供环境封装pixi和示例运行用于复现不修改 BtToxin_Digger 源代码
- **免责声明**:这是独立的社区维护配置,未经上游作者认可
本目录使用 pixi 复现 `quay.io/biocontainers/bttoxin_digger:1.0.10--hdfd78af_0` 的环境,使 `scripts/run_single_fna_pipeline.py` 的 digger 步骤可以在无 Docker 环境下运行。
## 1) 环境定义(对比 Docker 镜像)
- `pixi.toml` 保持 `bttoxin_digger=1.0.10` + `perl=5.26.2`(旧版栈),同时升级 `blast` 到支持 v5 的版本以兼容 BLASTDB v5
- 相对于 `quay.io/biocontainers/bttoxin_digger:1.0.10--hdfd78af_0` 的变更:
- BLAST+ 从 2.12.0 升级到 2.16.0(读取 v5 数据库所需)
- 显式固定 `perl-file-tee==0.07``perl-list-util==1.38`
- `channel-priority = "disabled"` 以允许混合 bioconda/conda-forge 和旧版 perl 兼容标签
创建环境:
```bash
cd bttoxin_digger_v5_repro
pixi install
```
## 2) 数据库配置BLAST v4 vs v5
`external_dbs/bt_toxin` 下的外部 BTTCMP 数据库使用 BLAST v5 索引(由新版 BLAST+ 构建)。如果使用 BLAST 2.7,需要重建 v4 数据库;使用 BLAST >= 2.10 可以直接使用 v5 数据库。
### 推荐:使用共享的 `external_dbs`(无需复制)
保持单一数据源,链接到 pixi 环境:
```bash
ENV_BIN=bttoxin_digger_v5_repro/.pixi/envs/default/bin
ln -sfn $(pwd)/external_dbs/bt_toxin "$ENV_BIN/BTTCMP_db/bt_toxin"
```
这样可以避免在仓库内复制大型数据库。
### 可选:在本仓库内冻结快照
如果需要本仓库完全自包含,可以复制快照并指向它(注意:如果要推送到 Git考虑使用 Git LFS
```bash
SNAPSHOT=bttoxin_digger_v5_repro/external_dbs_snapshot
mkdir -p "$SNAPSHOT"
cp -a external_dbs/bt_toxin "$SNAPSHOT/"
ln -sfn "$SNAPSHOT/bt_toxin" "$ENV_BIN/BTTCMP_db/bt_toxin"
```
## 3) 运行 BtToxin_Digger组装基因组
`run_digger_pixi.sh` 在本目录内设置 `RATTLER_CACHE_DIR`,使 pixi 可以在工作区写入缓存(默认的 `~/.cache` 路径可能被沙箱阻止)。
单个 `.fna` 文件示例(使用干净的工作目录):
```bash
mkdir -p work/C15_pixi_run
cd work/C15_pixi_run
bash ../../run_digger_pixi.sh ../../examples/inputs .fna 4
```
如果要显式绑定 `external_dbs/bt_toxin`
```bash
bash ../../run_digger_pixi.sh ../../examples/inputs .fna 4 /path/to/external_dbs/bt_toxin
```
输出会生成在工作目录的 `Results/` 下。
### 参数说明
| 参数 | 说明 |
|------|------|
| `input_dir` | 输入目录(存放 `.fna` 文件) |
| `scaf_suffix` | 输入文件后缀(如 `.fna` |
| `threads` | 线程数(默认 4 |
| `bttoxin_db_dir` | 外部 bt_toxin 数据库路径(可选) |
### 与 scripts/run_single_fna_pipeline.py 的一致性
pixi 脚本调用的 BtToxin_Digger 参数与 `scripts/run_single_fna_pipeline.py` 里的 Docker 调用一致:
| 参数 | 说明 |
|------|------|
| `--SeqPath <dir>` | 输入目录 |
| `--SequenceType nucl` | 核酸输入 |
| `--Scaf_suffix .fna` | 文件后缀 |
| `--threads 4` | 线程数 |
**差异点:**
- Docker 版本会自动绑定 `external_dbs/bt_toxin`(若存在),并把输出整理到 `runs/<out_root>/digger`
- pixi 版本默认在当前工作目录生成 `Results/`
- `scripts/run_single_fna_pipeline.py` 还会继续运行 Shotter + reportpixi 脚本只执行 BtToxin_Digger 本体
## 4) 输出和对比(示例)
### 输入文件
- `examples/inputs/C15.fna`
- `examples/inputs/HAN055.fna`
### 示例运行结果
| 类型 | C15 | HAN055 |
|------|-----|--------|
| pixi 运行 | `examples/C15_pixi_v5` | `examples/HAN055_pixi_v5_clean` |
| Docker 运行 | `examples/C15_docker/digger` | `examples/HAN055_docker/digger` |
### 对比报告
- 汇总报告:`examples/COMPARE_REPORT.md`
- Diff 文件:
- `examples/diffs/C15_docker_vs_pixi_v5.diff`
- `examples/diffs/HAN055_docker_vs_pixi_v5_clean.diff`
## 5) 外部数据库更新v5
当从 BtToxin_Digger 仓库更新 `external_dbs/bt_toxin`BLAST 数据库是 v5 格式,需要 BLAST >= 2.10.0。这就是为什么本 pixi 环境将 BLAST 升级到 2.16.0。
更新 `external_dbs/bt_toxin` 后,确保 pixi 环境仍指向该目录(见第 2 节)。使用 BLAST 2.16.0 时无需重新索引,因为上游仓库已包含预构建的 v5 索引。如果降级到 BLAST 2.7,需要重建 v4 数据库(见第 2 节)。
### 更新步骤
```bash
mkdir -p external_dbs
rm -rf external_dbs/bt_toxin tmp_bttoxin_repo
git clone --filter=blob:none --no-checkout https://github.com/liaochenlanruo/BtToxin_Digger.git tmp_bttoxin_repo
cd tmp_bttoxin_repo
git sparse-checkout init --cone
git sparse-checkout set BTTCMP_db/bt_toxin
git checkout master
cd ..
cp -a tmp_bttoxin_repo/BTTCMP_db/bt_toxin external_dbs/bt_toxin
rm -rf tmp_bttoxin_repo
```
### 验证数据库绑定
```bash
# 检查数据库文件是否完整
ls -lh external_dbs/bt_toxin/db/
# 验证容器能正确访问绑定的数据库
docker run --rm \
-v "$(pwd)/external_dbs/bt_toxin:/usr/local/bin/BTTCMP_db/bt_toxin:ro" \
quay.io/biocontainers/bttoxin_digger:1.0.10--hdfd78af_0 \
bash -lc 'ls -lh /usr/local/bin/BTTCMP_db/bt_toxin/db | head'
```
输出应显示 `.pin/.psq/.phr` 等文件,且时间戳/大小与宿主机一致,说明绑定成功。
## 6) 目录结构
```
bttoxin_digger_v5_repro/
├─ .pixi/ # pixi 环境缓存
├─ pixi.toml # 环境定义bttoxin_digger + blast
├─ pixi.lock # 锁定的环境依赖
├─ run_digger_pixi.sh # 在此环境运行 BtToxin_Digger 的封装脚本
├─ README.md # 英文文档
├─ README_CN.md # 中文文档
└─ examples/
├─ inputs/ # 测试输入文件C15.fna, HAN055.fna
├─ C15_pixi_v5/ # pixi 运行输出(示例)
├─ HAN055_pixi_v5_clean/ # pixi 运行输出(示例)
├─ C15_docker/ # Docker 输出副本(基准)
├─ HAN055_docker/ # Docker 输出副本(基准)
├─ diffs/ # Docker vs pixi 差异文件
└─ COMPARE_REPORT.md # 对比报告
```
## 7) 常见问题
### Q: 为什么需要这个复现环境?
A: 主项目的 `scripts/run_single_fna_pipeline.py` 默认使用 Docker 运行 BtToxin_Digger。本环境提供了一个无 Docker 的替代方案,使用 pixi 管理依赖,适用于:
- 无法使用 Docker 的环境(如某些 HPC 集群)
- 需要调试或修改 BtToxin_Digger 运行参数的场景
- 验证 pixi 环境与 Docker 环境输出一致性
### Q: pixi 运行结果与 Docker 一致吗?
A: 是的,`examples/COMPARE_REPORT.md``examples/diffs/` 目录包含了详细的对比结果,证明两种方式的输出是一致的。
### Q: 如何切换回 Docker 运行?
A: 直接使用主项目的 `scripts/run_single_fna_pipeline.py`,它默认使用 Docker。