Paleodictyon - 古網(wǎng)
我本來是不想回復(fù)B站網(wǎng)友的,但是既然網(wǎng)友問了……我的團(tuán)隊之前開發(fā)了用于分析體細(xì)胞突變(somatic mutation)的通用工具,可以對其他研究機(jī)構(gòu)用戶在線提交的分析請求進(jìn)行處理。用戶通過信息隊列SQS提供一個JSON格式的事件(event)來觸發(fā)分析流水線(pipeline),event中需要包含用戶信息和樣品基本信息,特別是樣品的DNA測序結(jié)果BCL文件數(shù)據(jù)源與參考基因組版本。這套系統(tǒng)最初只是用來分析人類數(shù)據(jù)促進(jìn)癌癥研究的,但是后來為了方便比較不同物種間的體細(xì)胞突變頻率差異而被拓展到支持跨物種分析。用戶只需要在event中指定物種的種屬名,系統(tǒng)就會自動尋找適配的參考基因組。如果用戶的event是無效的,系統(tǒng)會通過簡單通知服務(wù)SNS向開發(fā)維護(hù)團(tuán)隊發(fā)出一個包含錯誤信息與Log文件的提示,方便進(jìn)行故障排查。
我在一個清晨例行查看郵箱時發(fā)現(xiàn)了數(shù)封提示郵件,錯誤類型都是“無效的種屬名”。我一開始沒當(dāng)回事,這種低級錯誤用戶一般會自行處理。但是接下來同樣的錯誤信息被發(fā)來了幾十次。我無奈地開始詳細(xì)閱讀Log, 發(fā)現(xiàn)用戶是一個來自古生物所的賬號,這讓我很驚訝。因為古生物所很少有測序分析的需求,畢竟化石提取DNA可能性太飄渺。我一邊發(fā)出郵件詢問他們是否需要協(xié)助一邊將Log拉到種屬名進(jìn)行檢查。用戶沒有按照雙名法輸入,屬名空著,而種名寫著“Paleodictyon”。我有限的拉丁文詞匯積累瞬間被擊穿,我不得不求助于谷歌。谷歌很爽快的回答了兩個字“古網(wǎng)”。
古網(wǎng)是什么鬼?還未等我在維基百科中搜尋答案,古生物所的回件已經(jīng)不期而至。對方是一位副研究員,他告知我賬號的使用記錄顯示是他的一位博士生A君提交了若干次分析請求,但是這些請求并未告知所里。他向我表達(dá)歉意并說之后不會再發(fā)來新的分析請求。雖然一頭霧水,我也還就將此揭過,權(quán)當(dāng)是意外觸發(fā)。但是沒過兩天我的維護(hù)郵箱再一次被錯誤提示塞滿,又是古生物所的賬號,又是那么什么古網(wǎng)!
這下我坐不住了,立馬找出上次郵件中的電話號碼給副研究員打了過去。在簡短寒暄后我直接開門見山抱怨起又接到了一大堆古網(wǎng)的分析請求。副研究員表現(xiàn)出震驚,發(fā)出不可置信的“????”在磨磨唧唧了半天并且要求我對談話內(nèi)容保密之后副研究員才說“這是不可能的!”。原因很簡單,只有博士生A有這個賬號權(quán)限他也確實在做一種被稱為古網(wǎng)的海洋化石研究,但是他已經(jīng)失蹤半個月了!使用賬號需要所里的VPN,他不在所里根本提交不了請求。而且副研究員還說:“古網(wǎng)是印痕化石,哪來的DNA可分析?”這下輪到我震驚了,因為收到的請求明明白白提供了待分析BCL文件的路徑。帶著滿肚子疑惑,我決定先凍結(jié)這個賬號,然后把BCL文件轉(zhuǎn)為FASTQ文件看看都是什么玩意,是不是隨便拿了個其他物種的數(shù)據(jù)來搞惡作劇。
我?guī)е嫱娴男膽B(tài)抽取了一部分FASTQ文件中的堿基序列片段做了BLAST比對,結(jié)果令人驚訝,居然沒能和任何哺乳動物的基因組序列匹配上,反倒和頭足類能部分匹配,可惜得分也不是很高沒有決定性。我在吃午餐時用手機(jī)播放了一個副研究員推薦的視頻,是一個B站的up主,叫芳斯塔芙什么的。他的視頻介紹了古網(wǎng)這種令人迷惑的六邊形網(wǎng)格狀印痕化石。其處于深海之中,雖然大概率此物種沒有滅絕但是只見印痕不見生物真身。這個視頻激發(fā)了我的好奇心。我快速開發(fā)了一個簡短的pipeline對收到的所有標(biāo)注為古網(wǎng)的測序文件進(jìn)行了一些定性分析。結(jié)果令人驚訝,所有序列都表現(xiàn)出極高的GC值,高到了離譜。一般來說鳥嘌呤與胞嘧啶(G/C)總比例都在序列的35%~65%之間,偶爾有高者如放線菌Streptomyces rubrolavendulae的GC含量高達(dá)74.8%,但是這批所謂的“古網(wǎng)”序列居然都是85%以上,有些片段干脆就是一大堆GC在不斷排列組合如果小衛(wèi)星序列一般。中學(xué)生都知道GC之間有三個氫鍵,相較于AT間的兩個氫鍵更加穩(wěn)定。GC含量越高,序列穩(wěn)定性一般越高,但是高過80%之后連復(fù)制都會變得困難。這還是DNA,要是RNA天知道這段序列會被內(nèi)部的氫鍵匹配扭曲成什么模樣。模樣?我突然靈光一閃,冥冥之中感覺到了什么,立馬將DNA序列轉(zhuǎn)為RNA,粘貼到了RNA二級結(jié)構(gòu)預(yù)測軟件里。簡短的運(yùn)算之后一張圖片輸出出來:好似一團(tuán)亂麻,但是慢慢縮小圖片之后一串歪歪扭扭的數(shù)字出現(xiàn)在屏幕上,全是1和0。
“二進(jìn)制??!”我腦中如同響起驚雷,我當(dāng)即決定把所有的序列轉(zhuǎn)成圖片。人工判讀是不現(xiàn)實的,量太大。我找了個開源的手寫數(shù)字識別AI來幫我干這個活。我估計了一下運(yùn)行大概要大半天的時間,就把二級結(jié)構(gòu)預(yù)測程序與AI串聯(lián)起來,啟動為批處理任務(wù)(batch job)放在云上跑著。
閑著也是閑著,我又聯(lián)系了一個和做地質(zhì)學(xué)的朋友,他和古生物所關(guān)系緊密。我側(cè)敲旁擊打聽博士生A君的事。地質(zhì)老哥和礦石一樣實誠,一股腦地把知道的都告訴我了。他居然認(rèn)識A君,而且知道A君是在和海洋所合作研究在南太平洋某處新發(fā)現(xiàn)的古網(wǎng)。A君提過從海底沉積物厚度看是非常新鮮的古網(wǎng),可能是1年內(nèi)新出現(xiàn)的。A君當(dāng)時非常興奮,眉飛色舞的說什么重大發(fā)現(xiàn),精致的就如海底的城市,非常吸引人云云。但是沒多久A君就不對勁了,每天疑神疑鬼還自言自語,站在研究室的水槽邊盯著水槽的排水口喃喃低語,說什么“又在叫我”。大家剛開始都只當(dāng)他發(fā)期刊壓力太大了,但是沒多久海洋所的電話就砸過來了:說A君想要偷偷溜上將要出航的科考船被抓住了。古生物所的領(lǐng)導(dǎo)一個頭兩個大,硬著頭皮去領(lǐng)人,結(jié)果到了就被告知A君不見了,而且他被抓的時候如同瘋魔般高喊:別攔著,他要我過去!
這個莫名其妙的故事搞得我心神不寧,因為我這下確定第二批古網(wǎng)的分析請求是在A君失蹤后發(fā)過來的,到底是誰在搞怪?
當(dāng)夜深人靜,系統(tǒng)提示我運(yùn)行結(jié)束。我試著解析這些獲得的二進(jìn)制編碼。這有點(diǎn)運(yùn)氣成分,因為可能的編碼方式有很多。我索性先試了試最簡單的轉(zhuǎn)為十進(jìn)制再用ASCII代碼轉(zhuǎn)換為文本,結(jié)果出了一大堆無法解讀的混亂字母,讓人一看就頭暈。我又嘗試了UTF8編碼,結(jié)果還是一樣,毫無意義的亂序字母讓人頭暈眼花,多看幾眼感覺視野都出現(xiàn)了扭曲。難道是A君的母語?抱著賭一把的念頭,我把編碼改為了GB2312。之前的失敗讓我有點(diǎn)拘謹(jǐn),沒有做批量轉(zhuǎn)換,而只取了序列頭部的一小段進(jìn)行解碼。
“來來來?!?br>喲吼,有點(diǎn)意思,終于有段能讀懂的人話了。
受到鼓勵之后我立刻進(jìn)行了批量轉(zhuǎn)化,然后用一個for loop將結(jié)果逐行輸出,標(biāo)點(diǎn)符號默認(rèn)為句號。
“來來來?!?/p>
“來來來?!?/p>
“來來來?!?/p>
“來來來?!?/p>
……
“來來來?!?/p>
“來來來?!?/p>
“來來來?!?/p>
怎么全是這句話?出BUG呢?我剛起心動念,一行全新的輸出就跳了出來:
“A到這里來?!?/p>
A君的大名赫然在列!有門!程序應(yīng)該沒錯!
還沒來的急高興,輸出的字符又變成了單調(diào)重復(fù)的“來來來?!?br>跟著讀了幾句之后,感覺這三個字就如同在腦海中旋轉(zhuǎn),揮之不去。我只能用力搖頭然后起身望向窗外試圖放松一下。可惜天公不作美,明明剛才還是明月高掛,現(xiàn)在卻突然間大霧彌漫。霧氣之中,柳樹影影綽綽,枝條搖擺好似蠕動。我們干實驗室(dry lab)外面什么時候種的柳樹?沒注意過啊。伸了個懶腰,我坐回電腦前又盯了了幾分鐘。可能是用眼過度,我感覺超寬屏幕都開始腫脹了起來。還好功夫不負(fù)有心人,終于又跳出了一行不同的輸出:
“古網(wǎng)”。
這下我萬分確定這些所謂的測序數(shù)據(jù)是人為編寫的了,費(fèi)這么大心思就為了搞惡作???不太可能。我推測這些字符中搞不好包含著A君失蹤的秘密。定了定神,我繼續(xù)往下看。
“古網(wǎng)”。
“古網(wǎng)”。
“古網(wǎng)”。
又是不斷重復(fù)。
“古網(wǎng)”。
“舊日的”。
“舊日的”。
“舊日的”。
?
古不就是舊嗎?難道是想做什么解釋?還沒吐槽,一行與眾不同的長文本被輸出出來:
“來來來。A到這里來。舊日錕斤拷(亂碼)在呼喚。來來來。星星位置對。來來來。來拉嬩簲(亂碼?)。來叚萊鑰(亂碼?什么意思?。浚?。來潕鍥(又亂碼?)耶耶耶耶耶耶耶?!?/p>
我還沒能多想,隔壁茶水間砰的一聲巨響,然后就是嘩啦啦的水聲,還傳來一股水腥味。媽呀,不會是爆管了吧?!這個點(diǎn)可沒人維修!我無它法,只能先將目前的分析記錄發(fā)在芳斯塔芙的視頻下面回復(fù)B站網(wǎng)友,然后就去去查看茶水間。不過水聲真好大,聽著和瀑布一般,哦不,更像海浪,不樂觀啊。欸呦喂,感覺頭好暈,頭暈?zāi)垦5?,等擰上閥門就回去休息吧,怎么感覺走路都走不穩(wěn)了……