胡振鑫,李川,蒲雪梅,袁榕澳
(1.四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065;2.四川大學(xué)化學(xué)學(xué)院,成都610065;3.四川大學(xué)吳玉章學(xué)院,成都610065)
蛋白質(zhì)是生物體內(nèi)的一類重要的生物大分子,在生命體的活動(dòng)中發(fā)揮著重要的功能。不同的氨基酸排列會(huì)導(dǎo)致蛋白質(zhì)具有不同的結(jié)構(gòu)及作用方式,最終導(dǎo)致蛋白質(zhì)表現(xiàn)出不同的功能。在現(xiàn)實(shí)生活中,很多真實(shí)存在的系統(tǒng)都可以通過(guò)網(wǎng)絡(luò)來(lái)進(jìn)行表示。如萬(wàn)維網(wǎng)可以表征成由網(wǎng)頁(yè)通過(guò)超鏈接進(jìn)行連接的網(wǎng)絡(luò);基因調(diào)控網(wǎng)絡(luò)則可以看成是由基因之間存在調(diào)控與被調(diào)控所構(gòu)成的網(wǎng)絡(luò)。目前復(fù)雜網(wǎng)絡(luò)的概念已經(jīng)被運(yùn)用到了工程科學(xué),數(shù)理科學(xué)以及生物科學(xué)等許多不同的領(lǐng)域。將蛋白質(zhì)表征成以氨基酸作為節(jié)點(diǎn),氨基酸之間的距離作為邊的復(fù)雜網(wǎng)絡(luò)模型,可以從拓?fù)浣Y(jié)構(gòu)上對(duì)蛋白質(zhì)進(jìn)行分析,利用復(fù)雜網(wǎng)絡(luò)知識(shí)領(lǐng)域的網(wǎng)絡(luò)性質(zhì)等信息可以分析出表征蛋白質(zhì)結(jié)構(gòu)的氨基酸網(wǎng)絡(luò)中的重要節(jié)點(diǎn)信息,利用找到的重要節(jié)點(diǎn)信息可以輔助研究人員對(duì)蛋白質(zhì)結(jié)構(gòu)及功能做進(jìn)一步的分析。
Flask 框架是基于Python 進(jìn)行開發(fā)的“微框架”,可以在較短時(shí)間內(nèi)完成一個(gè)網(wǎng)站的構(gòu)建,基于利用復(fù)雜網(wǎng)絡(luò)知識(shí)表征蛋白質(zhì)結(jié)構(gòu)信息網(wǎng)絡(luò)的思路,我們結(jié)合了Flask 框架,ECharts 框架,基于WebGL 的Three.js,NGL Viewer 等技術(shù),實(shí)現(xiàn)了氨基酸網(wǎng)絡(luò)的構(gòu)建,并進(jìn)一步計(jì)算了網(wǎng)絡(luò)的重要節(jié)點(diǎn)性質(zhì),并同時(shí)實(shí)現(xiàn)了網(wǎng)絡(luò)的可視化以及網(wǎng)絡(luò)性質(zhì)的可視化,為研究蛋白質(zhì)結(jié)構(gòu)提供了一套較為完善的分析系統(tǒng)。
本文利用蛋白質(zhì)的三維結(jié)構(gòu)信息來(lái)構(gòu)建蛋白質(zhì)殘基相互作用網(wǎng)絡(luò)。該網(wǎng)絡(luò)中的節(jié)點(diǎn)用蛋白質(zhì)中的殘基來(lái)表征,兩個(gè)節(jié)點(diǎn)之間是否可以形成邊則通過(guò)兩個(gè)殘基之間的距離來(lái)進(jìn)行判斷,當(dāng)該值大于給定閾值,才定義該殘基對(duì)之間形成網(wǎng)絡(luò)的邊。
本文提供了3 類網(wǎng)絡(luò)特征的計(jì)算,分別是度中心度、中介中心度、接近中心度,具體的計(jì)算公式如表1所示。度中心性較為直觀地反映了一個(gè)節(jié)點(diǎn)在網(wǎng)絡(luò)中的重要程度,定義為與該節(jié)點(diǎn)連接的邊的數(shù)目;中介中心度表達(dá)了節(jié)點(diǎn)在全局網(wǎng)絡(luò)中的作用和影響力,定義為網(wǎng)絡(luò)中所有最短路徑經(jīng)過(guò)該節(jié)點(diǎn)的數(shù)量。
Flask[1]是一種使用Python 開發(fā)的開源的Web 應(yīng)用框架,主要基于Werkzeug WSGI 工具箱和Jinja2 模板引擎。Flask 也被叫做“微框架”,因?yàn)榕c其他基于Python 開發(fā)的Web 應(yīng)用框架(例如Django)相比,它只使用了最簡(jiǎn)單的核心,該核心只能提供基本的功能(例如模板系統(tǒng)、路由視圖等服務(wù)),但是可以使用其他插件來(lái)增加功能,如ORM、表單驗(yàn)證工具,文件上傳工具和各種開放式的身份驗(yàn)證技術(shù)等。Flask 在設(shè)計(jì)時(shí)就攜帶了擴(kuò)展模塊的接口,按照Flask 規(guī)范編寫的擴(kuò)展在結(jié)構(gòu)上和Flask 松耦合,在功能上能和Flask 本身完美結(jié)合,這種擴(kuò)展添加的方式可以使得開發(fā)方式更加靈活。
表1 3 種網(wǎng)絡(luò)特征的定義
ECharts[2]是由百度推出的一款基于JavaScript 的開源的可視化框架,底層依賴于輕量級(jí)的Canvas 類庫(kù)ZRender,可以提供比較直觀,交互豐富,可高度個(gè)性化定制的數(shù)據(jù)可視化圖表,具有豐富的可視化圖表類型(包括如柱狀圖、折線圖,以及支持圖與圖之間的組合),支持對(duì)于二維表、key-value 等多種格式的數(shù)據(jù)支持,數(shù)據(jù)采用分塊加載、異步渲染,擁有多維數(shù)據(jù)及豐富的視覺(jué)編碼手段等特性,并且通過(guò)配置項(xiàng)的設(shè)置,可以控制數(shù)據(jù)呈現(xiàn)形式和視覺(jué)效果。使用ECharts 可以減少了數(shù)據(jù)可視化頁(yè)面的編寫,降低了系統(tǒng)設(shè)計(jì)開發(fā)的難度。
NGL Viewer[3]是一個(gè)蛋白質(zhì)和其他分子結(jié)構(gòu)的在線查看器。它是為Web 應(yīng)用程序(包括圖形界面)的用戶和希望在自己的項(xiàng)目中使用NGL Viewer 的開發(fā)人員設(shè)計(jì)的。它可用于交互地可視化分子結(jié)構(gòu),可以查看分子動(dòng)力學(xué)軌跡數(shù)據(jù),支持從多種庫(kù)中讀取結(jié)構(gòu)和軌跡,包括biopython、ase、cctbx、mdanalysis、pyrosetta、pytraj、rdkit 等,也可以直接從PDB 數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。NGL Viewer 可以安裝在本地或?qū)S玫腤eb 服務(wù)器上,也可以嵌入到其他網(wǎng)頁(yè)中,并通過(guò)JavaScript API進(jìn)行控制。
WebGL 屬于一種3D 繪圖標(biāo)準(zhǔn),該標(biāo)準(zhǔn)允許將JavaScript 和OpenGL ES 2.0 結(jié)合在一起,通過(guò)基于OpenGL ES 2.0 實(shí)現(xiàn)了JavaScript 綁定,就可以為HTML5 Canvas 提供硬件3D 加速渲染,Web 開發(fā)人員就可以借助系統(tǒng)顯卡來(lái)在瀏覽器里更流暢地展示3D 場(chǎng)景和模型了,還能創(chuàng)建復(fù)雜的導(dǎo)航和數(shù)據(jù)視覺(jué)化。WebGL技術(shù)標(biāo)準(zhǔn)免去了開發(fā)網(wǎng)頁(yè)專用渲染插件的麻煩,可被用于創(chuàng)建具有復(fù)雜3D 結(jié)構(gòu)的網(wǎng)站頁(yè)面,甚至可以用來(lái)設(shè)計(jì)3D 網(wǎng)頁(yè)游戲,等等。
Three.js[4]底層實(shí)現(xiàn)了WebGL 規(guī)范,對(duì)WebGL 代碼進(jìn)行了簡(jiǎn)單封裝,通過(guò)隱藏底層的一些繁瑣的實(shí)現(xiàn)細(xì)節(jié),減輕了開發(fā)者的開發(fā)負(fù)擔(dān)并提升了開發(fā)者的開發(fā)速率,在處理瀏覽器3D 效果方面有較好的表現(xiàn)。Three.js 可以支持多種渲染器(renderer)進(jìn)行場(chǎng)景繪制,并且提供了點(diǎn)、線、面、向量、矩陣等三維創(chuàng)建時(shí)所需的基本要素,并可以快速簡(jiǎn)單地將鏡頭(Cameras)、物體(objects)、光線(lights)等對(duì)象添加到場(chǎng)景(Scene)中。Three.js 是開源的,提供了大量可用的實(shí)例源代碼,開發(fā)者可通過(guò)采用逆向工程,進(jìn)行充分深入的研究,進(jìn)行三維場(chǎng)景創(chuàng)建。
按照系統(tǒng)的功能需求,基于Flask 的氨基酸網(wǎng)絡(luò)分析平臺(tái)的總體結(jié)構(gòu)設(shè)計(jì)圖如圖1 所示。
圖1 系統(tǒng)功能設(shè)計(jì)框架
項(xiàng)目整體采用了B/S(瀏覽器/服務(wù)器)架構(gòu)。
項(xiàng)目前端部分的開發(fā)采用了HTTP、CSS3、JavaScript、Bootstrap 框架和jinja2 模板語(yǔ)言,可視化部分則采用了ECharts 框架來(lái)對(duì)網(wǎng)絡(luò)性質(zhì)分析進(jìn)行圖表的繪制,服務(wù)端的開發(fā)采用了Flask 框架進(jìn)行搭建。從總體結(jié)構(gòu)設(shè)計(jì)來(lái)看可以分為兩部分,一部分是通過(guò)Flask 框架對(duì)前端、后端進(jìn)行設(shè)計(jì),另一部分是數(shù)據(jù)的處理,包括數(shù)據(jù)的處理、分析、傳輸?shù)裙δ堋?/p>
圖2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)框架
后臺(tái)工作的主要流程(如圖2(a))為:首先使用Flask 自帶的request 模塊接收用戶所上傳的數(shù)據(jù),隨后對(duì)所上傳的PDB 文件進(jìn)行數(shù)據(jù)解析,利用Python 腳本networx.py 進(jìn)行網(wǎng)絡(luò)的構(gòu)建與分析,其中包括接收用戶指定的一些參數(shù)(包括距離閾值、是否加權(quán)等)的讀取,進(jìn)行網(wǎng)絡(luò)的構(gòu)建以及后續(xù)對(duì)于網(wǎng)絡(luò)的性質(zhì)的計(jì)算以及可視化,最終通過(guò)自定義可視化模塊進(jìn)行可視化展示,包括蛋白質(zhì)網(wǎng)絡(luò)的結(jié)構(gòu)信息可視化以及網(wǎng)絡(luò)性質(zhì)分析結(jié)果可視化,通過(guò)網(wǎng)頁(yè)的加載進(jìn)行結(jié)果的呈現(xiàn)。
軟件的整體計(jì)算流程(如圖2(b))為:首先得到用戶所輸入的PDB 文件信息以及用戶指定的一些可調(diào)控參數(shù),隨后將蛋白質(zhì)信息建模為網(wǎng)絡(luò)信息,其中,我們將每一個(gè)殘基當(dāng)做一個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn),進(jìn)行殘基間的距離計(jì)算,得到氨基酸網(wǎng)絡(luò)鄰接矩陣,通過(guò)查看殘基之間的距離是否超過(guò)閾值來(lái)判斷兩個(gè)殘基之間是否可以形成邊,后續(xù)的計(jì)算流程主要分成兩部分內(nèi)容,一部分是對(duì)網(wǎng)絡(luò)的重要性質(zhì)進(jìn)行計(jì)算,包括度中心度、接近中心度以及緊密中心度,我們利用Python 包中的networkx 包進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)以及網(wǎng)絡(luò)性質(zhì)的計(jì)算,另一部分是進(jìn)行網(wǎng)絡(luò)的可視化分析,其中,蛋白質(zhì)結(jié)構(gòu)可視化部分我們采用WebGL,Three.js 以及NGL Viewer等技術(shù)進(jìn)行網(wǎng)絡(luò)的3D 結(jié)構(gòu)以及網(wǎng)絡(luò)結(jié)構(gòu)的展示,蛋白質(zhì)網(wǎng)絡(luò)性質(zhì)的可視化我們則采用了ECharts 框架所提供的技術(shù)來(lái)實(shí)現(xiàn),利用該技術(shù),我們可以較為輕松地實(shí)現(xiàn)出可交互式的折線圖、柱狀圖、餅狀圖等多種可視化分析結(jié)果,方便用戶更加直觀的進(jìn)行結(jié)果的分析,用戶可以通過(guò)點(diǎn)擊圖中的某一個(gè)節(jié)點(diǎn)便可以找到其對(duì)應(yīng)的殘基以及該殘基的性質(zhì)的具體值,極大地提升用戶體驗(yàn)。
氨基酸網(wǎng)絡(luò)模型為研究蛋白質(zhì)結(jié)構(gòu)提供了嶄新的視角。網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中的度中心度、接近中心度、中介中心度等性質(zhì),反映了單個(gè)氨基酸與蛋白質(zhì)整體結(jié)構(gòu)的關(guān)系。本 文利用HTML、JavaScript、NGL Viewer、ECharts、WebGL 和Three.js 等技術(shù)模塊搭建了一個(gè)氨基酸網(wǎng)絡(luò)分析及可視化平臺(tái)。用戶可以利用蛋白質(zhì)結(jié)構(gòu)信息搭建網(wǎng)絡(luò)結(jié)構(gòu),并計(jì)算接近中心性等網(wǎng)絡(luò)的拓?fù)湫畔ⅰA硗?,該分析平臺(tái)還可以進(jìn)行蛋白質(zhì)結(jié)構(gòu)以及網(wǎng)絡(luò)性質(zhì)的可視化。結(jié)果表明,基于Flask 構(gòu)建的氨基酸網(wǎng)絡(luò)分析平臺(tái)對(duì)于從拓?fù)浣Y(jié)構(gòu)角度分析蛋白質(zhì)有重要的幫助。