PDBParser和MMCIFParser

PDBParser 解析器
读取pdb文件,使用p=PDBParser(参数)来构建一个PDB解释器.

from Bio.PDB.PDBParser import PDBParser
p = PDBParser()
structure = p.get_structure(“mmdb_6LU7”,“mmdb_6LU7.pdb”)
解释器对象有以下方法和属性:
.get_structure(id,file) : 读取结构, 返回Structure对象. 可以用文件名或句柄
.get_header()/.get_trailer() : 获取PDB文件的文件头和文件尾. 文件头是一个字典. 文件尾是一个列表. 文件头和文件尾要在结构解释后才有信息.
.PERMISSIVE, .QUIET, .structure_builder 同PDBParser的参数.
.header与.trailer : 文件头和文件尾信息. 同相应get方法.
.line_counter: 行数.
读取后获得的Structure对象有多项属性. 其中header属性同PDBParser获得. id属性也是解析时指定.

MMCIFParser解析器
读取mmCIF文件
类似PDBParser, 参数支持structure_builder与QUIET. 解释器支持get_structure方法, 有line_counter属性. 要获取类似文件头信息, 要用MMCIF2Dict 方法. 获取的也是一个字典.

from Bio.PDB.MMCIFParser import MMCIFParser
parser = MMCIFParser()
structure = parser.get_structure(‘1fat’, ‘1fat.cif’)

要解释mmCIF的额外信息, 需要MMCIF2Dict

from Bio.PDB.MMCIF2Dict import MMCIF2Dict
mmcif_dict = MMCIF2Dict(‘1fat.cif’)

Structure类对象
Biopython的结构采用SMCRA体系架构(Structure/Model/Chain/Residue/Atom,结构/模型/链/残基/原子).

一般地,一个实体子类(即原子,残基,链,模型)能通过id作为键来从父类(分别为残基,链,模型,结构)中提取。可以使用len(object)来获取实体的子类的数量.

可以使用child_list = parent_entity.get_list()来获取子对象的列表 (顺序有讲究), 也可以用get_parent()来获取父类. 对于残基和原子, 其id是一个元组, 比较奇怪, 建议获取全列表后再用索引获取.

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

get_id() : 可以获取该实例的id. 和entity.id属性一致.
get_full_id() : 可以获取完整id, 是一个元组. 解析后, 对象full_id属性就会有值.
get_level() : 可以获取该对象的层级, 分别是SMCRA其中一种.
get_parent() : 返回上级父类. 对于Structure层面返回空.
get_list() : 获取子类的列表的copy. 获取的是直接子类. Atom层面没有该方法.
get_iterator() : 获取子类的生成器. 在循环中比get_list()快.
get_models/chains/residues/atoms() : 获取某层级所有子类的生成器.
has_id(id) : 检查是否含有指定id的子类.
transform(rot,tran) : 对实体原子坐标进行坐标转换.
xtra : 该对象储存的额外信息. 字典.
以下属性方法基本都有, 但一般不用. 除非很清楚父子类间操作.

  • Structure/Model/Chain
    这三层次都比较高. Structure的ID靠指定字符串, Model的ID源自于文件位置, 从0开始的整数. 一般只有一个模型, 有些结构含有多个模型. Chain的ID一般是链的标识符, 单字符(一般是字母), 如’A’. 每个模型的链具有唯一ID. 有多个模型时会出现多个相同ID的链.

Structure.header : Structure层面储存文件头信息, 字典.
Model.serial_num : Model层级特有, 标识模型的序号, 从1开始计算. 这个值一般是id+1.
Chain.get_unpacked_list() : Chain层级有, 返回undisordered残基的列表, 而不包含disordered.
Residue
残基的ID是一个三元组: (het, resseq, icode):
het 是异质域, 例如’W’是水, ‘H_残基名’是非标准氨基酸/核酸. 空值代表标准氨基酸和核酸.
resseq是残基序列编号. 即在链中的编号. 整形.
icode是插入码, 当残基含有disordered 信息(即其余同位置的可选残基)时, 会记录这种特点的插入码. 例如’A’.
如果第一和第三项为空或空白, 此时可以直接用残基序列编号访问残基, 如chain[60]. 如果含有水, 则不行了(第一项有het). 因为有时水的编号可能和某氨基酸一致…
残基存在disordered状态. 例如存在Thr 80 A, Ser 80 B, Asn 81, 这个80残基可能有突变, 有另外一种可能情况. 这个会在icode中反映出来.

  • 残基类对象有这些特殊方法 :

is_disordered()或disordered, 如果含有disordered原子, 就会返回True.
flag_disordered() : 设置disordered flag. 一般不要动.
get_resname()或resname, 获取残基名, 一般三个大写字母.
get_segid()或segid : 返回SEGID, 例如"CHN1"
get_unpacked_list() : 返回undisordered原子的列表.
sort() : 将原子排序. N, CA,C, O总是最前, 后面根据字母数字顺序.
Bio.PDB.is_aa(residue, standard=False) 方法可以检查氨基酸. residue可以使残基对象, 也可以是3字母字符串. standard设置True, 只检查20个标准氨基酸. 例如FME默认True, 设置后就False.

  • Atom
    原子属性有很多, 除了之前很多SMCRA对象的共有方法外, 还有很多方法获取的是对应的属性.原子的ID就是他的名称name. 要注意唯一性. 一般就是PDB文件中原子名称去除空格来创建. 而实际在PDB原子名称是可以有空格的.例如’CA ‘代表的是钙而非Cα (’ CA '). 此时为了防止歧义, 会保留空格 (所以要慎防这种奇葩情况的出现, 尽管Ca不常见).

.element, .mass : 返回元素以及原子量. 这个没有get方法.
.get_vector() 返回原子坐标的vector.
.get_coord() / .coord , 返回array([x,y,z],dtype=float32).
.get_name()/.name, 返回原子名, 一般去掉前后空格, 如’N’.
.get_fullname()/.fullname, 返回全名(四个字符,带空格). 如’ N ‘.
.get_serial_number()/.serial_number : 原子序号(从1开始).
.get_bfactor / .bfactor, 返回bfactor温度因子数据
.get_altloc/.altloc 返回原子记录的altloc. 是紊乱原子的标识. 一般是’ '.
.get_occupancy/.occupancy : 返回occupancy因子.
.get_anisou/.anisou_array : 获取anisou数据, 很可能是空的.
get_sigatm()是原子坐标的标准差, get_siguij()是温度因子的标准差.
set_XXXX(值), 可以设置一些属性, 如coord, bfactor, anisou, altloc, occupancy, sigatm, siguij, serial_number, parent.
is_disordered()或disordered, 如果含有disordered原子, 就会返回True.
flag_disordered() : 设置disordered flag. 一般不要动.
注意: 原子序号项和电荷没有存储!!!

Bio.PDB.Vector 模块及相关运算

Vector.angle(other) : 返回两个向量的夹角.
Vector.get_array() : 返回该向量的numpy.array数组.
Vector.left_multiply(matrix) : 返回矩阵左乘结果, Matrix x Vector.
Vector.right_multiply(matrix) : 返回矩阵右乘结果, Vector x Matrix.
Vector.norm() : 返回向量的模(长度).
Vector.normsq() : 返回向量的模的平方.
Vector.normalized() : 返回模1的单位向量.
Vector.normalize() : 将向量变为单位向量(模1), 原位修改, 无返回值.

除了上述方法, Bio.PDB里面也有一些和向量操作相关的方法:

Bio.PDB.calc_angle(v1,v2,v3) : 计算3个点的夹角, 返回浮点型.
Bio.PDB.calc_dihedral(v1, v2, v3, v4): 返回4个点的二面角. [-pi,pi]区间.
Bio.PDB.m2rotaxis(m): 返回旋转矩阵的角度以及轴向量的二元元组. m是rotaxis获得的旋转矩阵.
Bio.PDB.refmat(p,q) : 镜像p在q的基础上. 返回3x3 array, 左乘后获得p.
Bio.PDB.rotaxis(theta,vector) : theta是角度,pi计算.旋转p在q的基础上, 返回3x3 array, 左乘后获得p.
Bio.PDB.rotaxis2m : 同rotaxis.
Bio.PDB.rotmat(p, q) : 将向量p根据q来旋转矩阵(左乘), 返回3x3 array.
Bio.PDB.vector_to_axis(line, point) : 点到线的投影的向量. 两个参数都是向量, 后者代表点.
Bio.PDB.vectors (模块, 内含上述的方法以及Vectors类)

获得原子坐标向量

n = residue[‘N’].get_vector()
c = residue[‘C’].get_vector()
ca = residue[‘CA’].get_vector()

计算C-CA, N-CA的向量.

n = n - ca
c = c - ca

遍历SMCRA

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

获得原子坐标

res_1_CA = structure[0]['A'][56]['CA']
print(res_1_CA.coord)
res_2_CA = structure[0]['A'][327]['CA']
print(res_2_CA.coord)

计算距离

cutoff = 10
binding_residue = []
for res in structure[0].get_residues():# skip the LDP residueif res == LDP:continue# skip non-amino acid residueselif res.id[0].startswith("H"):continueelse:try:acarbon = res['CA']except:continuedistances = []for atom in LDP:diff = acarbon.coord - atom.coorddistances.append(np.sqrt(np.sum(diff*diff)))if min(distances) < cutoff:binding_residue.append(res)

参考:
https://blog.csdn.net/platinhom/article/details/87964427
https://youtu.be/mL8NPpRxgJA
https://www.youtube.com/watch?v=dxVKG2gNSos

Biopython---part 1相关推荐

  1. Pymol BioPython | PDB文件中氨基酸序列的提取

    1. Pymol 当前目录下有一个PDB文件,利用pymol的命令模式: pymol receptor.pdb -c -d "save receptor.fasta" 2. Bio ...

  2. 为什么 Biopython 的在线 BLAST 这么慢?

    用过网页版本 BLAST 的童鞋都会发现,提交的序列比对往往在几分钟,甚至几十秒就可以得到比对的结果:而通过调用 API 却要花费几十分钟或者更长的时间!这到底是为什么呢? NCBIWWW 基本用法 ...

  3. biopython安装_BioPython的安装和使用

    BioPython 是一个用来处理序列和生物信息的python包,里面包含了很多的工具,可以用来直接读取fasta格式.安装可以通过两种方式,pip方式: 1. pip 方式 pip3 install ...

  4. biopython有什么用_BioPython学习笔记

    序列和序列对象 Seq 类 Seq类是Biopython最基础的一类, 储存序列信息. from Bio.Seq import Seq. 该类基本格式是Seq(self, data, alphabet ...

  5. 蛋白质结构信息获取与解析(基于Biopython)

    通常情况下,一个蛋白质所包含的信息是非常多的,与结构相关的包括:包括链名.氨基酸残基序列.原子坐标等.一个蛋白质的结构相关的信息可以以pdb文件的形式保存,这些文件可以直接从PDB.NCBI等数据库获 ...

  6. 怎么使用biopython_关于python:使用Biopython的翻译功能后,如何跟踪核苷酸序列中起始密码子(ATG)的位置?...

    我有一个FASTA文件,其中包含一堆序列,格式如下: BMRat|XM_008846946.1 ATGAAGAACATCACAGAAGCCACCACCTTCATTCTCAAGGGACTCACAGACA ...

  7. Biopython 安装

    转载自:Biopython 安装 Biopython 安装 本节解释了如何在你的机器上安装Biopython.它的安装非常简单,不会超过5分钟. 第1步 - 验证Python的安装 Biopython ...

  8. Biopython入门

    Biopython入门 1. 什么是Biopython? Biopython工程是一个使用Python来开发计算分子生物学工具的国际团体. Biopython官网(http://www.biopyth ...

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

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

  10. 生物信息中的Python 02 | 用biopython解析序列

    上一篇文章生物信息中的Python 01 | 从零开始处理基因序列自己造轮子实现了序列的基础操作,但是在Python的世界里,一项工作只要重复的次数多了,那么一定就会有大神来开发相应的包来解决,这个包 ...

最新文章

  1. 学习笔记Spark(十)—— Spark MLlib应用(2)—— Spark MLlib应用
  2. 【Java代码】反射机制处理传递给mapper文件的非Map类型参数对象(指定属性为空则设置默认值)
  3. 【MFC】带组合框的工具栏
  4. Working with Multiple Environments(使用多个环境)
  5. C语言之指针与数组总结
  6. Shell 脚本——测试命令
  7. SharePoint at .NET技术大会
  8. 为什么html运行之后不滚动,为什么很多移动端的HTML UI,在滚动时都用transform属性而不是用传统的滚动条?...
  9. c++ regex用法实例 2
  10. matlab全局变量_MATLAB笔记(一):工具箱的卸载、阻尼振动波形图程序
  11. 【Python】Django auth 修改密码如何实现?
  12. mysql in select 子句_在MySQL select语句IN子句中按值顺序排序?
  13. gcc离线安装 ubuntu 不用编译_「ubuntu安装gcc」ubuntu18.04安装gcc详细步骤(附问题集) - seo实验室...
  14. SiteMesh详解
  15. 工作站Linux双显卡BIOS设置,在BIOS Setup里面设置双显卡机型的双显卡模式常见方式介绍...
  16. HBase二级索引实践(带你感受二级索引的力量)
  17. window10刷新卡顿
  18. excel中if如何加android,Excel 如何实现函数IF的嵌套超过七层
  19. vue的keep-alive的正确用法
  20. 【转】HDMI、DVI接口差异之解析

热门文章

  1. C. Minimum Notation #823 div2
  2. html5 判断页面加载,js判断页面是否加载完成的方法
  3. 硬盘柱面损坏怎么办_硬盘坏道屏蔽工具,详细教您如何修复硬盘坏道
  4. linux下打字软件,桌面应用|与 Linux 一起学习:学习打字
  5. Oracle物化视图的刷新
  6. 英伟达发布《永劫无间》最新显卡驱动更新,驱动人生升级教程
  7. JS 模拟鼠标自动点击【浏览器内】
  8. 如何进行网站代备案?
  9. Aladdin and the Flying Carpet LightOJ - 1341
  10. Centos7.6安装Bugzilla5.0.4