1.1 Sequence-to-Graph Seed Stage
Seed 阶段把 read 切成许多重叠的短特征串,核心原因是:短串用于快速精确匹配,重叠用于保证不漏检、抗错误、抗变异,并为后续 chaining 提供连续坐标信息。
可以分两层理解。
1. 为什么要切成“短”特征串?
因为 seeding 的本质是:拿 read 的一小段去哈希索引里查“它可能出现在图上的哪些位置”。
如果直接用整条 read 去查,会有两个问题:
- read 通常有测序错误,整条 read 几乎不可能完全精确匹配;
- 哈希索引通常只对固定长度的短串建表,查全长不现实。
所以要把 read 切成短串,典型长度是 – bp。
短串更可能在某处完全精确匹配,而且查表速度快、索引小。
2. 为什么要“重叠”?
如果只是把 read 切成互不重叠的块,比如每 bp 切一刀,会很容易漏掉真实匹配位置。
原因有三类:
① 防止边界漏检
假设 read 上真正匹配图的位置,刚好横跨两个非重叠块的边界。
如果两块分开查,可能两块都不完全匹配,但合起来其实是匹配的。
重叠切分后,总有一个短串能完整覆盖这个区域。
② 抗测序错误
一个碱基错误,会破坏包含它的所有短串。
如果短串不重叠,一个错误可能直接毁掉一整个块。
如果短串重叠,每个碱基被多个短串覆盖,一个错误只影响其中一部分短串,其他不包含该错误的短串仍然能命中。
例如 ,read 是 ACGTT...:
- 非重叠:
ACG、TT... - 重叠:
ACG、CGT、GTT、TTA...
如果第二个碱基出错,ACG 失效,但后面的 GTT、TTA 可能仍然匹配。
③ 抗变异、支持图映射
Pangenome graph 里有变异泡、插入、删除。
某个短串可能正好落在变异区域而无法匹配,但相邻的重叠短串可能落在保守区域,仍能提供种子。
这样后续 chaining 才能把候选位置连起来。
3. 重叠还方便后续 chaining
重叠短串在 read 上的位置是连续的。
当它们命中图上的不同位置时,可以比较:
- read 上的坐标差;
- graph 上的坐标差;
- 是否在同一条对角线附近。
这些信息正是线性链和图层链判断“哪些 seed 可以连成一条合理路径”的基础。
4. 但重叠太多会 seed 爆炸,所以用 minimizer
如果每个位置都取一个 -mer,read 会产生大量种子,查索引和后续 chaining 都会很慢。
所以实际框架通常用 minimizer:在滑动窗口里只选哈希值最小的那个 -mer。
也就是说:
- 底层候选是重叠的 -mer;
- minimizer 是在这些重叠 -mer 中做降采样;
- 窗口滑动仍然覆盖整个 read,所以保留了重叠带来的灵敏度和抗错性;
- 同时控制了种子数量。
一句话总结
短是为了能快速、精确地查哈希索引;
重叠是为了让每个碱基被多个短串覆盖,从而在测序错误、变异和边界情况下仍然有种子命中,并且为后续 chaining 提供连续的坐标关系。
如果只切非重叠短串,速度快但容易漏;如果全用重叠 -mer,灵敏度高但种子太多。minimizer 就是这两者之间的折中。