有没有办法在PDB文件中分离属于每个生物组装体的链?(python脚本)

2024-04-24 19:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在PDB文件中分离属于特定生物装配的链id。 例如,PDB ID 1BRS有3个生物组件 生物组装1:-链A和D 生物组装2:-链B和E 生物组装3:-链C和F

有没有一种方法(python脚本)将属于每个生物程序集的链id分开,如下所示 1卢比A:D 1卢比B:E 1卢比C:F 不需要提取链坐标。如果我得到连锁店的名字,那就足够了。 提前谢谢


Tags: 文件方法程序脚本id生物组件名字
1条回答
网友
1楼 · 发布于 2024-04-24 19:23:58

PDBx/mmCIF文件格式包含_pdbx_struct_assembly_gen类别中的信息。你知道吗

loop_
_pdbx_struct_assembly_gen.assembly_id 
_pdbx_struct_assembly_gen.oper_expression 
_pdbx_struct_assembly_gen.asym_id_list 
1 1 A,D,G,J 
2 1 B,E,H,K 
3 1 C,F,I,L 

这些文件可以通过我正在开发的包来读取,例如用黑云母(https://www.biotite-python.org/)。 这些类别可以用类似字典的方式阅读:

import biotite.database.rcsb as rcsb
import biotite.structure as struc
import biotite.structure.io.pdbx as pdbx

ID = "1BRS"

# Download structure
file_name = rcsb.fetch(ID, "pdbx", target_path=".")

# Read file
file = pdbx.PDBxFile()
file.read(file_name)
# Get 'pdbx_struct_assembly_gen' category as dictionary
assembly_dict = file["pdbx_struct_assembly_gen"]
for asym_id_list in assembly_dict["asym_id_list"]:
    chain_ids = asym_id_list.split(",")
    print(f"{ID}_{':'.join(chain_ids)}")

输出为

1BRS_A:D:G:J
1BRS_B:E:H:K
1BRS_C:F:I:L

G-L链只含有水分子。你知道吗

编辑:

要仅包括属于聚合物(例如蛋白质或核苷酸)的链ID,可以使用entity_poly类别:

loop_
_entity_poly.entity_id 
_entity_poly.type 
_entity_poly.nstd_linkage 
_entity_poly.nstd_monomer 
_entity_poly.pdbx_seq_one_letter_code 
_entity_poly.pdbx_seq_one_letter_code_can 
_entity_poly.pdbx_strand_id 
_entity_poly.pdbx_target_identifier 
1 'polypeptide(L)' no no 
;AQVINTFDGVADYLQTYHKLPDNYITKSEAQALGWVASKGNLADVAPGKSIGGDIFSNREGKLPGKSGRTWREADINYTS
GFRNSDRILYSSDWLIYKTTDHYQTFTKIR
;
;AQVINTFDGVADYLQTYHKLPDNYITKSEAQALGWVASKGNLADVAPGKSIGGDIFSNREGKLPGKSGRTWREADINYTS
GFRNSDRILYSSDWLIYKTTDHYQTFTKIR
;
A,B,C ? 
2 'polypeptide(L)' no no 
;KKAVINGEQIRSISDLHQTLKKELALPEYYGENLDALWDALTGWVEYPLVLEWRQFEQSKQLTENGAESVLQVFREAKAE
GADITIILS
;
;KKAVINGEQIRSISDLHQTLKKELALPEYYGENLDALWDALTGWVEYPLVLEWRQFEQSKQLTENGAESVLQVFREAKAE
GADITIILS
;
D,E,F ? 

这是更新的Python代码:

import biotite.database.rcsb as rcsb
import biotite.structure as struc
import biotite.structure.io.pdbx as pdbx

ID = "1BRS"

# Download structure
file_name = rcsb.fetch(ID, "pdbx", target_path=".")

# Read file
file = pdbx.PDBxFile()
file.read(file_name)

# Get 'entity_poly' category as dictionary
# to find out which chains are polymers
poly_chains = []
for chain_list in file["entity_poly"]["pdbx_strand_id"]:
    poly_chains += chain_list.split(",")

# Get 'pdbx_struct_assembly_gen' category as dictionary
for asym_id_list in file["pdbx_struct_assembly_gen"]["asym_id_list"]:
    chain_ids = asym_id_list.split(",")
    # Filter chains that belong to a polymer
    chain_ids = [chain_id for chain_id in chain_ids if chain_id in poly_chains]
    print(f"{ID}_{':'.join(chain_ids)}")

这是输出:

1BRS_A:D
1BRS_B:E
1BRS_C:F

相关问题 更多 >