难题:机器读的是碎片,不是染色体
在上一级阶梯,你见过了那些一个字母一个字母读取 DNA 的机器——桑格优雅的链终止法,以及一次读取数百万个分子的大规模并行新一代测序仪。但那些指南里暗示过、如今我们必须正面面对的,是一个难处:没有任何测序仪能读完一整条染色体。每台机器只能读取一小段——一条读长——短读长机器通常是几百个碱基,长读长机器或许是几万个。而一条人类染色体长达数*亿*碱基。所以测序仪从不把基因组直接交给你;它交给你的是一大堆彼此重叠的碎片,剩下的排序工作留给你自己。
把它想象成一场图书馆灾难。拿一本厚厚的百科全书,把它复印许多份,再把每一份都撕成数千条彼此重叠的纸条——然后把所有纸条混进一个巨大的堆里。没有一条纸条标着页码。你的任务是仅凭这些纸条把原书重新拼起来,唯一能用的线索,就是来自同一区域的纸条共享着重叠的文字。这几乎正是从测序读长构建基因组的计算难题。我们之所以要撕碎这么多份,是因为纸条之间的重叠是它们如何拼接的*唯一*线索;没有重叠,就没有东西可粘。
霰弹枪测序:故意把它打碎
破解这道难题的策略有一个绝妙而直白的名字:[[shotgun-sequencing|霰弹枪测序]]。你不去尝试从头到尾读一条染色体,而是故意把基因组的许多份拷贝打成随机的片段——就像朝着那本书开一枪霰弹——再去测序这些片段,然后让计算机依据它们的重叠把顺序重建出来。随机性正是关键所在。因为每一份拷贝都在不同的地方碎裂,一条在某个片段中间*终止*的读长,恰好落在另一个片段的*正中央*,正是这种错位把拼图重新缝合在一起。
你得撕碎多少份拷贝?这正是覆盖度——你上一级见过的一个数字——发挥作用的地方。覆盖度无非是落在任意某一位置上的读长的平均条数:如果你的读长首尾相接加起来是基因组长度的三十倍,你就有三十倍(30x)覆盖度,意味着每个碱基平均被读到约三十次。你需要这种冗余,有两个原因。其一是错误:任何单条读长都可能把某个碱基读错,但如果有三十条独立的读长覆盖那个位点,真正的字母就会在投票中胜出。其二是缺口:读长是随机落下的,所以要有把握*每一*段都至少被打中过,你必须大幅过采样——就像要确保覆盖五十个号码,你需要远多于五十张抽奖券。
组装:从读长到重叠群到支架
现在这一堆读长被送进计算机,[[genome-assembly|基因组组装]]开始了。核心动作显而易见:找出末端彼此重叠的读长,当两条读长共享一段长而精确的字母序列时,就推断它们来自同一处,把它们合并。把足够多的重叠串接起来,一段连续的长序列便浮现出来——一个[[contig-scaffold|重叠群]](contig,源自 *contig*uous,连续)。一个重叠群是组装程序有把握的一块基因组:一段内部没有缺口的、不间断的序列。第一次组装得到的不是一个重叠群,而是成千上万个,每一个都是一座坚实的确定之岛。
READS (random fragments, overlapping):
...ATGCCAGTTAC
CAGTTACGGATC
ACGGATCTTGAA
overlaps line up the shared letters:
ATGCCAGTTAC
CAGTTACGGATC
ACGGATCTTGAA
--------------------------
CONTIG (merged, gap-free):
ATGCCAGTTACGGATCTTGAA
SCAFFOLD (contigs ordered + oriented; ? = sized gap not yet read):
[contig 1]----?NNNN?----[contig 2]----?NN?----[contig 3]为什么这些岛屿不直接连成大陆?因为重复序列。基因组里充满了在许多地方几乎一模一样地反复出现的序列——你在更早的一级见过重复 DNA 和转座子——而一段比你的读长还长的重复,就是一个陷阱。组装程序看到同一段字母从十几个互不相干的位置涌来,分不清任何一条读长究竟属于哪一份拷贝,于是与其猜错,不如就在重复的边缘把重叠群停下。重复序列是短读长把基因组留成碎片的最大单一原因,也是长读长之所以重要的最深层原因:一条长到足以横跨整段重复、两端都锚定在独特序列里的读长,能径直走过那个让短读长束手无策的陷阱。
为了在不读出缺口的情况下把它们架接起来,组装程序用了一个巧妙的招数,叫配对末端读长:你测序一个较长片段的两端——这片段的总长是已知的——尽管中间那段仍未读出。如果一端落在重叠群 A、另一端落在重叠群 B,你就得知 A 和 B 是邻居,并大致知道它们相距多远——这是一条抛过峡谷的绳索,尽管你还看不到谷底。这样把重叠群定序、定向,就得到一个支架:重叠群按正确的顺序和方向摆好,它们之间仍未读出的缺口记作一串字母 N,每一串的大小都依配对末端这条绳索所允许的精度来标注。支架就是基因组的骨架——正确的骨头按正确的顺序排好,只是有些关节还有待填补。
参考基因组与注释:从字母到意义
一旦某个物种被很好地组装出来——每条染色体都是一个长而有序的支架——这个结果便成为一个[[molbio-reference-genome|参考基因组]]:一份大家公认的、高质量的、整个领域共享的模板。它的威力在于把组装化简为单纯的比对。一旦有了一个好的人类参考,你就再也不必从零组装一个人类基因组;你测序一个新的人的读长,只需把每条读长*映射*到参考上,就像把透明的纸条铺在一份母本上,只读出它们不同的地方。这就是为什么第二个人类基因组远比第一个便宜。不过有一句诚实的提醒:参考是一个代表,而非普世的真理。任何单一参考都低估了整个物种的多样性,这正是为什么该领域如今正转向*泛基因组*——由许多个体而非单一个体构建的参考。
但一段完成的序列,仍不过是三十亿个字母——没有任何标签的 A、T、G、C。知道字母,并不等于知道它们*在做什么*,弥合这道鸿沟的,是[[molbio-genome-annotation|注释]]:在原始文本里找出隐藏的基因和特征。注释一部分靠读取信号,一部分靠比较。仅凭序列本身,软件就去搜寻你已学过的那些标志性印记——上游的一个启动子、一个起始密码子、外显子—内含子边界上典范的剪接位点、一个读码框内的终止——以预测基因坐落何处。然后它倚靠证据:它把新序列与其他物种的已知基因比对,也与来自 RNA-seq 的真实 RNA 读长比对,因为一段真正被转录且保守的序列,远比一段仅凭字母猜出来的,更可能是一个真正的基因。注释是叠加在序列之上的一层解读,而非 DNA 本身的属性——而和任何解读一样,它会随着证据的改善而被修订。
人类基因组计划,以及它留下的教训
上面这一切,都锻造于一项非凡的努力:[[molbio-human-genome-project|人类基因组计划]],一场历时约十三年、于 2001 年以一份草图告一段落的国际行动,目标是头一回读出一个完整的人类基因组。它耗资达数十亿美元之巨,凝聚了许多国家众多实验室的协同工作;而今天,一个等量的基因组只需几百美元、一两天就能测出。这种成本的崩塌——比计算领域著名的摩尔定律还要陡峭——是这项计划最切实可感的遗产,也正是它让这一级阶梯上其余的一切,从比较成千上万个基因组到测序单个细胞,变得连想象都成为可能。
它还留下了一份更微妙、值得诚实面对的遗产。2001 年那个「完整」的基因组,既不完整,也并非真正某一个人的:它是一份草图,是来自数位捐献者的拼合体,并且留下了大概百分之八的基因组——最难、最富重复、恰恰是短读长会栽跟头的那些区域——尚未完成。这些缺口直到 2022 年才被填上,由一项独立的、使用长读长的努力完成,距那场庆典已逾二十年。而这项计划被引用得最多的发现,是一个令人谦卑的发现:只有约两万个基因。事实证明,这个基因组在基因数目上比几乎所有人预期的都要小,而在谜团上却比谁预期的都要大。
这就把我们带到了整篇指南最深的那一点,也是你该带着爬完余下阶梯的一句话:测序一个基因组,与读懂它,是两回事。完成人类序列,就好比终于拿到了一门你还不会读的语言里每一个词的完整清单——这是不可或缺的起步,而它本身却几乎什么也不是。这些字母不会告诉你哪些片段是基因,这些基因如何被开启与关闭,它们的蛋白质如何协作,或者为什么某一个碱基的改变会致病、而另外一百万个改变却毫无影响。把那份原始文本转化为生物学的理解,正是生物信息学、比较基因组学与系统生物学的工作——也就是这一级阶梯余下篇章所讲的那些学科。基因组不是答案;它是你终于得以开始阅读的那本词典。