文章目录

  • 前言
  • 一、安装pymol
  • 二、代码
  • 总结

前言

利用Pymol,寻找PDB文件内的相互作用位点信息。

一、安装pymol

网上有很多安装pymol的教程,大家可以搜索一下看看。安装开源版的

二、代码

from pymol import cmd
import osclass PDBparase():def __init__(self,pdbid,pdbfilepath,out_path=os.path.abspath('.')):self.pdbid = pdbidself.path = pdbfilepathself.outpath = open(os.path.join(out_path,'Bindsite.txt'),'w')self.aadic = {'ALA':'A', 'CYS':'C', 'ASP':'D', 'GLU':'E','PHE':'F', 'GLY':'G', 'HIS':'H', 'LYS':'K','ILE':'I', 'LEU':'L', 'MET':'M', 'ASN':'N','PRO':'P', 'GLN':'Q', 'ARG':'R', 'SER':'S','THR':'T', 'VAL':'V', 'TYR':'Y', 'TRP':'W'}#定义一个字典,将三字母氨基酸转换为单字母def extractChain(self):'''extract pdb file Chain list:return:'''cmd.delete('all')cmd.load(self.path)cmd.remove('solvent')  ##移除溶剂分子和水分子# cmd.select('proteinseq','  (byres polymer & name CA)')cmd.select('all_','all')prot_atom = cmd.get_model('all_').atomchain_prot = [ atom.chain for atom in prot_atom]chain_lig = sorted(list(set(chain_prot)))return chain_ligdef extractseq(self):'''提取pdb文件中每条链的蛋白质序列:return: '''''chain_ls = self.extractChain()prot_chain = []for c in chain_ls:cmd.select('singleseq', '  (byres polymer & name CA) in chain %s'%c)singleseq_atom = cmd.get_model('singleseq').atomseq = ''aanum = []for a in singleseq_atom:if a.resn in self.aadic:if a.resi not in aanum:seq += self.aadic[a.resn]aanum.append(a.resi)if aanum:print('>%s\t%s\n%s'%(self.pdbid,c,seq))prot_chain.append(c)cmd.delete('singleseq')return prot_chain##提取相互作用蛋白质链def extractinterchain(self):chain_ls = self.extractChain()prot_chain = []for c in chain_ls:cmd.select('singleseq', '  (byres polymer & name CA) in chain %s' % c)singleseq_atom = cmd.get_model('singleseq').atomseq = ''aanum = []for a in singleseq_atom:if a.resn in self.aadic:if a.resi not in aanum:seq += self.aadic[a.resn]aanum.append(a.resi)if aanum:prot_chain.append(c)cmd.delete('singleseq')return prot_chaindef extractligand(self):'''提取pdb文件中每条链上的配体:return:'''cmd.remove('solvent')chain_ls = self.extractChain()ligand_ls = []for c in chain_ls:cmd.select('dna', ' resn DA+DT+DC+DG in chain %s'%c)dna_atom = cmd.get_model('dna').atomif dna_atom:ligand_ls.append((c, 'DNA'))cmd.select('rna', ' resn G+C+U+A in chain %s' % c)rna_atom = cmd.get_model('rna').atomrna_atom = cmd.get_model('rna').atomif rna_atom:ligand_ls.append((c, 'RNA'))cmd.select('singleseq', '  (byres polymer & name CA) in chain %s' % c)cmd.select('ligand', ' (!singleseq & !dna & !rna) in chain %s' % c)ligand_atom = cmd.get_model('ligand').atomfor a in ligand_atom:if a.chain == c:ligand_ls.append((c, a.resn))return sorted(set(ligand_ls))def calbind(self,cutoff=3.5):inter_chain = self.extractinterchain()ligand_ls = self.extractligand()for l in ligand_ls:chain = l[0]ligand = l[1]if l[1] == 'DNA':ligand = 'DA+DT+DC+DG'if l[1] == 'RNA':ligand = 'G+C+U+A'cmd.select('lig',' resn %s in chain %s'%(ligand,chain))for c in inter_chain:cmd.select('interseq', '  (byres polymer & name CA) in chain %s'%c)cmd.select('intersite', 'byres interseq around %s ' %cutoff)bsnum_ls = []site_ls = []for a in cmd.get_model('intersite').atom:if a.resn in self.aadic:aazong = self.aadic[a.resn] + a.resiif a.resi not in bsnum_ls:bsnum_ls.append(a.resi)if aazong not in site_ls:site_ls.append(aazong)seq_atom = cmd.get_model('interseq').atomseq = ''aanum = []for a in seq_atom:if a.resn in self.aadic:if a.resi not in aanum:if a.resi in bsnum_ls:seq += self.aadic[a.resn].lower()else:seq += self.aadic[a.resn]aanum.append(a.resi)if ligand == 'DA+DT+DC+DG':ligand = 'DNA'if ligand == 'G+C+U+A':ligand = 'RNA'if site_ls:print('%s\t%s\t%s\t%s\t%s\t%s' % (self.pdbid, chain, ligand, c, ' '.join(site_ls), seq),file=self.outpath)print('%s\t%s\t%s\t%s\t%s\t%s'%(self.pdbid,chain,ligand,c,' '.join(site_ls),seq))cmd.delete('all')def calpip(self,cutoff=3.5):inter_chain = self.extractinterchain()for c in inter_chain:cmd.select('rcpseq', '  (byres polymer & name CA) in chain %s' % c)##定义受体链for d in inter_chain:if d != c:cmd.select('interpip', '  (byres polymer & name CA) in chain %s' % d)##定义相互作用链cmd.select('protsite',' byres interpip around %s in rcpseq'%cutoff)bsnum_ls = []site_ls = []for a in cmd.get_model('protsite').atom:if a.resn in self.aadic:aazong = self.aadic[a.resn] + a.resiif a.resi not in bsnum_ls:bsnum_ls.append(a.resi)if aazong not in site_ls:site_ls.append(aazong)seq_atom = cmd.get_model('protsite').atomseq = ''aanum = []for a in seq_atom:if a.resn in self.aadic:if a.resi not in aanum:if a.resi in bsnum_ls:seq += self.aadic[a.resn].lower()else:seq += self.aadic[a.resn]aanum.append(a.resi)if site_ls:print('%s\t%s\t%s\t%s\t%s\t%s' % (self.pdbid, d,'PIP', c, ' '.join(site_ls), seq),file=self.outpath)print('%s\t%s\t%s\t%s\t%s\t%s' % (self.pdbid, d,'PIP', c, ' '.join(site_ls), seq))
pdb = PDBparase('4qoz','4qoz.pdb') #这里需要传入pdbid,和pdb文件路径# print(pdb.extractligand())pdb.calbind()

总结

上次代码写的可能太乱,逻辑也有点复杂。后来发现利用pymol,可以提取文件中的小分子信息,就重新写了一遍,可能还会有更好的解决方案。

利用Pymol计算蛋白质相互作用位点相关推荐

  1. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点

    这篇代码写的可能有点问题,大家如果有需要,去看另一篇吧.如果有啥不足,请批评指正. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点 关于蛋白质结合位点,查阅了很多篇文献,大多 ...

  2. ctP2ISP:使用卷积和数据增强的转换器预测蛋白质-蛋白质相互作用位点

    Title:ctP2ISP: Protein–Protein Interaction Sites Prediction Using Convolution and Transformer with D ...

  3. 论文解读HN-PPISP:一种基于MLP-Mixer的蛋白质-蛋白质相互作用位点预测混合网络

    Title:HN-PPISP: a hybrid network based on MLP-Mixer for protein–protein interaction site prediction ...

  4. python计算csv文件内的数据_Python利用pandas计算多个CSV文件数据值的实例

    功能:扫描当前目录下所有CSV文件并对其中文件进行统计,输出统计值到CSV文件 pip install pandas import pandas as pd import glob,os,sys in ...

  5. 微带线特性阻抗计算公式_利用HFSS计算微带线的特性阻抗

    系别 电子工程系 课程名称 <微波技术与天线>实验 班级 实验名称 利用 HFSS 计算微带线的特性阻抗 姓名 实验时间 学号 指导教师 报 告 内 容 一.实验目的和任务 1 .了解微带 ...

  6. python ks值计算_利用Python计算KS的实例详解

    在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...

  7. 10分钟上线 - 利用函数计算构建微信小程序的Server端

    摘要: 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.微信小程序是一种不需要下载安装即可使用的应用,它可以在微信内被便捷地获取和传播. 当 ...

  8. Python学习笔记:利用timeit计算函数调用耗时

    Python学习笔记:利用timeit计算函数调用耗时 一.timeit模块简介 Timer对象包含两个参数:第一个参数是你想要计时的Python语句,第二个参数运行一次来建立测试. 默认情况time ...

  9. Ajax实例一:利用服务器计算

    Ajax实例一:利用服务器计算 HTML代码 //输入两个数 <input id="number1" type="number"> <inpu ...

最新文章

  1. 数据为王的时代,如何用图谱挖掘商业数据背后的宝藏?
  2. 遥望星空FTP文件同步工具(附源码)1.0 发布
  3. 获取文件唯一id md5
  4. 关于LB论坛的一个BUG的探讨
  5. jmeter(2)录制脚本
  6. linux 进程线程限制,LINUX停每进程限制线程数量
  7. 中国天然石墨行业市场供需与战略研究报告
  8. Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。
  9. 你的微信还安全吗?揭露清理僵尸粉的连环骗局
  10. 剑指offer【书】之简历抒写
  11. OpenSSL密码库算法笔记——第5.4章 椭圆曲线点的简介
  12. KaTeX|LaTeX数学公式编辑手册
  13. 学英语尽量不要从背词汇表开始
  14. 【Proteus仿真】6位数码管秒计数器(0-999999S)
  15. JavaSE 多线程
  16. Word中字号和磅值的对应关系
  17. 各类行业资源学习资料大全
  18. EL表达式中比较String类型数字的大小
  19. 安卓手机怎么录屏?精心挑选这几款录屏软件,个个好用
  20. 希望我这是最后一次谈SaaS

热门文章

  1. 商业地产数字化转型分析
  2. android SENSOR_ACCELEROMETER 三轴加速度传感器
  3. 江苏无锡14岁女孩被推荐上北大(图)
  4. 本地缓存、服务器缓存、分布式缓存介绍
  5. ​LeetCode刷题实战450:删除二叉搜索树中的节点
  6. ASP.NET MVC 远程请求图片 转化成BASE64然后通过HTTP输出流显示
  7. JavaSwing_4.5: JMenuBar(菜单栏)
  8. lr_用java_Vuser做性能测试
  9. C语言实用小技巧合集(持续更新)
  10. Nginx--Rewrite重写