转基因组版本chain文件格式

chain 文件的格式由UCSC基因组浏览器定义。它的每一行都包含关于两个基因组版本(“目标” t 和 “查询” q)之间比对关系的详细信息。

基于 UCSC 的官方文档,chain 文件是一种用于描述两个序列之间比对关系的格式,其核心特点是允许在两条序列上同时存在空位(gaps)。这种格式设计得非常紧凑(deliberately quite dense),旨在高效记录复杂的基因组重排信息。

在UCSC的chain文件中,目标序列(Target)查询序列(Query)是一对非常重要的概念,它们的定义完全取决于你转换的方向

两个序列的定义

简单来说,chain 文件是有方向性的,它描述的是如何将“查询序列”上的坐标映射到“目标序列”上。

  • 查询序列 (Query, qName):指你当前手头数据所在的基因组版本,也就是被转换的源头
  • 目标序列 (Target, tName):指你希望转换到的那个基因组版本,也就是转换的目的地

文件整体结构

一个标准的 chain 文件由若干个“链” (chain) 组成,每个链的结构如下: 1. 一个头部行 (Header Line):以 chain 关键字开头,包含11个必填属性。 2. 一个或多个比对数据行 (Alignment Data Lines):描述具体的区块比对信息。 3. 一个空行 (Blank Line):作为当前链的结束符。

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
chain 4900 chrY 58368225 + 25985403 25985638 chr5 151006098 - 43257292 43257528 1
9 1 0
10 0 5
61 4 0
16 0 4
42 3 0
16 0 8
14 1 0
3 7 0
48

chain 4900 chrY 58368225 + 25985406 25985566 chr5 151006098 - 43549808 43549970 2
16 0 2
60 4 0
10 0 4
70

头部行 (Header Line) 详解

头部行包含了两个序列的基本信息和整体比对概况,格式为一行包含12个字段。

字段 名称 说明
1 chain 固定关键字,标识头部行的开始。
2 score 链的比对得分,用于衡量比对质量。
3 tName 目标序列 (target/reference) 的染色体名称。
4 tSize 目标序列的染色体总长度。
5 tStrand 目标序列的链方向(+-)。
6 tStart 比对区域在目标序列上的起始位置(0-based)。
7 tEnd 比对区域在目标序列上的结束位置(0-based)。
8 qName 查询序列 (query) 的染色体名称。
9 qSize 查询序列的染色体总长度。
10 qStrand 查询序列的链方向(+-)。
11 qStart 比对区域在查询序列上的起始位置(0-based)。
12 qEnd 比对区域在查询序列上的结束位置(0-based)。
13 id 链的唯一标识符(应该就是从1开始进行编号)。

注意这里的序列起始位置和终止位置是0-based的左闭右开的区间,比如某条染色体前100个碱基的起始位置是0,终止位置是 100 (不包括 100)。下一段100个碱基的起始位置和终止位置是 100 和 200 。(转为常规的 1-based 的闭区间就是起始位置 + 1,终止位置不变)

tStrandqStrand 的准确定义

这两个字段分别记录了目标序列(Target)查询序列(Query) 中,用于比对的该条序列相对于其自身参考基因组正链的方向。

  • tStrand (目标链方向):表示在目标基因组(新版本)上,与查询序列比对的这一部分序列,是来自目标基因组的正链(+)还是负链(-)。

    关键事实:在 UCSC 提供的绝大多数 chain 文件中,tStrand 几乎总是 +。因为目标序列通常是组装好的参考基因组,而参考基因组序列文件(FASTA)默认存储的就是正链(+)的信息。

  • qStrand (查询链方向):表示在查询基因组(旧版本)上,与目标序列比对的这一部分序列,是来自查询基因组的正链(+)还是负链(-)。

    这是决定是否翻转的核心开关。如果 qStrand-,说明在旧版本中,该区域是通过反向互补后才与新版比对上的。

当 qStrand 与 tStrand 的符号不一致(相反)时,即判定该位点/区域发生了链翻转。

由于实际使用的 chain 文件中 tStrand 几乎恒为 +,所以判定规则在绝大多数情况下可简化为:

如果 qStrand 为 -,则发生链翻转(需要 flip);如果 qStrand 为 +,则没有翻转。

坐标转换和示例

qStrand- 时,表示比对发生在查询序列的反向链上。此时,qStartqEnd 是反向链上的坐标。要获得其在正链上对应的坐标,需要进行转换。

官方文档给出了一个从 hg38 转换到 mm10 的例子 (hg38ToMm10.over.chain.gz):

1
chain 442878230 chr1 248956422 + 158547112 207360161 chr1 195471971 - 21022354 65032227 5
在这个例子中,qStrand-。要计算在 mm10 正链上的坐标,使用以下公式: - mm10Start = qSize - qEnd = 195471971 - 65032227 = 130439744 - mm10End = qSize - qStart = 195471971 - 21022354 = 174449617

我感觉这里有个 bug 或者说笔误,从 chain 文件名称来看,这个例子应该是从 hg38(查询序列) 转到 mm10 (目标序列)。所以这里查询序列是 hg38 ,上面说的由于 qStrand-,计算应该是说的是在 hg38 正链上的坐标才对(而不是 mm10 )。

chain文件名称 UCSC 的说明文件中内容如下,作为佐证。

The file names reflect the assembly conversion data contained within in the format To.over.chain.gz. For example, a file named mm10ToHg19.over.chain.gz file contains the liftOver data needed to convert mm10 (Mouse GRCm38) coordinates to hg19 (Human GRCh37).

比对数据行 (Alignment Data Lines) 详解

头部行之后,跟着一行或多行数据,用于描述具体的比对区块(blocks)。这些行通常包含三个数字:

字段 说明
size 当前无空位比对区块 (ungapped alignment) 的大小。
dt 当前区块结束到下一个区块开始之间,在目标序列上的距离(即目标序列上的空位大小)。
dq 当前区块结束到下一个区块开始之间,在查询序列上的距离(即查询序列上的空位大小)。

注意:比对数据行的最后一行只有一个数字,即最后一个无空位比对区块的 size 值。

总结

chain 文件通过头部行定义了两个序列的基本信息和整体比对方向,并通过后续的数据行精确记录了每个共线性区块(block)的大小以及区块间的间隙(gap)。这种设计使得它能够高效、精确地描述从简单易位到复杂倒位、重复等多种基因组结构变异。

参考文献

  1. https://genome.ucsc.edu/goldenPath/help/chain.html

  2. https://biojuse.com/2025/02/12/VCF%20%E6%96%87%E4%BB%B6%E8%BD%AC%E5%9D%90%E6%A0%87%E7%9A%84%E6%96%B9%E6%B3%95%E6%B1%87%E6%80%BB%E5%8F%8A%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信