Skip to main content

1.2 Linear chaining

Linear Chaining 的输出之所以是局部链,是因为它被设计为只在同一个图顶点内部连接种子。它不跨越顶点边界,所以形成的链天然只覆盖图上的一个局部区域。

可以这样理解:

1. 种子分布在图的多个顶点上​

Seeding 阶段产生的种子,可能命中 pangenome graph 的很多不同顶点。
每个种子带有两组坐标:

  • query 坐标:它在 read 上的位置;
  • graph 坐标:它在图顶点内部的偏移。

不同顶点有各自的坐标系统,彼此不能直接比较。

2. 线性链只处理“同一顶点内”的种子​

Linear Chaining 阶段拿到种子后,首先按它们所属的图顶点分组。
然后对同一个顶点内的种子,用稀疏动态规划判断哪些可以连成一条合理的链。

评分主要看:

  • query 坐标是否单调递增;
  • graph 顶点内坐标是否也大致同向变化;
  • 对角线是否一致;
  • 间隙罚分是否合理。

因为所有这些比较都发生在同一个顶点内部,坐标系统统一,所以可以可靠地计算。

3. 为什么不跨顶点连接?​

跨顶点连接会遇到几个问题:

  • 不同顶点之间的坐标没有直接可比性;
  • 两个顶点之间是否可达,需要查图结构;
  • 中间可能经过变异泡、分支、插入删除;
  • 需要计算最短路径,判断能不能从一条链走到另一条链。

这些属于 Graph Chaining 阶段的任务。
如果在 Linear Chaining 就强行跨顶点,复杂度会急剧上升,而且缺乏图拓扑信息,容易产生错误连接。

4. 所以输出是“局部链”​

每个图顶点内部,可能形成若干条局部链。
每条局部链代表:
在这个顶点内部,有一组种子可以按一致的顺序和间隙关系连起来,形成一个候选的局部匹配片段。

它只是“局部”的,因为:

  • 它只覆盖一个顶点;
  • 它不知道这个顶点在图中的前后邻居;
  • 它不知道这条链能否通过变异泡连接到其他顶点的链;
  • 它只是后续图链阶段的输入单元。

5. 局部链的作用​

这些局部链把大量零散种子压缩成少量有意义的片段。
之后 Graph Chaining 只需要处理这些局部链的端点,计算它们之间的最短路径和可达性,再跨顶点连接成全局路径。

这样就把问题分解成:

  1. 顶点内:Linear Chaining 连接种子 → 局部链;
  2. 顶点间:Graph Chaining 连接局部链 → 全局候选路径;
  3. 路径上:Alignment 做碱基级精细比对。

一句话总结​

Linear Chaining 输出局部链,是因为它只在单个图顶点内部操作,不跨顶点。
这样可以在统一坐标系统下用稀疏 DP 可靠地连接种子,同时把跨顶点的全局连接交给 Graph Chaining 处理,从而降低复杂度、提高并行性。