py-mmcif包解析蛋白质结构的装配信息

在 py-mmcif 包中,pdbx_struct_assemblypdbx_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}")

结论:

  1. pdbx_struct_assembly 保存了蛋白质结构的装配信息,包括装配方法和详细描述。
  2. pdbx_struct_assembly_gen 记录了特定装配的生成方式,例如操作表达式和涉及的链。
  3. pdbx_struct_oper_list 包含了用于生成装配的对称操作的详细矩阵信息。

这些对象结合使用,可以帮助我们解析蛋白质结构中的装配体,并获得相关的变换矩阵和元数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值