蛋白質組學研究方法OpenSwath的體系結構小結
8 人贊了文章
OpenSwath是OpenMS的一個子模塊,專門用於SwathMS體系的數據解析和初級打分.在經過打分以後會將OpenSwath中打出的各類子分數再投入到PyProphet演算法中進行半監督學習的打分.最終得出總分,用以判定肽段識別的可靠性.
如下圖所示是OpenSwath的體系結構圖.大致分為OpenMS Framework底層模塊,OpenSwath專有模塊,數據集和PyProphet模塊這四個部分.下面我就各個部分的作用做一個簡單的匯總.
知乎的圖上傳了以後有些不清楚,大家湊活看看
OpenSwath建立在OpenMS的Framework結構上,包含了科學計算庫和基礎庫兩大類庫.
科學計算庫包括GSL: 一個C++科學計算庫,包含了各類科學計算函數libSVM: 一個支持向量機的庫,支持向量機是機器學習演算法中的一個重點模型,在這裡就不多做闡述了.SeqAn: 一個生物序列分析庫,包含了大量對於Sequence的演算法和數據結構CoinMP: 一個區塊鏈加密演算法庫,包含了大量加密演算法GLPK:一個線性規劃求解庫基礎庫包括:boost: 這個搞C++的同學應該非常熟悉,C++的准標準庫Qt: C++圖形界面開發框架(OpenMS是一個有界面的軟體哦)zlib: 格式壓縮及解壓縮操作庫libbiz2: 高質量數據壓縮庫Xerces: XML解析庫
其實這些庫用到的都不怎麼多,而且C++的代碼對於一般的生物學同學都比較難搞,所以其實將SwathMS底層的C++代碼全部改成Python或者是Java的代碼是一個不錯的想法.後面我也會嘗試將其中的模塊一個一個改為Python和Java兩種編程語言.
OpenMS的底層依賴就是這麼多,到OpenSwath的上層代碼,這一層主要包含了四大模塊.
1. 圖譜提取解析模塊
這個模塊主要用於將mzML或者mzXML等原始數據格式的文件中的數據做卷積合併處理,其中包括循環掃描,卷積合併,噪音數據處理等
2. 偽肽段生成模塊
偽肽段的設計是SwathMS演算法中一個非常關鍵的思想理念,通過偽肽段的設計可以提高最終分析出的真肽段的可靠性,偽肽段生成演算法主要包括隨機打亂,倒置,偽倒置,平移等生成手法
3. 數據分析模塊
該模塊是這四個模塊中最為核心的模塊,通過已經提取好的圖譜,目標肽段數據集,偽肽段數據集這些信息進行打分,總共有三大類9中打分方式
3.1 基於色譜的打分
3.1.1 Cross-Correlation Score
3.1.2 Intensity Score
3.1.3 Signal-to-noise Score
3.2 基於標準庫打分
3.2.1 Relative Intensity Score
3.2.2 Retention Time Score
3.3 基於光譜打分
3.3.1 Isotope Score
3.3.2 Mass Accuracy Score
3.3.3 Ion Series Score
4. RT正則化處理模塊
功能還在探索中.
這四個模塊後續我都會一一分析代碼,並且寫出總結.預計這四個模塊我都會使用Python和Java語言進行重新實現.
最後處理的打分會全部匯總到最終的TSV格式的文件中,而這個TSV的文件會作為入參被扔到PyProphet裡面,進行一個半監督的機器學習演算法.最終將多個子分數合併總結為一個總分數.而最終的肽段推測的主要依據就是這個總分數.
反思:
1. 基於OpenMS這個龐大體系構建的OpenSwath有點尾大不掉.需要瘦身,C++編寫的代碼不利於一般的生物信息學的同學進行擴展.不過OpenMS的代碼注釋還是非常詳盡的.比起PyProphet要好許多.因此如果可以將OpenSwath的相關模塊用其他語言重現,不但可以增加OpenSwath的可擴展性和可讀性,也對OpenSwath的具體演算法有一個更加深刻的理解.
2. Decoy演算法和各個Sub Score的打分演算法有許多可以改良的地方.在具體閱讀完代碼以後可以做進一步的改造工作
3. 數據集這部分的可復用性太差,對於生成各類中間格式的文件有大量無用的重複數據.完全可以通過引入資料庫的方法來提高數據的可操作性.
4. PyProphet演算法引入的半監督學習演算法可以嘗試用最新的神經網路進行處理.或許可以得到更好的結果
推薦閱讀:
※自然界的負責爸爸們
※從花園到餐桌,草莓如何被人類逼成了「最臟蔬果」?
※這看臉的世道沒法混了,連蚊子都偏愛高顏值的人!
※琥珀,不僅藏著恐龍,還藏了只0.99億歲的蛇妖?!
※生物學家警惕地球處於第六次大滅絕早期階段|地球|大滅絕