利用Pymol计算蛋白质相互作用位点
文章目录
- 前言
- 一、安装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计算蛋白质相互作用位点相关推荐
- 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点
这篇代码写的可能有点问题,大家如果有需要,去看另一篇吧.如果有啥不足,请批评指正. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点 关于蛋白质结合位点,查阅了很多篇文献,大多 ...
- ctP2ISP:使用卷积和数据增强的转换器预测蛋白质-蛋白质相互作用位点
Title:ctP2ISP: Protein–Protein Interaction Sites Prediction Using Convolution and Transformer with D ...
- 论文解读HN-PPISP:一种基于MLP-Mixer的蛋白质-蛋白质相互作用位点预测混合网络
Title:HN-PPISP: a hybrid network based on MLP-Mixer for protein–protein interaction site prediction ...
- python计算csv文件内的数据_Python利用pandas计算多个CSV文件数据值的实例
功能:扫描当前目录下所有CSV文件并对其中文件进行统计,输出统计值到CSV文件 pip install pandas import pandas as pd import glob,os,sys in ...
- 微带线特性阻抗计算公式_利用HFSS计算微带线的特性阻抗
系别 电子工程系 课程名称 <微波技术与天线>实验 班级 实验名称 利用 HFSS 计算微带线的特性阻抗 姓名 实验时间 学号 指导教师 报 告 内 容 一.实验目的和任务 1 .了解微带 ...
- python ks值计算_利用Python计算KS的实例详解
在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...
- 10分钟上线 - 利用函数计算构建微信小程序的Server端
摘要: 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.微信小程序是一种不需要下载安装即可使用的应用,它可以在微信内被便捷地获取和传播. 当 ...
- Python学习笔记:利用timeit计算函数调用耗时
Python学习笔记:利用timeit计算函数调用耗时 一.timeit模块简介 Timer对象包含两个参数:第一个参数是你想要计时的Python语句,第二个参数运行一次来建立测试. 默认情况time ...
- Ajax实例一:利用服务器计算
Ajax实例一:利用服务器计算 HTML代码 //输入两个数 <input id="number1" type="number"> <inpu ...
最新文章
- 数据为王的时代,如何用图谱挖掘商业数据背后的宝藏?
- 遥望星空FTP文件同步工具(附源码)1.0 发布
- 获取文件唯一id md5
- 关于LB论坛的一个BUG的探讨
- jmeter(2)录制脚本
- linux 进程线程限制,LINUX停每进程限制线程数量
- 中国天然石墨行业市场供需与战略研究报告
- Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。
- 你的微信还安全吗?揭露清理僵尸粉的连环骗局
- 剑指offer【书】之简历抒写
- OpenSSL密码库算法笔记——第5.4章 椭圆曲线点的简介
- KaTeX|LaTeX数学公式编辑手册
- 学英语尽量不要从背词汇表开始
- 【Proteus仿真】6位数码管秒计数器(0-999999S)
- JavaSE 多线程
- Word中字号和磅值的对应关系
- 各类行业资源学习资料大全
- EL表达式中比较String类型数字的大小
- 安卓手机怎么录屏?精心挑选这几款录屏软件,个个好用
- 希望我这是最后一次谈SaaS
热门文章
- 商业地产数字化转型分析
- android SENSOR_ACCELEROMETER 三轴加速度传感器
- 江苏无锡14岁女孩被推荐上北大(图)
- 本地缓存、服务器缓存、分布式缓存介绍
- ​LeetCode刷题实战450:删除二叉搜索树中的节点
- ASP.NET MVC 远程请求图片 转化成BASE64然后通过HTTP输出流显示
- JavaSwing_4.5: JMenuBar(菜单栏)
- lr_用java_Vuser做性能测试
- C语言实用小技巧合集(持续更新)
- Nginx--Rewrite重写