提取蛋白质复合体结构中组装体的变换矩阵

PDB文件中,组装体变换矩阵(assembly transformation matrices)用于描述多聚体结构中各个单体之间的相对位置和取向。从蛋白质复合体 PDB 数据中提取每个组装体(assembly)的变换矩阵,通常需要解析 PDB 文件中包含的组装体信息。这些信息存储在 PDB 文件的 REMARK 350 字段中,该字段描述了如何通过旋转和平移操作将不同的链组合成蛋白质复合体。

以下是从 PDB 文件中提取每个组装体变换矩阵的示例代码:

示例代码

我们可以使用 Bio.PDB 模块(来自 biopython)解析 PDB 文件,提取组装体信息并生成相应的旋转矩阵和平移向量。代码如下

from Bio.PDB import PDBParser
import numpy as np

def extract_transform_matrices(pdb_file):
    """
    从PDB文件中提取组装体的旋转和平移矩阵。
    
    :param pdb_file: PDB文件路径
    :return: 组装体的旋转和平移矩阵列表,按顺序返回每个组装体的旋转矩阵和对应的平移向量。
    """
    parser = PDBParser(QUIET=True)
    structure = parser.get_structure('protein', pdb_file)

    transform_matrices = []
    
    with open(pdb_file, 'r') as f:
        lines = f.readlines()
    
    current_matrix = None
    current_translation = None
    assembly_id = None
    transformations = []

    for line in lines:
        if line.startswith('REMARK 350 APPLY THE FOLLOWING TO CHAINS'):
            # 提取组装体ID
            if 'AND' in line:
                assembly_id = line.split('AND')[1].strip()
            elif 'TO CHAINS' in line:
                assembly_id = line.split('TO CHAINS')[1].strip()

        elif line.startswith('REMARK 350   BIOMT'):
            # 提取旋转和平移矩阵
            matrix_row = int(line[18]) - 1  # 行索引,从1开始
            values = list(map(float, line[23:].split()))
            if matrix_row == 0:
                current_matrix = np.zeros((3, 3))
                current_translation = np.zeros(3)

            # 将前三个值存储在旋转矩阵中
            current_matrix[matrix_row, :] = values[:3]
            # 第四个值为平移向量的一部分
            current_translation[matrix_row] = values[3]

            # 当矩阵第三行已提取完,保存结果
            if matrix_row == 2:
                transformations.append((current_matrix, current_translation))
    
    return transformations

# 示例使用
pdb_file = '/Users/zhengxueming/test/pdb_files/1a15.pdb'  # 替换为你的PDB文件路径
transform_matrices = extract_transform_matrices(pdb_file)

for i, (rotation, translation) in enumerate(transform_matrices):
    print(f"Assembly {i + 1}:")
    print("Rotation matrix:")
    print(rotation)
    print("Translation vector:")
    print(translation)
    print()

解析说明

  • REMARK 350 字段:PDB 文件的这一部分描述了组装体的构建方式,包括如何对特定链进行旋转和平移。

    • BIOMT :记录了旋转矩阵和平移向量。每个组装体的矩阵通过三行 BIOMT 记录,每一行提供了旋转矩阵的一行和对应的平移分量。
    • 旋转矩阵是一个 3x3 矩阵,平移向量是一个 3x1 向量。
  • extract_transform_matrices() 函数:解析 PDB 文件并提取每个组装体的变换矩阵。函数返回一个包含所有组装体变换的列表,每个元素是一个元组,包含旋转矩阵和平移向量。

变换矩阵的含义

  • 旋转矩阵:表示如何旋转链来形成组装体。
  • 平移向量:表示在旋转的基础上,链的三维坐标应如何平移。

这些变换矩阵可以用来将单个链或亚基的局部坐标变换为蛋白质复合体的整体坐标,从而得到完整的蛋白质结构。

相关推荐
Eiceblue8 分钟前
Python 实现Excel XLS和XLSX格式相互转换
vscode·python·pycharm·excel
Bob999816 分钟前
电脑浏览器访问华为路由器报错,无法访问路由器web界面:ERR_SSL_VERSION_OR_CIPHER_MISMATCH 最简单的解决办法!
开发语言·javascript·网络·python·网络协议·华为·ssl
alex180124 分钟前
python实现多个pdf文件合并
java·python·pdf
Linux猿32 分钟前
Pytorch Lightning框架
人工智能·pytorch·python
zhangfeng113335 分钟前
python numpy pytorch tensorlfow list 转tenser float 32的方法,模型计算基本用的都是float32,需要转换
pytorch·python·numpy
喵~来学编程啦39 分钟前
【PyTorch入门·求导相关】一文解释 PyTorch的求导 (backward、autograd.grad)
人工智能·pytorch·python
Trouvaille ~1 小时前
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
python·机器学习·数学建模·数据分析·numpy·科学计算·大数据处理
Desire.9841 小时前
Python 数学建模——ARMA 时间序列分析
python·数学建模·时间序列分析·arma
akhfuiigabv1 小时前
深入解析:联邦政策如何影响科技行业发展
人工智能·python·科技
网安詹姆斯2 小时前
网络安全(黑客技术)2024年三个月自学计划
网络·数据结构·python·mysql·安全·web安全·github