python高阶教程译文_高级教程 — PyMOL中文教程 2020.09 文档
PyMOL脚本、命令、插件¶
PyMOL支持Python 编程语言,故可以借助python让pymol无所不能,pymol除了显示软件,也能成为计算软件。
脚本:把pymol作为一个模块,实现一些计算功能。
命令:pymol中内置了一些命令,如color、dist等,我们也可以自定义新的命令。
插件:pymol中内置了一些插件,如apbs-pdb2pqr等,我们也可以自定义插件。
注解
编写PyMOL脚本、命令、插件,需要有一定的python基础。python教程:HOW2PY
安装PyMOLwiki中的命令¶
打开pymol,在命令窗口输入run d:/focal_blur.py 就完成了安装。
运行命令 FocalBlur aperture=4,samples=400,ray=0
FocalBlur一共有5个参数:
aperture
samples
ray
width
height
该命名和单反的光圈相关,控制景深的。
需要开启ray=1 才能看到光圈景深的效果
命令¶
这里我举一个例子: 计算两个苯环之间的距离或者五元环和苯环之间的距离。
拓展:计算2个object的中心距离。
首先我们为命令起名字,要求是简洁高效,通过命令就能猜测到这个命令的功能。
这里我起的脚本名 dist_center。
核心是在python 脚本中定义这个函数,并cmd.extend拓展命令。
框架如下
1
2
3
4from pymol import cmd
def dist_center(obj1="obj01",obj2="obj02",showflag=True):
pass
cmd.extend("dist_center", dist_center)
完整代码(dist_center_2obj.py)如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66"""
DESCRIPTION
measure the distance between the centers of two objects
the object usually is benzene, pyridine and other cyclo object
more information at:
http://pymol.chenzhaoqiang.com/intro/advanceManual.html
AUTHOR
Zhaoqiang Chen, 2017
Please inform me if you use/improve/like/dislike/publish with this script.
email: 744891290@qq.com
"""
from pymol import cmd,math
def getcenterofatoms(atoms):
'''
'''
x=0
y=0
z=0
for atm in atoms:
x+=atm.coord[0]
y+=atm.coord[1]
z+=atm.coord[2]
numatm=float(len(atoms))
x=x/numatm
y=y/numatm
z=z/numatm
return [x,y,z]
def getdist(cen1,cen2):
'''
'''
dx=cen1[0]-cen2[0]
dy=cen1[1]-cen2[1]
dz=cen1[2]-cen2[2]
dist=dx*dx+dy*dy+dz*dz
return math.sqrt(dist)
def dist_center(obj1="obj01",obj2="obj02",showflag=True):
'''
usage1:
dist_center obj01,obj02
usage2:
dist_center obj01,obj02,1
usage3:
dist_center obj01,obj02,0
usage1 is equal to usage2!
'''
obj1atoms=cmd.get_model(obj1).atom
obj2atoms=cmd.get_model(obj2).atom
obj1center=getcenterofatoms(obj1atoms)
obj2center=getcenterofatoms(obj2atoms)
dist = getdist(obj1center,obj2center)
print("distance:%.2f"%(dist ))
if showflag:
cmd.pseudoatom('cen1', pos=obj1center)
cmd.pseudoatom('cen2', pos=obj2center)
cmd.distance("dist","cen1","cen2")
cmd.extend("dist_center", dist_center)
演示如下:
载入蛋白,运行run dist_center_2obj.py命令;
把TRY-72侧链苯环6个原子保存为obj01;
把HIS-351侧链咪唑环的5个原子保存为obj02;
运行命令 dist_center obj01,obj02 即可测量距离。
显示蛋白残基之间的盐桥¶
思路:
先定位带负电荷的氨基酸上的羧基上的氧原子;
然后定位正电荷氨基的Lys 上的带正电荷的N原子;
最后显示这两类原子在4A范围之内的配对情况。
方法1 命令行版本
注解
PyMOL>select negative, (resn ASP+Glu and name OD*+OE*)
PyMOL>select positive, (resn Lys and name NZ) or (resn arg and name NE+NH*)
PyMOL>distance saltbridge, (negative ), (positive ), 4.0, 0
PyMOL>select negative, (resn ASP+Glu and name OD*+OE*)
PyMOL>select positive, (resn Lys and name NZ) or (resn arg and name NE+NH*)
PyMOL>distance saltbridge, (negative ), (positive ), 4.0, 0
方法2 拓展成一个命令 saltbridge.py
from pymol import cmd
def show_saltbridge(dist=4.0):
cmd.select("negative","resn ASP+Glu and name OD*+OE*")
cmd.select("positive","(resn Lys and name NZ) or (resn arg and name NE+NH*)")
cmd.distance("saltbridge","negative","positive",dist,0)
cmd.extend("show_saltbridge", show_saltbridge)
使用命令
PyMOL>run saltbridge.py
PyMOL>show_saltbridge 3
PyMOL>show_saltbridge
用法如图所示:
两个氨基酸之间存在黄色虚线,说明这个氨基酸存在盐桥。
把蛋白装入盒子中,并可视化长宽高¶
计算蛋白的长宽高,并可视化。
下载脚本(右击另存为) addproteinBox.py 。
在PyMOL 命令行,运行下述命令,就可以该蛋白添加盒子,并显示长宽高。
PyMOL>run addproteinBox.py
PyMOL>add_proteinbox 4hbk
左下角显示XYZ坐标¶
VMD左下角默认会显示XYZ坐标,PyMOL也可以做到。
下载脚本(右击另存为) axes.py 。
在PyMOL 命令行,运行下述命令,就可以添加XYZ坐标了。
PyMOL>run axes.py
PyMOL>axes
加载坐标颜色文件¶
文件(test.xyzrgb)格式如下
x y z r g b
在 PyMOL 命令行,运行下述命令,就可以可视化坐标颜色文件了。
PyMOL>run loadxyzrgb_sub.py
PyMOL>loadxyzrgb test.xyzrgb
提取配体周围的位点¶
from pymol import cmd
from pymol import util
# example 6SP6 KJK A
def extractSiteByLig(pdbid,ligid,radius=4,chainid=None):
'''
'''
cmd.delete('all')
cmd.fetch(pdbid)
if not chainid:
cmd.select("ligall","resn%s"%ligid)
atms_lig = cmd.get_model("ligall").atom
chains_lig = [ atom.chain for atom in atms_lig ]
chains_lig = list(set(chains_lig))
chainid = chains_lig[0]
cmd.select("lig_%s"%chainid," chain%sand resn%s"%(chainid,ligid))
cmd.select("site","byres (lig_%sexpand%s)"%(chainid,radius))
cmd.create("pocket","site")
cmd.disable("all")
cmd.enable("pocket")
cmd.do("as sticks,pocket")
util.cba(144,"pocket")
util.cba(120,"pocket and resn%s"%ligid)
newfile="%s_%s_%s_%s.pdb"%(pdbid,ligid,chainid,radius)
cmd.save(newfile,"site")
# extractSiteByLig 6SP6, KJK
cmd.extend("extractSiteByLig",extractSiteByLig)
pdbid = '6SP6'
ligid = 'KJK'
extractSiteByLig(pdbid,ligid)
PyMol的宏录制¶
点击 File->Log File-> Open File 填写宏的名字 xxx.pml
然后操作PyMOL, 操作完成后点击 File->Log File-> close;
文本编辑器(如vscode)打开宏文件就可以查看里面的命令。
python高阶教程译文_高级教程 — PyMOL中文教程 2020.09 文档相关推荐
- python高阶函数心得_没有学不会的python--高阶函数
没有学不会的python 函数式编程 到现在为止,我们的没有学不会python系列文章已经讲了很多知识点了,如果是第一次刷到这篇文章的朋友可以去我主页看一下以前写的文章.前面讲了很多知识点,每个知识点 ...
- python设置excel字体颜色_[知识积累]python3使用xlwt时写入文档字体颜色和边框样式...
可借鉴的网址:https://www.programcreek.com/python/example/39979/xlwt.Alignment 可以直接通过pip安装xlwt 个人理解: xlwt中对 ...
- vue 高阶面试题_高级Web前端工程师面试之Vue问题汇总解析
又是一年毕业季,很多学习前端的同学面对激烈的求职竞争倍感压力,想要了解企业招聘会提问哪些问题.今天千锋郑州Web前端培训小编就给大家分享一下高级Web前端工程师面试中有关Vue的问题及解析. 1.Vu ...
- python高阶函数介绍_python高级特性和高阶函数及使用详解
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- python wechatpay微信支付回调_【微信支付】JSAPI支付开发者文档
XXE漏洞需要您在回调处理代码里面解析XML之前,加入禁用实体解析的代码,不同语言设置的内容不同,下面提供了几种主流开发语言的设置指引(您可以根据关键字找到xml解析组件采取对应方法升级): [PHP ...
- python反距离权重法_反距离权重法 (Spatial Analyst)—ArcMap | 文档
使用反距离权重法 (IDW) 获得的像元输出值限定在插值时用到的值范围之内.因为反距离权重法是加权平均距离,所以该平均值不可能大于最大输入或小于最小输入.因此,如果尚未对这些极值采样,便无法创建山脊或 ...
- python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)
一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...
- 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数
高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...
- python高阶3D绘图---pyvista模块,mayavi模块,pyopengl模块,MoviePy模块基础使用
目录 一.python三维绘图 二.python动画生成 三.项目文件: 一.python三维绘图 ~~~~~~~~ python借助于其编写简单,三方库丰富的特点,可以极为方便的 ...
最新文章
- 开源库libuuid简介及使用
- java中高级大公司多线程面试题
- idea提交spark任务,内存不足,指定JVM内存的解决方法
- scn exercise view.setModel will trigger binding creation in Fiori
- Lambda 表达式详解~Lambda与集合
- oracle空间整理,ORACLE数据库空间整理心得
- angular4更改表单中显示的值_关于angular4中FormBuilder重新赋值时发生的问题
- java连接mysql时区修改_java连接mysql数据库时的时区设置问题(time_zone)
- SQL Server 数据库原理与应用
- 单例模式 - 双锁机制
- MOSS架构和共享服务(Shared Service)
- linux中级之lvs配置(命令)
- 概率论与数理统计图解
- 给iphone或touch加桌面图标
- Python|LeetCode习题答案汇总
- iOS逆向(八)逆向工具 otool 介绍
- 关于编写公司软件测试规范操作手册计划书
- wps linux 无法输入中文,WPS for linux 中不能切换到中文输入法
- php socket 介绍
- 提高信心的十个方法,助你考研坚持到底!
热门文章
- detach screen_screen命令的使用
- 全局路径规划AstarDijkstra---ROS算法入门学习
- 企业IT项目开发之七宗罪(上篇)
- java tess4j训练库,包括Tess4J到Java项目作为在Eclipse库
- 人工智能发展史——卷积神经网络
- 记录uniapp打包成App
- 【真题解析】系统集成项目管理工程师 2021 年下半年真题卷
- 联想服务器修改启动模式,联想bios 启动模式设置教程
- 华为路由器本地AAA认证
- StackFlow 之 升级 Spring Boot V2.1.0(GA)