biopython----bio.PDB
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相关推荐
- matlab读取pdb文件,使用BioPython读取.pdb文件的整个目录
我最近的任务是在python中编写一个程序,找到距离.pdb(蛋白质数据库)蛋白质中每种金属2埃范围内的原子.这是我为它写的脚本. from Bio.PDB import * parser = PDB ...
- 使用Biopython解析PDB结构
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文件读取 结构的表示 随缘更新后续内容 文件读取 导入PDBParser读取本地pdb文件 >>> fro ...
- PDB Database - AlphaFold DB PDB 数据集的多维度分析与整理 (2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/13 ...
- Biopython使用4:PDB结构
Biopython 第十一章:走向3D:PDB模块 PDBParser和MMCIFParser PDBParser 解析器 使用p=PDBParser(参数)来构建一个PDB解释器. 接收以下参数 ( ...
- python中利用biopython和dssp提取pdb文件中的二级结构
以CASP11数据集为例,选取domain中的pdb数据作为转换: 在python中,安装biopython包和dssp包 pip3 install biopython conda install - ...
- Biopython+python 自动化分析蛋白质pdb文件,输出id,序列以及作用位点
项目包含两部分,自定义函数和主体 主体部分 import numpy as np from Bio.PDB import * from Bio import PDB import os import ...
- 使用python(Biopandas和Biopython)对蛋白质结构文件PDB进行修改
使用python(Biopandas)对蛋白质结构文件PDB进行修改 所需环境 python3.x biopandas biopython 读取PDB 读取PDB from biopandas.pdb ...
- biopython 【1】简单介绍【常用板块、安装】
[学习]https://blog.csdn.net/weixin_43569478/article/details/111714256 Biopython工程是一个使用Python来开发计算分子生物学 ...
- 溶剂可及性(三)dssp和biopython
原文链接:溶剂可及性(三)dssp和biopython 关于DSSP的安装教程有很多,方式也不尽相同,这里我介绍一种个人觉得最便利的方法,通过anaconda安装相关库: conda install ...
最新文章
- 华工计算机考研上机,08华工计算机应用复试全过程_跨考网
- Window 下 Redis 安装
- 2017,AI偏见为何如此受关注?
- iOS开发UI中懒加载的使用方法
- SQL 判断两个时间段是否有交叉
- 分享42个超棒的智能手机摄影画廊
- python Intel Realsense D435 图像自动采集程序 自动剔除模糊图像
- [CF1036C]Classy Numbers
- ZABBIX监控JAVA日志文件
- cocos creator 打包apk_cocos creator android 编译踩坑
- PAT甲级1017 (模拟排序)
- Git学习(四)标签管理
- ios时间相差多少天_iOS 时间戳和时间互换,计算两日期相隔天数
- 虚拟机安装MySQL教程
- maya导入abc动画_UE4 Alembic 动画资产流程的整理
- android微信代码大全,微信隐藏代码大全,99%的人都不知道
- POI Excel设置列宽
- 【毕业论文写作】毕业论文任务书怎么写?
- win7快速启动栏计算机,win7快速启动栏,教您Win7如何添加快速启动栏
- [经验]零线和地线的区别,不注意可是要出大事的哦!
热门文章
- CCNP13:QOS【分类、队列、标记、丢弃】技术
- 关于Spark的部署yarn模式
- ubuntu硬件测试
- 【翻译】CVPR2022: Pyramid Grafting Network for One-Stage High ResolutionSaliency Detection
- 计算机专业专科可以进的国企,专科学这四个专业!考国企、事业编制会容易很多...
- python电子章_python二级电子教案 第2章 Python语言基本语法元素
- 抱薪者说 | 卫斯理:出发,从“好玩”开始
- 项目规范,介绍,规划与搭建,模块化开发,网站favicon,网站TDK
- (三)Linux 4G模块实现短信发送的两种格式(Text和PDU)
- 【学习笔记15】JavaScript的函数