難題:機器讀的是碎片,不是染色體
在上一級階梯,你見過了那些一個字母一個字母讀取 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 年才被填上,由一項獨立的、使用長讀長的努力完成,距那場慶典已逾二十年。而這項計劃被引用得最多的發現,是一個令人謙卑的發現:只有約兩萬個基因。事實證明,這個基因組在基因數目上比幾乎所有人預期的都要小,而在謎團上卻比誰預期的都要大。
這就把我們帶到了整篇指南最深的那一點,也是你該帶著爬完餘下階梯的一句話:定序一個基因組,與讀懂它,是兩回事。完成人類序列,就好比終於拿到了一門你還不會讀的語言裡每一個詞的完整清單——這是不可或缺的起步,而它本身卻幾乎什麼也不是。這些字母不會告訴你哪些片段是基因,這些基因如何被開啟與關閉,它們的蛋白質如何協作,或者為什麼某一個鹼基的改變會致病、而另外一百萬個改變卻毫無影響。把那份原始文本轉化為生物學的理解,正是生物資訊學、比較基因組學與系統生物學的工作——也就是這一級階梯餘下篇章所講的那些學科。基因組不是答案;它是你終於得以開始閱讀的那本詞典。