在 py-mmcif 包中,pdbx_struct_assembly
、pdbx_struct_assembly_gen
和 pdbx_struct_oper_list
是三种常用的 mmCIF 数据对象,主要用于处理蛋白质结构的装配(assembly)信息。这些对象可以帮助我们解析和获取与蛋白质结构中分子装配相关的数据,包括装配的详细信息、链、矩阵操作等。
使用示例:
from mmcif.io.PdbxReader import PdbxReader
import gzip
import numpy as np
# 定义解析函数
def parseAssemblies(data):
assemblies = []
# 获取装配信息
assembly_data = data.getObj("pdbx_struct_assembly")
assembly_gen = data.getObj("pdbx_struct_assembly_gen")
oper_list = data.getObj("pdbx_struct_oper_list")
if assembly_data is None or assembly_gen is None or oper_list is None:
return assemblies
# 保存所有基础变换
opers = {}
for k in range(oper_list.getRowCount()):
key = oper_list.getValue("id", k)
val = np.eye(4)
for i in range(3):
val[i, 3] = float(oper_list.getValue(f"vector[{i+1}]", k))
for j in range(3):
val[i, j] = float(oper_list.getValue(f"matrix[{i+1}][{j+1}]", k))
opers[key] = val
# 解析每个装配
for index in range(assembly_gen.getRowCount()):
assembly_id = assembly_gen.getValue("assembly_id", index)
oper_expression = assembly_gen.getValue("oper_expression", index)
asym_id_list = assembly_gen.getValue("asym_id_list", index)
# 解析操作表达式并获取矩阵
oper_ids = [op.strip() for op in oper_expression.split(',')]
transform_matrices = [opers[op] for op in oper_ids]
# 组装信息
assembly_info = {
"assembly_id": assembly_id,
"chains": asym_id_list,
"transform_matrices": transform_matrices
}
assemblies.append(assembly_info)
return assemblies
# 打开 mmCIF 文件
cif_file_path = '/path/to/your/file.cif.gz'
data = []
with gzip.open(cif_file_path, 'rt') as cif:
reader = PdbxReader(cif)
reader.read(data)
# 提取第一个数据块
data = data[0]
# 调用解析函数
assemblies = parseAssemblies(data)
# 打印装配信息
for assembly in assemblies:
print(f"Assembly ID: {assembly['assembly_id']}")
print(f"Chains: {assembly['chains']}")
for i, matrix in enumerate(assembly['transform_matrices']):
print(f"Transform Matrix {i+1}:\n{matrix}")
结论:
pdbx_struct_assembly
保存了蛋白质结构的装配信息,包括装配方法和详细描述。pdbx_struct_assembly_gen
记录了特定装配的生成方式,例如操作表达式和涉及的链。pdbx_struct_oper_list
包含了用于生成装配的对称操作的详细矩阵信息。
这些对象结合使用,可以帮助我们解析蛋白质结构中的装配体,并获得相关的变换矩阵和元数据。