add usage markdown file

This commit is contained in:
2025-11-21 20:23:15 +08:00
parent 50a901c167
commit 82cfb13e50
4 changed files with 685 additions and 0 deletions

120
docs/shotter_workflow_zh.md Normal file
View File

@@ -0,0 +1,120 @@
# Bttoxin_Shoter v1 工作流(中文)
本文档说明 Shotter 如何将 BtToxin_Digger 的识别结果转换为“靶标目”的预测与打分,并给出变量定义与计算理由。
## 输入与输出
- 输入(来自 Digger
- tests/output/Results/Toxins/All_Toxins.txt必须
- 说明该文件包含每条蛋白命中的毒素条目、Identity、比对长度、HMM 标记等。
- 输入(来自 BPPRC
- Data/toxicity-data.csv正向活性记录
- 输出(由 Shotter 生成)
- toxin_support.tsv逐命中的“命中×目”贡献矩阵per-hit
- strain_target_scores.tsv每个菌株的“菌株×目”分数矩阵per-strain
- strain_scores.json同上 JSON 版
- 若 CSV 含 target_species
- strain_target_species_scores.tsv每个菌株的“菌株×物种”分数矩阵
- strain_species_scores.json同上 JSON 版
## 总体流程
```mermaid
flowchart TD
A[Genome .fna] --> B0[ORF/CDS 预测]
B0 --> B1[CDS 翻译为蛋白]
B1 --> B2[毒素识别 (BLAST/HMM/SVM)]
B2 --> AT[All_Toxins.txt]
C[BPPRC specificity CSV] --> D[构建靶标分布索引]
AT --> E[逐命中解析]
D --> F[逐命中打分]
E --> F
F --> G[菌株层合成]
G --> H[toxin_support.tsv / strain_target_scores.tsv / strain_scores.json]
```
## 变量与符号说明
- idIdentityDigger 的 Identity 字段/100范围 [0,1]
- Aln_length比对长度Hit_length参考长度
- covCoveragecov = Aln_length / Hit_length范围 [0,1]
- hmmDigger HMM 列YES→1/NO→0
- base基于 id 与阈值的分段线性权重
- w_hit单命中的相似性权重结合了 base、coverage、HMM
- P(order | name/subfamily/family):从 CSV 学得的“蛋白名/亚家族/家族 → 目标目分布”
- c(order):单命中对某“目”的贡献
- Score(strain, order)某菌株对“目”的综合分数noisy-OR 合成)
## CSV→靶标分布P(order | ·) 的构建
1. 仅保留阳性记录activity==Yes
2. 为每条记录计算“证据强度”potency
- 若含 lc50在单位桶内按反分位归一potency = 1 - rank_percentile(lc50)。理由LC50 越低毒力越强,反分位能将不同条目在同单位下归一到 [0,1]。
- 若含 percentage_mortality文本→分数
- ≥80% 或“greater than 80%”→0.90
- 5080%(含 6080%、60100%→0.65
- 060%/050%/“25%”/“some”/“stunting”→0.25
- 否则仅“有活性”→0.55
3. 单位合并与理由:饮食掺喂实验中 ppm≈µg/g故将 ppm/µg/g/ug/g/μg/g 合并到同一桶做归一;其它单位各自成桶,避免不合理跨单位比较。
4. 以“蛋白名 name”“亚家族如 Cry1A”“家族如 Cry1”三个层级分别聚合至各 target_order 的 potency 和,并在每层归一化为分布 P(order | ·)。
## 相似性权重 w_hit为什么这样算
- 分段阈值来源Bt 命名规范广泛使用 ~0.45/0.78 作为家族/亚家族划界。
- 覆盖度约束≥0.8 能抑制“碎片/部分结构域”的误判。
- HMM 加分HMM 表明结构域级别的支持,但不应压倒序列一致性,因此只 +0.1 尾数,且上限 1。
- 具体公式:
- 若 id ≥ 0.78 且 cov ≥ 0.80base = 1.0
- elif 0.45 ≤ id < 0.78base = (id - 0.45) / (0.78 - 0.45)
- elsebase = 0.0
- w_hit = min(1, base × cov + 0.1 × hmm)
- 配对家族(如 Vip1/Vip2、Vpa/Vpb若同菌株内未检测到配对家族且其权重≥0.3则下调w_hit := 0.2 × w_hit保留弱证据
## 单命中→各“目”的贡献 c(order)
- 回退顺序name → subfamily → family若能解析到家族但无证据贡献计入 other若无法解析家族前缀贡献计入 unknown。
- c(order) = w_hit × P(order | name/subfamily/family)
## 菌株层合成noisy-OR
- Score(strain, order) = 1 Π_hits (1 c(order))
- 理由:在 01 范围内自然累积多条独立证据,避免简单相加的“溢出/重复计数”。
## 特殊列
- other可解析出家族但 CSV 无证据的命中所汇总的贡献。
- unknown无法解析家族前缀的命中所汇总的贡献。
## 结果解读
- per-hittoxin_support.tsv检查具体哪条毒蛋白对哪些“目”贡献较大Weightw_hit综合反映一致性、覆盖与 HMMPartnerFulfilled=NO 时仅做弱证据。
- per-strainstrain_target_scores.tsv看每个菌株对哪些“目”分数高可取 Top-N 或设阈值(如 ≥0.5)标注高置信目标。
## 可视化与热力图
- 建议用热力图查看:
- 菌株ד目”分数热力图per-strain 矩阵)
- 单菌株命中ד目”贡献热力图per-hit 矩阵)
- 我们提供了独立脚本 scripts/plot_shotter.py 以生成 PNG
- 避免将绘图依赖耦合到核心打分脚本;
- 也便于以后替换成别的可视化方案。
### 物种维度热图与报告
- 若生成了 `strain_target_species_scores.tsv`,绘图脚本会输出菌株×物种热图。
- 绘图脚本还支持论文式报告(`--report_mode paper``--lang zh|en`),自动汇总 Top 列与热图。
### 展示开关
- `--merge_unresolved`:仅在可视化层面合并 `other+unknown``unresolved`(不改变计算)。
- `--per_hit_strain <Strain>`:选择一个菌株绘制“每命中×目标目”的贡献热图,用于解释该菌株的 TopOrder/TopScore 来源。
## Top 列与未解析桶
- TopOrder/TopScore命中与菌株在“目标目”维度下的最高分及其数值。
- 若存在真实“目”Top 排名会优先在真实“目”中选择,不以 `other/unknown` 决定 Top。
- other家族可解析但索引无证据unknown家族不可解析。
## 命令行参数(评分脚本 bttoxin_shoter.py
- 基本输入:`--toxicity_csv``--all_toxins``--output_dir`
- 过滤与阈值:
- `--min_identity [0-1]``--min_coverage [0-1]`
- `--allow_unknown_families`(默认) / `--disallow_unknown_families`
- `--require_index_hit`:仅保留可在索引中回退到 name/亚家族/家族之一的命中。
## 物种维度(可选)
-`toxicity-data.csv``target_species`,将构建 `P(species | name/subfamily/family)` 并用与“目标目”相同的公式合成菌株层分数:
- 命中贡献:`c(species) = w_hit × P(species | ·)`
- 菌株层合成:`Score(strain, species) = 1 Π_hits(1 c(species))`
## 常见问答
- 是否需要再做 BLAST不需要直接使用 Digger 的相似性结果。
- 为什么只用阳性记录?与“无活性/阴性”混用容易引入语义歧义v1 选择保守做法:阳性证据做加权统计。
- 为什么 noisy-OR它能够把多条独立证据以概率意义进行合成避免简单相加导致的>1或重复计数。