• 沒有找到結果。

蛋白質表面搜尋、擷取演算法

在文檔中 中 華 大 學 (頁 47-52)

在本章節,我們將描述蛋白質表面結構擷取的演算法。假設輸入的資料是由解析 PDB 檔案、擷取出蛋白質組成原子的資料後,並為每個原子指定凡德瓦半徑、CPK 原 子的顏色,所得到的蛋白質組成原子之集合 P (包含原子名稱、代號、座標、半徑、

CPK 顏色等)、及α-Ball 的半徑α,我們將搜尋出滾動α-Ball、接觸到表面原子時,

所有α-Ball 的停駐位置,及所有被α-Ball 接觸到、被探測為表面原子的原子資料。

Algorithm Explore_Alpha_Surface()包含了我們演算法的概念,我們將進一步說明這幾 個部分的目的。

Algorithm Explore_Alpha_Surface( P, α, S )

/* Input: the atoms set P of protein and α-Ball radius α */

/* Output: the set S of surface atoms and α-Balls that construct the α-Surface */

Begin

1. Initialize_Under_Expanded_Queue( Q )

2. Extract_First_Alpha_Surface_Atom( P, α, Q ) 3. Expand_Alpha_Surface( P, α, Q, S )

End

演算法中,第一個部分Initialize_Under_Expanded_Queue( Q )將建立、初始一個佇 列(Queue)Q,用來儲存等待擴展之表面原子及接觸到此原子時之α-Ball 的資料。第二 個部分Extract_First_Alpha_Surface_Atom( P, α, Q )將依定理 1 及方法 1 闡述的方法 擷取出「端點原子」做為第一個擴展、滾動出α-Surface 表原結構的起始表面原子、並

依此原子建立第一個α-Ball,再將此表面原子及α-Ball 的資料存入等待擴展的表面原 子佇列 Q 中,詳細計算方法如方法 1 中所述。假如第一個表面原子為 p0 、第一個α-Ball 的球心為 o0,我們將把(p0, o0)的資料存入 Q 中。佇列 Q 儲存等待擴展之表面原 子及α-Ball,演算法將由此佇列依序的取出資料,依我們說明的方法在每個表面原子 上滾動α-Ball、進行擷取相鄰之表面原子的動作。第三個部分 Expand_Alpha_Surface () 即是執行滾動程序以擴展表面的演算法,此演算法的說明如下:

Algorithm Expand_Alpha_Surface( P, α, Q, S )

/* Input: the atoms set P of protein, α-Ball radius α and under expanded queue Q */

/* Output: the set S of surface atoms and α-Balls that construct the α-Surface */

Begin 1. repeat

2. Take_Out_First_Atom_and_Alpha_Ball( Q, a0, o0 ) 3. Insert_Into_Alpha_Surface_Atom_Set( S, a0, o0 ) 4. Set N ← Get_Neighbors( P, α, a0 )

5. Roll_Alpha_Ball( N, α, a0, o0, S) 6. until ( no any more atom and α-Ball in Q ) End

在 Expand_Alpha_Surface()中,因為蛋白質至少包含一個原子,所以我們一定可 以 找 到 一 個 端 點 原 子 , 並 進 行 表 面 原 子 擴 展 的 動 作 。 因 此 , 這 個 演 算 法 使 用 repet…until()迴圈,直接開始擴展表面的動作。而且,因為在每個滾動過程中,

Roll_Alpha_Ball()會將尚未擴展過的表面原子及α-Ball 都加入待擴展的佇列 Q 中,所

以當 Q 中仍有表面原子及α-Ball 的資料時,即代表仍有表面原子需要繼續擴展,因此 迴圈將重複執行擴展表面的動作,直到 Q 中已經沒有資料為止,如第 6 行 until ( no any more atom and α-Ball in Q )所示。

在此 repet…until 迴圈內,首先用 Take_Out_First_Atom_and_Alpha_Ball()取出在待 擴展佇列 Q 中的第一個表面原子及α-Ball 並分別將資料儲存到 a0, o0 中,再用 Insert_Into_Alpha_Surface_Atom_Set()將從 Q 取出之表面原子 a0 及α-Ball o0 加入α-Surface 的表面結構之集合 S 中。我們在上一個章節中已經說明與起始原子的表面最小 距離小於、等於 2α的「相鄰原子」才可能在α-Ball 滾動過程中產生接觸的狀況,所 以先使用 Get_Neighbors()找出相鄰原子、限制探測的目標,再執行 Roll_Alpha_Ball() 演算法,以探測α-Ball 滾動到這些相鄰原子的狀況,並擷取出相鄰原子中屬於表面結 構的原子。Algorithm Roll_Alpha_Ball()包含了滾動α-Ball 的動作、流程,底下為此演 算法的詳細說明。

Algorithm Roll_Alpha_Ball( N, α, a0, o0, S)

/* Input: α-Ball radius α, neighbor set N of surface atom a0 and current α-Ball o0 that contacted a0 */

/* Output: the set S of atoms and α-Balls that construct the α-Surface */

Begin 1. repeat

2. Roll_Away( N , a0, o0, a1, o1 ) /* Method 2 and 4 */

3. if ( a1!=NULL and o1!=NULL ) then 4. begin

5. if ( a1∉S and a1∉Q ) then

6. Insert_Into_Under_Expanded_Queue( Q, a1, o1 ) 7. Set as ← a1

8. repeat

9. Roll_Side_by_Side( N, a0,a1,o1, a2,o2 ) /* Method 3 */

10. if ( a2!=NULL and o2!=NULL ) then 11. begin

12. if ( a2∉S and a2∉Q ) then

13. Insert_Into_Under_Expanded_Queue( Q, a2, o2 ) 14. Set a1 ← a2

15. Set o1 ← o2

16. endif

17. until ( ( a2= =as ) or ( a2= =NULL and o2= =NULL ) ) 18. endif

19. until ( check all neighbor atoms in N ) End

在 Roll_Alpha_Ball()演算法中,將利用上一章節已經說明的 2、3、4 方法來滾動 α-Ball,從相鄰原子中探測、擷取出屬於表面結構的原子。詳細計算方法敘述在方法 2、3、4 的說明章節中。

在 Roll_Alpha_Ball()第一個 repeat…until()迴圈(第 1 行~第 19 行)將整個滾動的方 法限定在測試所有相鄰原子的範圍。我們將方法 2 及方法 4 將實作在 Roll_Away()的演 算法中,首先利用平面旋轉的方式,先計算出滾動α-Ball、且使滾動角度最小的原 子。由定理 2 可得知這個原子一定屬於表面結構的原子。得到這個原子後( a1!=NULL and o1!=NULL ),再用方法 3 的程序 Roll_Side_by_Side(),以兩個原子形成的軸繼續滾

動α-Ball。Roll_Away()這個演算法中,也包含了方法 4 的實作,即除了取出最小滾動 角度的原子進行滾動,還會進一步搜尋最小滾動角度之外其餘的相鄰原子中,是否還 有其他尚未探測、且應該也屬於表面結構的原子。如果在其餘相鄰原子中發現尚未包 含、滾動到的表面原子,除了將此原子加入Q 外,也將進一步執行 Roll_Side_by_Side() 滾動α-Ball 的動作。

Roll_Away()計算出表面原子 a1及新α-Ball o1位置後(a1!=NULL and o1!=NULL),

如果此表面原子尚未經過擴展的程序( a1∉S and a1∉Q ),首先得將此原子加入待擴展 的佇列 Q 中以待後續的擴展,即執行 Insert_Into_Under_Expanded_Queue()程序,再進 行方法 3 滾動α-Ball 的程序,方法 3 擷取α-Ball 接觸到第 3 個表面原子的方法將實做 在Roll_Side_by_Side()的程序中。

利用軸來滾動α-Ball、至同時接觸到第 3 個原子的程序 Roll_Side_by_Side()將一 直重複執行,直到α-Ball 滾動回開始滾動時所接觸到的表面原子(as),或無法接觸到第 3 點時停止,此程序述序在第 7~17 行中。在此過程中,如果找到尚未經過擴展的表面 原子,同樣的會將此原子及新α-Ball 加入待擴展的佇列 Q 中,以在後續的過程繼續擴 展。

在文檔中 中 華 大 學 (頁 47-52)

相關文件