2017-04-04 8 views
0

목표 : PDB의 두 체인을 Biopython을 사용하여 병합해야합니다. 다음 예제에서는 하나의 사슬로 병합 할 수 있습니다 코드의이 라인 PDB의 두 체인을 병합하는 동안 PDB 파일에서 'TER'키워드 제거

ATOM 1133 N VAL A 100  12.484 -30.583 106.831 1.00 30.28   N 
ATOM 1134 CA VAL A 100  11.430 -31.194 106.033 1.00 34.41   C 
ATOM 1135 C VAL A 100  11.985 -32.402 105.259 1.00 39.25   C 
ATOM 1136 O VAL A 100  11.248 -33.126 104.568 1.00 46.37   O 
ATOM 1137 CB VAL A 100  10.822 -30.174 105.029 1.00 35.16   C 
ATOM 1138 CG1 VAL A 100  10.159 -29.020 105.767 1.00 36.95   C 
ATOM 1139 CG2 VAL A 100  11.865 -29.669 104.007 1.00 30.60   C 
TER 
ATOM 1141 N GLU B 1  12.344 -43.792 102.987 1.00 64.25   N 
ATOM 1142 CA GLU B 1  11.253 -42.785 103.240 1.00 66.15   C 
ATOM 1143 C GLU B 1  11.742 -41.350 102.948 1.00 65.40   C 
ATOM 1144 O GLU B 1  12.011 -40.595 103.895 1.00 65.31   O 
ATOM 1145 CB GLU B 1  10.779 -42.877 104.712 1.00 67.04   C 

C.

에 두 개의 체인을 A와 B를 병합하려는하지만 그들은 TER 키워드를 제거 할 수 없습니다.
merged_chains=['A', 'B'] 
new_rsd_num = 1 
for model in structure: 
    for chain in model: 
    if chain.id in merged_chains: 
     chain.id = 'C' 
     for residue in chain: 
     residue.id = (' ', new_rsd_num, ' ') 
     new_rsd_num += 1 

코드 세트

두 체인 사이 TER 키워드가 포함되어 다음과 같은 출력을 생성합니다.

... 
ATOM 1133 N VAL C 100  12.484 -30.583 106.831 1.00 30.28   N 
ATOM 1134 CA VAL C 100  11.430 -31.194 106.033 1.00 34.41   C 
ATOM 1135 C VAL C 100  11.985 -32.402 105.259 1.00 39.25   C 
ATOM 1136 O VAL C 100  11.248 -33.126 104.568 1.00 46.37   O 
ATOM 1137 CB VAL C 100  10.822 -30.174 105.029 1.00 35.16   C 
ATOM 1138 CG1 VAL C 100  10.159 -29.020 105.767 1.00 36.95   C 
ATOM 1139 CG2 VAL C 100  11.865 -29.669 104.007 1.00 30.60   C 
TER 
ATOM 1141 N GLU C 101  12.344 -43.792 102.987 1.00 64.25   N 
ATOM 1142 CA GLU C 101  11.253 -42.785 103.240 1.00 66.15   C 
ATOM 1143 C GLU C 101  11.742 -41.350 102.948 1.00 65.40   C 
ATOM 1144 O GLU C 101  12.011 -40.595 103.895 1.00 65.31   O 
ATOM 1145 CB GLU C 101  10.779 -42.877 104.712 1.00 67.04   C 
... 

그러나 TER 키워드를 제거해야하는 출력이 이어져야합니다.

... 
ATOM 1133 N VAL C 100  12.484 -30.583 106.831 1.00 30.28   N 
ATOM 1134 CA VAL C 100  11.430 -31.194 106.033 1.00 34.41   C 
ATOM 1135 C VAL C 100  11.985 -32.402 105.259 1.00 39.25   C 
ATOM 1136 O VAL C 100  11.248 -33.126 104.568 1.00 46.37   O 
ATOM 1137 CB VAL C 100  10.822 -30.174 105.029 1.00 35.16   C 
ATOM 1138 CG1 VAL C 100  10.159 -29.020 105.767 1.00 36.95   C 
ATOM 1139 CG2 VAL C 100  11.865 -29.669 104.007 1.00 30.60   C 
ATOM 1141 N GLU C 101  12.344 -43.792 102.987 1.00 64.25   N 
ATOM 1142 CA GLU C 101  11.253 -42.785 103.240 1.00 66.15   C 
ATOM 1143 C GLU C 101  11.742 -41.350 102.948 1.00 65.40   C 
ATOM 1144 O GLU C 101  12.011 -40.595 103.895 1.00 65.31   O 
ATOM 1145 CB GLU C 101  10.779 -42.877 104.712 1.00 67.04   C 
... 

BioPython을 사용하여 TER 키워드를 삭제 하시겠습니까?

답변

1

잔류 물은 여전히 ​​체인 객체에 속합니다. 즉, id을 덮어 쓸 때 체인 A에 속하는 잔기의 수가 변경되지 않습니다.

당신은 체인 A를 체인 B에서 잔류 물을 추가 한 다음 체인 B를 삭제할 수

#read a PDB file with two chains 
from Bio import PDB 
pdbl = PDB.PDBList() 
pdbl.retrieve_pdb_file('5K04') 
parser = PDB.PDBParser() 
structure = parser.get_structure('5K04', pdbl.local_pdb + '/k0/pdb5k04.ent') 

#get all chains 
chains = list() 
for model in structure: 
    for chain in model: 
    chains.append(chain) 

#get the id of the last residue in the first chain 
len_chain_a = int(chains[0].get_unpacked_list()[-1].id[1]) + 1 

#get all residues from the 2nd chain 
for i, residue in enumerate(chains[1].get_residues()): 
    old_id = list(residue.id) 
    old_id[1] = len_chain_a + i 
    #increment the id 
    residue.id = tuple(old_id) 
    #add the residue to the first chain 
    chains[0].add(residue) 

#now delete all chains but the first 
for model in structure: 
    for chain in model: 
     if chain.id != 'A': 
      model.detach_child(chain.id) 

#save the merged chains 
pdb_io = PDB.PDBIO() 
pdb_io.set_structure(structure) 
pdb_io.save('5k04_merged.pdb')