Skip to content

Latest commit

 

History

History
41 lines (27 loc) · 3.35 KB

File metadata and controls

41 lines (27 loc) · 3.35 KB

GeneType 项目总结(面试讲解用)

项目要解决的问题

根据 Sanger 测序文件(.ab1)与参考序列(.dna),自动判断每个样本的基因型:野生型(WT)纯合突变(HOM)杂合突变(HET),并尽量与 SnapGene 的判定逻辑一致,在给定标准答案(40 例 + newExample)下达到高准确率。


遇到的问题与解决方式

1. 杂合样本被判成野生型(如 87 号)
原因:仅靠“比对错配位点”看双峰,87 号比对无错配但色谱上存在明显双峰。
解决:在“即将判 WT”前增加全色谱双峰扫描,且只在对齐有效区间内扫描;设定合理阈值(如次峰/主峰 > 0.55、置信度 ≥ 10)以识别真实杂合。

2. 野生型被误判为杂合(如 9 号)
原因:全色谱扫描把 83、84 号碱基也扫进去了,而 SnapGene 会“舍弃”这段低质量区,从 G95 才开始有效比对。
解决:用比对的有效区间(parasail 核心区域的 query_start~query_end)限制双峰扫描范围,舍弃区不参与双峰判定,与 SnapGene 行为一致。

3. 异常样本的识别
需求:突变位点之外若存在双峰,应标为异常;多处异常则整份样本判为 ERR。
解决:在有效区间内扫描“非突变位点”的双峰;若由全色谱扫描判出的 HET 位点(如 87 的 262)视为突变位点,不记入异常;异常位点数 ≥ 2 时判为 ERR(如 79 号)。

4. 打包 exe 与直接运行 Python 结果不一致
原因:exe 中未打包 parasail.dll,parasail 加载失败后走 Biopython 回退比对,没有 core_length、query_start/query_end,逻辑与“有 parasail”时完全不同。
解决:在 PyInstaller spec 中用 collect_all('parasail')parasail.dll 一并打包,保证 exe 与 Python 使用同一套比对逻辑。同时去掉对 pandas 的顶层依赖、对 parasail 做异常捕获,避免缺 DLL 时直接崩溃。


核心难点与应对

  • 对齐逻辑与 SnapGene 对齐:用 Smith-Waterman(parasail)得到 CIGAR,取最长连续匹配段作为“核心区域”,并得到 query 上的有效起止位置,双峰只在有效区间内判定,避免前端低质量碱基干扰。
  • 双峰判定的鲁棒性:区分“突变位点双峰”(正常 HET)、“有效区间内非突变位点双峰”(异常)、以及“有效区间外/噪声”(不判)。通过阈值(0.55、置信度 10)和“突变位点集合”的维护(含全色谱判 HET 的位点)统一处理。
  • 打包与运行一致性:确保 exe 内 parasail 可用(打包 DLL),并处理好可选依赖(pandas、known_polymorphisms.txt),使命令行/界面/打包三种使用方式结果一致。

整体推进过程(Prompt 在解决什么)

从“先实现基本比对与 WT/HOM/HET 判定”开始,按标准答案迭代:
先解决漏判杂合(87→全色谱双峰)、再解决误判杂合(9→有效区间限制)、然后加上异常检测与 ERR(突变外双峰、79 判错)、最后保证打包 exe 与 Python 结果一致(parasail.dll、依赖与异常处理)。
每一步都是“现象→原因→改逻辑/改数据/改打包”,在 40 例 + newExample 上验证,直到两套测试用例均通过且 exe 行为与脚本一致。