当前位置: 首页 > article >正文

biopython提取.cif文件的变换矩阵

蛋白质符合体结构中包含旋转矩阵和平移向量信息。要从 .mmCIF 文件中提取变换矩阵,可以解析文件中存储的 struct_oper 列表。.mmCIF 文件通常包含变换矩阵用于描述不同生物学组装、对称操作等。变换矩阵的信息通常存储在 _pdbx_struct_oper_list 标签下,例如 _pdbx_struct_oper_list.matrix[1][1] 对应矩阵的某个元素。

下面是一个解析 .mmCIF 文件中变换矩阵的代码示例:

from Bio.PDB import MMCIF2Dict
import numpy as np

# 解析变换矩阵
def parse_transformation_matrices(file_path):
    # 使用 MMCIF2Dict 解析 mmCIF 文件
    cif_dict = MMCIF2Dict.MMCIF2Dict(file_path)
    
    # 提取变换矩阵信息
    matrices = []
    
    # 如果 mmCIF 文件包含变换矩阵,则从 _pdbx_struct_oper_list 中提取
    if '_pdbx_struct_oper_list.matrix[1][1]' in cif_dict:
        n_matrices = len(cif_dict['_pdbx_struct_oper_list.matrix[1][1]'])  # 矩阵数量
        
        for i in range(n_matrices):
            # 提取矩阵元素,按行存储
            matrix = np.array([
                [
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[1][1]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[1][2]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[1][3]'][i])
                ],
                [
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[2][1]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[2][2]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[2][3]'][i])
                ],
                [
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[3][1]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[3][2]'][i]),
                    float(cif_dict[f'_pdbx_struct_oper_list.matrix[3][3]'][i])
                ]
            ])
            
            # 提取平移向量
            translation = np.array([
                float(cif_dict[f'_pdbx_struct_oper_list.vector[1]'][i]),
                float(cif_dict[f'_pdbx_struct_oper_list.vector[2]'][i]),
                float(cif_dict[f'_pdbx_struct_oper_list.vector[3]'][i])
            ])
            
            matrices.append({'matrix': matrix, 'translation': translation})
    
    return matrices

# 示例调用
file_path = '/path/to/8p0j.cif'

# 解析变换矩阵信息
transformation_matrices = parse_transformation_matrices(file_path)

# 打印解析的变换矩阵和平移向量
for i, transform in enumerate(transformation_matrices):
    print(f"Transformation Matrix {i+1}:\n{transform['matrix']}")
    print(f"Translation Vector {i+1}:\n{transform['translation']}")

解析步骤说明:

  1. 使用 MMCIF2Dict

    • MMCIF2Dict 是 Biopython 的一个功能,它会将 .mmCIF 文件解析成一个字典。字典中的键是 .mmCIF 标签,值是对应的内容。
    • 在 .mmCIF 文件中,变换矩阵通常以 _pdbx_struct_oper_list.matrix[n][m] 和 _pdbx_struct_oper_list.vector[n] 的形式出现,分别表示矩阵的元素和平移向量。
  2. 提取变换矩阵和平移向量

    • 每个矩阵是一个 3x3 的矩阵,元素通过不同的标签(如 _pdbx_struct_oper_list.matrix[1][1])来获取。
    • 平移向量通过 _pdbx_struct_oper_list.vector[n] 获取。

输出结果及解释:

Transformation Matrix 1:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
Translation Vector 1:
[0. 0. 0.]

提取出的变换矩阵为单位矩阵(Transformation Matrix 1: [[1. 0. 0.], [0. 1. 0.], [0. 0. 1.]])且平移向量(Translation Vector 1: [0. 0. 0.])为零,表示此情况下并没有对坐标进行任何变换。因此,单体的坐标就是复合体中的坐标。

解释:

  • 单位矩阵[[1. 0. 0.], [0. 1. 0.], [0. 0. 1.]])是一个不对坐标进行旋转或缩放的矩阵,意味着坐标保持不变。
  • 平移向量[0. 0. 0.])表示没有任何位移发生,因此原点保持不变。

因此,单体的坐标不会因为这组变换矩阵而改变,复合体中的单体坐标和单体自身的坐标一致。这种情况下,复合体可能只是一个由多个单体构成的集合,且这些单体的相对位置没有通过任何变换(旋转、平移)发生变化。


http://www.kler.cn/news/316357.html

相关文章:

  • spring全家桶使用教程
  • Kotlin 操作符 in 的基本使用(十)
  • docker存储
  • 2.《DevOps》系列K8S部署CICD流水线之部署NFS网络存储与K8S创建StorageClass
  • 2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序
  • Python基础学习(3)
  • SpinalHDL之结构(二)
  • rabbitmq整合skywalking并编写自定义插件增强
  • 超详图解 Apache HTTP Server(httpd)安装与验证
  • 设计模式 享元模式(Flyweight Pattern)
  • 『功能项目』QFrameWorkBug修改器界面【65】
  • 数据结构(十四)——HashMap与HashSet(OJ题)
  • Git 提交规范
  • Flyway 数据库差异处理
  • 机器人速度雅可比矩阵求解(2自由度平面关节机器人)
  • Perl 进程管理
  • 【Nginx-Location-Root】最终访问的路径是 root/$uri
  • 程序员锤炼核心竞争力的五重策略
  • 《Linux基础》练习操作
  • Redis中的setnx的使用场景
  • 2024年中国科技核心期刊目录(自然科学卷)科技统计源核心(续)
  • 网络通信——路由器、交换机、集线器(HUB)
  • 【深度学习】(5)--搭建卷积神经网络
  • 【matlab】读取rhd文件格式,intan脑电采集开源代码
  • go语言 结构体
  • 签署《AI安全国际对话威尼斯共识》 智源持续推动人工智能安全发展
  • CAN总线通信协议(基础)
  • day-58 最佳观光组合
  • JS中的for...in和for...of有什么区别?
  • MySQL篇(存储过程 触发器 存储函数)(持续更新迭代)