2017-06-15 62 views
0

我有一個序列比對爲:重新編號殘基biopython

RefSeq  :MXKQRSLPLXQKRTKQAISFSASHRIYLQRKFSH ..... 

Templatepdb:-----------------ISFSASHR------FSHAQADFAG 

我想寫的是重號基於在PDB文件這對準作爲殘留代碼:

原始pdb:RES ID = 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 ...

新的pdb:RES ID = 18 18 18 19 19 19 19 19 20 20 20 21 21 22 23 24 25 31 31 31 31 32 32 33 34 35 36 ...

如果對齊僅在對齊開始時有間隙,很容易弄清楚。只計算空位(「 - 」)並將空位的總和加到殘基上。「=」空位之和「」「

但是,如果序列中間存在空位,我找不到方法。

你有什麼建議嗎?

回答

2

如果我理解正確的話,

你的輸入是取向:

'-----------------ISFSASHR------FSHAQADFAG' 

和殘留號碼的清單:

[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 18, 18, 18, 18] 

而且你的輸出是轉移了剩餘數殘留前空位數目:

[18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 32, 32, 32, 33, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 41, 41, 41, 41] 

下面是演示它的代碼。有很多方法可以計算輸出。

我這樣做的方式是保留一個字典shift_dict作爲原始數字和值作爲移位的數字。

import itertools 
import random 


def random_residue_number(sequence): 
    nested = [[i + 1] * random.randint(1, 10) for i in range(len(sequence))] 
    merged = list(itertools.chain.from_iterable(nested)) 
    return merged 


def aligned_residue_number(alignment, original_number): 
    gap_shift = 0 
    residue_count = 0 
    shift_dict = {} 
    for residue in alignment: 
     if residue == '-': 
      gap_shift += 1 
     else: 
      residue_count += 1 
      shift_dict[residue_count] = gap_shift + residue_count 
    return [shift_dict[number] for number in original_number] 


sequence = 'ISFSASHRFSHAQADFAG' 
alignment = '-----------------ISFSASHR------FSHAQADFAG' 
original_number = random_residue_number(sequence) 
print(original_number) 
# [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 18, 18, 18, 18] 
new_number = aligned_residue_number(alignment, original_number) 
print(new_number) 
# [18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 32, 32, 32, 33, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 41, 41, 41, 41] 
+0

非常感謝,得到這個new_number列表後,你有沒有建議用.pdb文件中的殘基數字替換? – ggokturk

+0

查看Biopython的[Bio.PDB](http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc149)模塊,它可以幫助您。您也可以編寫自己的解析器,根據[PDB規範](https://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html)解析ATOM部分。 – azalea