Bio.PDB是Biopython中处理生物大分子晶体结构的模块。除了别的类之外,Bio.PDB包含PDBParser类,此类能够产生一个Structure对象,以一种较方便的方式获取文件中的原子数据。只是在处理PDB文件头所包含的信息时,该类有一定的局限性。

【学习】

https://zhuanlan.zhihu.com/p/564677699

https://biopython-cn.readthedocs.io/zh_CN/latest/cn/chr11.html

from Bio.PDB.PDBParser import PDBParser
>>> p = PDBParser(PERMISSIVE=1)

通过 PDBParser 解析PDB文件,就产生了Structure对象

在此例子中,PDB文件为’pdb1fat.ent’,’1fat’是用户定义的结构名称

structure_id = "1fat"
>>> filename = "pdb1fat.ent"
>>> s = p.get_structure(structure_id, filename)

解析pdb文件

没有创建 Structure 对象的时候,也可以创建这个字典,比如直接从PDB文件创建:

>>> file = open(filename,'r')
>>> header_dict = parse_pdb_header(file)
>>> file.close()

get_header 和 get_trailer 方法来提取PDB文件中的文件头和文件尾(简单的字符串列表)。

许多PDB文件头包含不完整或错误的信息。许多错误在等价的mmCIF格式文件中得到修正。

与PDB文件的情形类似,先创建一个 MMCIFParser 对象:

>>> from Bio.PDB.MMCIFParser import MMCIFParser
>>> parser = MMCIFParser()

然后用这个解析器从mmCIF文件创建一个结构对象:

>>> structure = parser.get_structure('1fat', '1fat.cif')

为了尽量少访问mmCIF文件,可以用 MMCIF2Dict 类创建一个Python字典来将所有mmCIF文件中各种标签映射到其对应的值上。若有多个值(像 _atom_site.Cartn_y 标签,储存的是所有原子的*y*坐标值),则这个标签映射到一个值列表。从mmCIF文件创建字典如下:

>>> from Bio.PDB.MMCIF2Dict import MMCIF2Dict
>>> mmcif_dict = MMCIF2Dict('1FAT.cif')

例:从mmCIF文件获取溶剂含量:

>>> sc = mmcif_dict['_exptl_crystal.density_percent_sol']

例:获取包含所有原子*y*坐标的列表:

>>> y_list = mmcif_dict['_atom_site.Cartn_y']


一个 Structure 对象的整体布局遵循称为SMCRA(Structure/Model/Chain/Residue/Atom,结构/模型/链/残基/原子)的体系架构:

  • 结构由模型组成
  • 模型由多条链组成
  • 链由残基组成
  • 多个原子构成残基

结构,模型,链,残基都是实体基类的子类。原子类仅仅(部分)实现了实体接口(因为原子类没有子类)。

对于每个实体子类,你可以用该子类的一个唯一标识符作为键来提取子类(比如,可以用原子名称作为键从残基对象中提取一个原子对象;用链的标识符作为键从域对象中提取链)

child_entity = parent_entity[child_id]
child_list = parent_entity.get_list()  对象获得所有子实体的列表
parent_entity = child_entity.get_parent()

在SMCRA的所有层次水平,你还可以提取一个 完整id 。完整id是包含所有从顶层对象(结构)到当前对象的id的一个元组。一个残基对象的完整id可以这么得到:

>>> full_id = residue.get_full_id()
>>> print full_id
("1abc", 0, "A", ("", 10, "A"))

  • id为”1abc”的结构
  • id为0的模型
  • id为”A”的链
  • id为(” “, 10, “A”)的残基


残基常用:

 residue.get_resname()       # returns the residue name, e.g. "ASN"
>>> residue.is_disordered()     # returns 1 if the residue has disordered atoms
>>> residue.get_segid()         # returns the SEGID, e.g. "CHN1"
>>> residue.has_id(name)        # test if a residue has a certain atom

 原子常用:

>>> a.get_name()       # atom name (spaces stripped, e.g. "CA")
>>> a.get_id()         # id (equals atom name)
>>> a.get_coord()      # atomic coordinates
>>> a.get_vector()     # atomic coordinates as Vector object
>>> a.get_bfactor()    # isotropic B factor
>>> a.get_occupancy()  # occupancy
>>> a.get_altloc()     # alternative location specifier
>>> a.get_sigatm()     # standard deviation of atomic parameters
>>> a.get_siguij()     # standard deviation of anisotropic B factor
>>> a.get_anisou()     # anisotropic B factor
>>> a.get_fullname()   # atom name (with spaces, e.g. ".CA.")

get_vector 方法会返回一个代表 Atom 对象坐标的 Vector 对象,可以对原子坐标进行向量运算。 Vector 实现了完整的三维向量运算、矩阵乘法(包括左乘和右乘)和一些高级的、与旋转相关的操作。

举个Bio.PDB的 Vector 模块功能的例子,假设你要查找Gly残基的Cβ原子的位置,如果存在的话。将Gly残基的N原子沿Cα-C化学键旋转-120度,能大致将其放在一个真正的Cβ原子的位置上。使用 Vector 模块中的``rotaxis`` 方法(能用来构造一个绕特定坐标轴的旋转):

# get atom coordinates as vectors
>>> n = residue['N'].get_vector()
>>> c = residue['C'].get_vector()
>>> ca = residue['CA'].get_vector()
# center at origin
>>> n = n - ca
>>> c = c - ca
# find rotation matrix that rotates n
# -120 degrees along the ca-c vector
>>> rot = rotaxis(-pi * 120.0/180.0, c)
# apply rotation to ca-n vector
>>> cb_at_origin = n.left_multiply(rot)
# put on top of ca atom
>>> cb = cb_at_origin+ca

对pdb 操作的代码:

解析PDB文件,提取一些Model、Chain、Residue和Atom对象
>>> from Bio.PDB.PDBParser import PDBParser
>>> parser = PDBParser()
>>> structure = parser.get_structure("test", "1fat.pdb")
>>> model = structure[0]
>>> chain = model["A"]
>>> residue = chain[1]
>>> atom = residue["CA"]迭代遍历一个结构中的所有原子
>>> p = PDBParser()
>>> structure = p.get_structure('X', 'pdb1fat.ent')
>>> for model in structure:
...     for chain in model:
...         for residue in chain:
...             for atom in residue:
...                 print atom
...有个快捷方式可以遍历一个结构中所有原子:>>> atoms = structure.get_atoms()
>>> for atom in atoms:
...     print atom
...类似地,遍历一条链中的所有原子,可以这么做:>>> atoms = chain.get_atoms()
>>> for atom in atoms:
...     print atom
...遍历模型中的所有残基
或者,如果你想遍历在一条模型中的所有残基:>>> residues = model.get_residues()
>>> for residue in residues:
...     print residue
...你也可以用 Selection.unfold_entities 函数来获取一个结构的所有残基:>>> res_list = Selection.unfold_entities(structure, 'R')或者获得链上的所有原子:>>> atom_list = Selection.unfold_entities(chain, 'A')明显的是, A=atom, R=residue, C=chain, M=model, S=structure 。你可以用这种标记返回层次中的上层,如从一个 Atoms 列表得到(唯一的) Residue 或 Chain 父类的列表:>>> residue_list = Selection.unfold_entities(atom_list, 'R')
>>> chain_list = Selection.unfold_entities(atom_list, 'C')


获取结构的序列

从 Polypeptide 对象获得。该序列表示为一个Biopython Seq 对象,它的字母表由 ProteinAlphabet 对象来定义。

例子:

>>> seq = polypeptide.get_sequence()



还有关于分析结构【度量两个原子的距离、扭转角等等】

biopython----bio.PDB相关推荐

  1. matlab读取pdb文件,使用BioPython读取.pdb文件的整个目录

    我最近的任务是在python中编写一个程序,找到距离.pdb(蛋白质数据库)蛋白质中每种金属2埃范围内的原子.这是我为它写的脚本. from Bio.PDB import * parser = PDB ...

  2. 使用Biopython解析PDB结构

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文件读取 结构的表示 随缘更新后续内容 文件读取 导入PDBParser读取本地pdb文件 >>> fro ...

  3. PDB Database - AlphaFold DB PDB 数据集的多维度分析与整理 (2)

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/13 ...

  4. Biopython使用4:PDB结构

    Biopython 第十一章:走向3D:PDB模块 PDBParser和MMCIFParser PDBParser 解析器 使用p=PDBParser(参数)来构建一个PDB解释器. 接收以下参数 ( ...

  5. python中利用biopython和dssp提取pdb文件中的二级结构

    以CASP11数据集为例,选取domain中的pdb数据作为转换: 在python中,安装biopython包和dssp包 pip3 install biopython conda install - ...

  6. Biopython+python 自动化分析蛋白质pdb文件,输出id,序列以及作用位点

    项目包含两部分,自定义函数和主体 主体部分 import numpy as np from Bio.PDB import * from Bio import PDB import os import ...

  7. 使用python(Biopandas和Biopython)对蛋白质结构文件PDB进行修改

    使用python(Biopandas)对蛋白质结构文件PDB进行修改 所需环境 python3.x biopandas biopython 读取PDB 读取PDB from biopandas.pdb ...

  8. biopython 【1】简单介绍【常用板块、安装】

    [学习]https://blog.csdn.net/weixin_43569478/article/details/111714256 Biopython工程是一个使用Python来开发计算分子生物学 ...

  9. 溶剂可及性(三)dssp和biopython

    原文链接:溶剂可及性(三)dssp和biopython 关于DSSP的安装教程有很多,方式也不尽相同,这里我介绍一种个人觉得最便利的方法,通过anaconda安装相关库: conda install ...

最新文章

  1. 华工计算机考研上机,08华工计算机应用复试全过程_跨考网
  2. Window 下 Redis 安装
  3. 2017,AI偏见为何如此受关注?
  4. iOS开发UI中懒加载的使用方法
  5. SQL 判断两个时间段是否有交叉
  6. 分享42个超棒的智能手机摄影画廊
  7. python Intel Realsense D435 图像自动采集程序 自动剔除模糊图像
  8. [CF1036C]Classy Numbers
  9. ZABBIX监控JAVA日志文件
  10. cocos creator 打包apk_cocos creator android 编译踩坑
  11. PAT甲级1017 (模拟排序)
  12. Git学习(四)标签管理
  13. ios时间相差多少天_iOS 时间戳和时间互换,计算两日期相隔天数
  14. 虚拟机安装MySQL教程
  15. maya导入abc动画_UE4 Alembic 动画资产流程的整理
  16. android微信代码大全,微信隐藏代码大全,99%的人都不知道
  17. POI Excel设置列宽
  18. 【毕业论文写作】毕业论文任务书怎么写?
  19. win7快速启动栏计算机,win7快速启动栏,教您Win7如何添加快速启动栏
  20. [经验]零线和地线的区别,不注意可是要出大事的哦!

热门文章

  1. CCNP13:QOS【分类、队列、标记、丢弃】技术
  2. 关于Spark的部署yarn模式
  3. ubuntu硬件测试
  4. 【翻译】CVPR2022: Pyramid Grafting Network for One-Stage High ResolutionSaliency Detection
  5. 计算机专业专科可以进的国企,专科学这四个专业!考国企、事业编制会容易很多...
  6. python电子章_python二级电子教案 第2章 Python语言基本语法元素
  7. 抱薪者说 | 卫斯理:出发,从“好玩”开始
  8. 项目规范,介绍,规划与搭建,模块化开发,网站favicon,网站TDK
  9. (三)Linux 4G模块实现短信发送的两种格式(Text和PDU)
  10. 【学习笔记15】JavaScript的函数