biopython解析mmcif文件得到组装体、链、序列、原子坐标、变换矩阵等信息

news/2024/9/28 22:02:19/

使用 Biopython 解析 .mmCIF 文件可以提取出蛋白质结构的相关信息,包括模型(model)、链(chain)、序列、原子坐标以及可能存在的变换矩阵。以下是一个完整的示例代码,展示如何使用 Biopython 的 MMCIFParser 解析 .mmCIF 文件,并提取这些信息。

示例代码

from Bio.PDB import MMCIFParser
from Bio.SeqUtils import seq1
import numpy as np# 解析 mmCIF 文件
def parse_mmcif(file_path):parser = MMCIFParser(QUIET=True)structure = parser.get_structure('structure', file_path)models_data = []for model in structure:model_data = {'model_id': model.id, 'chains': []}for chain in model:chain_data = {'chain_id': chain.id, 'residues': [], 'atoms': []}for residue in chain:if residue.id[0] == ' ':  # 确保是标准残基try:# 提取序列信息,使用 seq1 函数将三字母代码转换为单字母代码seq_residue = seq1(residue.resname)except KeyError:seq_residue = 'X'  # 若不能转换为单字母代码,则用 'X' 表示chain_data['residues'].append(seq_residue)for atom in residue:# 提取原子坐标coord = atom.coordatom_data = {'atom_name': atom.name,'coord': coord}chain_data['atoms'].append(atom_data)model_data['chains'].append(chain_data)models_data.append(model_data)return models_data# 解析变换矩阵
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/.cif/file'# 解析结构信息
structure_data = parse_mmcif(file_path)
for model in structure_data:print(f"Model ID: {model['model_id']}")for chain in model['chains']:print(f"  Chain ID: {chain['chain_id']}")print(f"  Sequence: {''.join(chain['residues'])}")for atom in chain['atoms'][:5]:  # 打印前5个原子坐标print(f"    Atom: {atom['atom_name']}, Coord: {atom['coord']}")# 解析变换矩阵信息
transformation_matrices = parse_transformation_matrices(file_path)
for i, matrix in enumerate(transformation_matrices):print(f"Transformation Matrix {i+1}:\n{matrix}")

代码说明:

  1. 结构解析部分:

    • 使用 MMCIFParser 解析 .mmCIF 文件,遍历每个模型(model)和链(chain),提取残基的序列以及原子的坐标。
    • Bio.SeqUtils 模块中的 seq1 函数,它也可以将三字母的氨基酸代码转换为单字母代码: eq1(residue.resname) 。
    • 通过遍历原子来获取坐标。
  2. 变换矩阵解析部分:

    • 变换矩阵的解析是通过读取文件并根据关键字 _pdbx_struct_oper_list.matrix 提取相关信息。变换矩阵通常以3x3的形式给出。

输出:

  • 会输出模型的 ID、链 ID、序列和部分原子坐标。
  • 如果存在变换矩阵,也会输出每个变换矩阵。

http://www.ppmy.cn/news/1531636.html

相关文章

解决iPhone无法有效响应问题的指南

当您触摸、滑动和点击屏幕时,iPhone 没有响应或屏幕冻结是很烦人的。不可否认,iPhone 是最好的智能手机之一,但它并不完美。触摸屏冻结是 iPhone 用户面临的最常见问题之一。 好消息是,这个问题通常是由软件错误而不是硬件损坏引…

volatile关键字最全原理剖析

介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性。 volatile的作用: 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是…

WEB领域是不是黄了还是没黄

进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是…

计算机视觉中的2D变换:用Python让图像‘动’起来

嘿,小伙伴们!今天我们要聊的是计算机视觉中的2D变换——那些能让图像‘动’起来的技术。无论你是初学者还是资深开发者,这篇文章都将带你深入了解2D变换,并通过Python代码实战演示。准备好了吗?让我们开始吧&#xff0…

关于QSizeGrip在ui界面存在布局的情况下的不显示问题

直接重写resizeEvent你会发现:grip并没有显示 void XXXXX::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);this->m_sizeGrip->move(this->width() - this->m_sizeGrip->width() - 3,this->height() - this->m_sizeGrip->…

【FPGA】编程方式

FPGA编程方式 1 什么是PLD?2 什么是颗粒度?3 可编程逻辑器件的编程方式有哪些?3.1 SRAM 编程技术3.2 Flash/EEPROM 编程技术3.3 反熔丝编程技术3.4 编程技术比较 参考资料 1 什么是PLD? 可编程逻辑器件 英文全称为:pr…

Docker部署MongoDB教程

嘿,大家好!今天我在三丰云免费服务器上进行了一次激动人心的MongoDB部署测试。这款免费云服务器1核CPU、1G内存、10G硬盘、5M带宽,是不错的免费服务器选择。 首先,让我们简要介绍一下使用到的Docker和MongoDB软件。Docker是一个开…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型,表示真或假true, false用于条件判断,例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…