Files
bttoxin-pipeline/docs/shotter_user_guide.md
2025-11-21 20:23:15 +08:00

208 lines
9.5 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 Shotter 使用指南User Guide
本指南面向使用 Bttoxin Shotter 的研究者/工程师,说明工具的使用流程、参数、生成结果与方法学原理。本文档与当前代码严格对应:
- 评分主程序:`scripts/bttoxin_shoter.py`
- 绘图与报告:`scripts/plot_shotter.py`
如需论文式报告绘图脚本已支持“paper”模式中英文可选
---
## 一、快速上手Quick Start
1. 准备输入
- BPPRC Specificity DatabaseCSV路径默认`Data/toxicity-data.csv`
- BtToxin_Digger 产物 `All_Toxins.txt`,例如:`tests/output/Results/Toxins/All_Toxins.txt`
2. 运行评分Shotter
```bash
python scripts/bttoxin_shoter.py \
--toxicity_csv Data/toxicity-data.csv \
--all_toxins tests/output/Results/Toxins/All_Toxins.txt \
--output_dir shotter_outputs \
--min_identity 0.50 \
--min_coverage 0.60 \
--disallow_unknown_families \
--require_index_hit
```
输出将保存在 `shotter_outputs/`(或可写的回退路径)。
3. 绘图与报告
```bash
python scripts/plot_shotter.py \
--strain_scores shotter_outputs/strain_target_scores.tsv \
--toxin_support shotter_outputs/toxin_support.tsv \
--species_scores shotter_outputs/strain_target_species_scores.tsv \
--out_dir shotter_outputs \
--merge_unresolved \
--per_hit_strain <你的菌株名> \
--report_mode paper \
--lang zh
```
生成:
- 热图:`strain_target_scores.png`、(可选)`per_hit_<strain>.png`、(可选)`strain_target_species_scores.png`
- 论文式报告:`shotter_report_paper.md`(可用 pandoc 导出 HTML/PDF
---
## 二、输出文件说明
- `toxin_support.tsv`
- 每条命中Hit的详细信息与对各“昆虫目”的贡献列含 TopOrder/TopScore。
- `strain_target_scores.tsv`
- 每个菌株在各“昆虫目”的合成分数,含 TopOrder/TopScore。
- `strain_scores.json`
- 与上同内容的 JSON 版本。
- 若 CSV 含 `target_species`
- `strain_target_species_scores.tsv``strain_species_scores.json`
- 热图与报告:
- `strain_target_scores.png`、(可选)`per_hit_<strain>.png``strain_target_species_scores.png`
- `shotter_report_paper.md`(或 `shotter_summary.md`
---
## 三、方法学与实现(与代码一致)
### 3.1 数据来源与阳性筛选
- BPPRC Specificity Database CSV 仅保留 `activity == "Yes"` 的阳性样本作为证据(`SpecificityIndex.from_csv`)。
- 若存在 `target_species` 列,则同时建立物种维度的特异性分布。
### 3.2 效价potency映射与归一
- 字段:`lc50` 与/或 `percentage_mortality`
- 单位归一:`units` 中的 `ppm` 合并到 `ug/g` 的桶diet 语境),在同一个单位桶内分布。
- 规则(`_potency_from_row`
-`lc50` 为数值:先保留,稍后在单位桶内按分位做“越小越强”的反排归一,得到 [0,1]。
- 否则按 `percentage_mortality` 文本粗映射:>80%→0.960-100%/50-80%→~0.65;低效/部分效应→~0.25。
- 全缺省但为阳性 → 0.55。
### 3.3 特异性索引P(order|·) 与 P(species|·)
- 对“蛋白名称 name”聚合`target_order`(或 `target_species`)对 `_potency` 求和并整体归一。
- 回退聚合:若名称无分布,则尝试亚家族(首字母)、再尝试家族(前缀+数字)。
- 由此得到:`name_to_orders``subfam_to_orders``fam_to_orders`;以及(可选)物种维度映射。
### 3.4 Digger 命中解析与家族判定
- 读取 `All_Toxins.txt`,标准化字段,并计算:
- `coverage = Aln_length / Hit_length``identity01 = Identity / 100`
- `HMM` 转布尔(`YES` → True
- `Hit_id_norm`:移除后缀 `-other` 等噪声(`normalize_hit_id`
- `family_key`使用正则在命名中解析家族与亚家族支持Cry/Cyt/Vip/Vpa/Vpb/Mpp/Tpp/Spp/App/Mcf/Mpf/Pra/Prb/Txp/Gpp/Mtx/Xpp。解析失败标记为 `unknown`
### 3.5 命中权重w_hit计算`compute_similarity_weight`
- `base(identity, coverage)`
-`identity≥0.78``coverage≥0.8``base=1.0`
-`0.45≤identity<0.78``base=(identity-0.45)/(0.78-0.45)`(截断到 [0,1]
- 否则 `base=0`
- `w = min(1, base×coverage + 0.1×I(HMM))`
- 配对要求(`partner_fulfilled_for_hit`
- 家族层面启发式对Vip1-Vip2、Vpa-Vpb、BinA-BinB
- 若需配对但该菌株内不存在满足 `w≥0.3` 的搭档,`w×=0.2` 作为惩罚。
### 3.6 贡献计算与菌株层合成noisy-OR
- 对命中 `i`,在目标目 `o` 的贡献:`c_i(o) = w_i × P(o|·)`
- 菌株层合成:`score(o) = 1 - ∏_i (1 - c_i(o))`
- `other``unknown` 桶:
- 若能解析家族但在索引中没有任何证据 → 贡献计入 `other`
- 若无法解析出家族前缀 → 贡献计入 `unknown`
- Top 排名时优先在真实“目标目”中选择,不以 `other/unknown` 决定 Top除非没有任何真实目分数
### 3.7 物种维度(可选)
- 若 CSV 含 `target_species`,同样按上式计算 `species` 的潜在活性分数与 TopSpecies。
### 3.8 Top 列含义
- `TopOrder/TopScore`(命中或菌株):在“目标目”维度下的最高分及数值,用于快速汇报与排序。
- `TopSpecies/TopSpeciesScore`:在“物种”维度下的最高分及数值(若存在物种维度)。
---
## 四、命令行参数CLI
### 4.1 评分程序:`scripts/bttoxin_shoter.py`
- 必要输入
- `--toxicity_csv`BPPRC CSV默认`Data/toxicity-data.csv`
- `--all_toxins`Digger 的 `All_Toxins.txt`(默认示例路径见代码)
- `--output_dir`:输出目录(自动检测可写路径并回退)
- 过滤与阈值(与代码一致)
- `--min_identity [0-1]``--min_coverage [0-1]`
- `--allow_unknown_families`(默认启用)/ `--disallow_unknown_families`
- `--require_index_hit`:仅保留能在特异性索引中回退到 name/亚家族/家族之一的命中
### 4.2 绘图与报告:`scripts/plot_shotter.py`
- 基本输入
- `--strain_scores``--toxin_support``--species_scores`(可选)
- `--out_dir``--cmap``--vmin``--vmax``--figsize`
- 可视化与报告
- `--merge_unresolved`:将 `other+unknown` 合并为 `unresolved`(仅影响可视化/汇总)
- `--per_hit_strain <Strain>`:仅用于绘制“单菌株每命中×目标目”的热图,不改变计算
- `--report_mode {paper,summary}`:论文式或简版报告(默认 paper
- `--lang {zh,en}`:报告语言(默认 zh
- `--summary_md <PATH>`:报告写入路径(不指定则自动命名)
---
## 五、常见问题FAQ
- Q`other``unknown` 有何区别?
- A`other` 表示能解析出家族名,但在 BPPRC 特异性索引里没有任何证据;`unknown` 表示连家族前缀都解析不出来。两者都不能合理分配到具体“昆虫目”,但含义不同,有助溯源是“命名/解析问题”还是“索引覆盖不足”。
- Q这是否意味着“都不知道杀什么虫子”
- A是“没有证据支撑分配到具体目”不等于“无活性”。`other/unknown` 不会增加任何真实“目”的分数,仅计为未解析部分。
- Q如何减少 `other/unknown`
- A
- 提高阈值:`--min_identity``--min_coverage`
- 过滤:`--require_index_hit``--disallow_unknown_families`
- 清洗命名、补充 BPPRC 数据或构建别名映射。
- Q`--per_hit_strain` 是做什么的?
- A仅用于选择一个菌株生成“每命中×目标目”的热图帮助解释哪些命中支撑了某个 TopOrder/TopScore。不会改变任何评分结果。
- Q`TopOrder/TopScore` 是什么?
- A在“目标目”维度下的最高分及其数值命中或菌株用于快速汇报与排序。若存在真实“目”Top 不会选 `other/unknown`
---
## 六、示例Examples
- 推荐的初筛参数:
```bash
python scripts/bttoxin_shoter.py \
--toxicity_csv Data/toxicity-data.csv \
--all_toxins tests/output/Results/Toxins/All_Toxins.txt \
--output_dir shotter_outputs \
--min_identity 0.50 --min_coverage 0.60 \
--disallow_unknown_families --require_index_hit
```
- 绘图与报告paper/中文):
```bash
python scripts/plot_shotter.py \
--strain_scores shotter_outputs/strain_target_scores.tsv \
--toxin_support shotter_outputs/toxin_support.tsv \
--species_scores shotter_outputs/strain_target_species_scores.tsv \
--out_dir shotter_outputs \
--merge_unresolved \
--per_hit_strain C15 \
--report_mode paper --lang zh
```
- 将报告导出为 HTML示例
```bash
pandoc -s shotter_outputs/shotter_report_paper.md -o shotter_outputs/shotter_report_paper.html
```
---
## 七、再现性与路径策略
- 输出目录写入策略:优先 `--output_dir`;不可写则回退到 `<output_dir>/Shotter`;再回退到 `./shotter_outputs/`
- 若未提供 `species_scores` 或 CSV 无 `target_species`,物种热图与报告章节将自动跳过。
---
## 八、附录:家族/亚家族解析
- 受支持的家族前缀(正则):
- `Cry``Cyt``Vip``Vpa``Vpb``Mpp``Tpp``Spp``App``Mcf``Mpf``Pra``Prb``Txp``Gpp``Mtx``Xpp`
- 例如:
- `Cry1Ac1` → family=`Cry1`subfamily=`Cry1A`
- `Bmp1-other` 标准化后 → `Bmp1`(若索引中无证据,将落入 `other`
---
如需在“计算层面”将 `other+unknown` 永久合并为 `unresolved`,或希望在报告中插入自定义方法学/参考文献段落,请提出需求,我可在现有脚本中加入相应开关与模板扩展。