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

121 lines
6.7 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_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或重复计数。