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 文件并提取每个组装体的变换矩阵。函数返回一个包含所有组装体变换的列表,每个元素是一个元组,包含旋转矩阵和平移向量。
变换矩阵的含义
- 旋转矩阵:表示如何旋转链来形成组装体。
- 平移向量:表示在旋转的基础上,链的三维坐标应如何平移。
这些变换矩阵可以用来将单个链或亚基的局部坐标变换为蛋白质复合体的整体坐标,从而得到完整的蛋白质结构。