PyMOL绘制坐标轴以及盒子

类别:    标签: pymol   阅读次数:   版权: (CC) BY-NC-SA

PyMOL官方网站上给了两个绘制坐标轴的脚本, 但无法满足我的需要. 所以我就照葫芦画瓢, 改写了一个根据PDB中的信息绘制坐标轴和盒子的脚本.

PyMOL读取的盒子信息来自PDB文件中的CRYST1行, 类似如下:

CRYST1   42.844   42.844  128.531  90.00  90.00  90.00 P 1           1

如果你使用gmx editconf -f FILE.gro -o FILE.pdb进行转换, 得到的PDB文件中会自动带有这些信息.

这个脚本只能绘制简单的长方体盒子, 但改成任意的六面体盒子也不困难. 因为我暂时用不到这个功能, 就不再操心了.

绘制出的效果类似下图, 看起来还可以. 这也是我们在最近发表的一篇文章中所用的图.

使用

打开PyMOL, 在命令行中执行 load FILE.pdb; run axes.py.

或者, 将脚本中注释掉的 #cmd.load('FILE.pdb') # 载入PDB 这行取消注释, 直接run axes.py就可以了.

脚本

axes.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
# coding: utf-8
from pymol.cgo import *
from pymol import cmd

r=0.5         # 坐标轴半径
h=5           # 圆锥高度
d=2*r*1.618   # 圆锥底面直径

#cmd.load('FILE.pdb') # 载入PDB

a, b, c = cmd.get_symmetry(cmd.get_object_list()[0])[0:3]

cmd.bg_color('white')
cmd.set('cgo_line_width', 5)

cmd.delete('axes')
obj = [
	CYLINDER, 0,   0,   0,    a-h, 0,   0,    r,  1, 0, 0,  1, 0, 0,
	CYLINDER, 0,   0,   0,    0,   b-h, 0,    r,  0, 1, 0,  0, 1, 0,
	CYLINDER, 0,   0,   0,    0,   0,   c-h,  r,  0, 0, 1,  0, 0, 1,
	CONE,     a-h, 0,   0,    a,   0,   0,    d,  0, 1, 0,  0, 1, 0, 0,  1, 1,
	CONE,     0,   b-h, 0,    0,   b,   0,    d,  0, 0, 1,  0, 0, 1, 0,  1, 1,
	CONE,     0,   0,   c-h,  0,   0,   c,    d,  0, 0, 0,  1, 0, 0, 1,  1, 1,

	CYLINDER, a, 0, 0,  a, b, 0,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, 0, b, 0,  a, b, 0,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, 0, 0, c,  a, 0, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, 0, 0, c,  0, b, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, a, 0, c,  a, b, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, 0, b, c,  a, b, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, a, 0, 0,  a, 0, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, 0, b, 0,  0, b, c,  r/2,  .5, .5, .5, .5, .5, .5,
	CYLINDER, a, b, 0,  a, b, c,  r/2,  .5, .5, .5, .5, .5, .5
	]

cmd.load_cgo(obj, 'axes')

cmd.set('label_size', -5)
cmd.set('label_font_id', 7)

cmd.delete('xtag')
cmd.delete('ytag')
cmd.delete('ztag')

cmd.pseudoatom('xtag', name='xtag', pos=[a+5, 0, 0])
cmd.pseudoatom('ytag', name='ytag', pos=[0, b+5, 0])
cmd.pseudoatom('ztag', name='ztag', pos=[0, 0, c+5])

cmd.hide('everything', 'name xtag')
cmd.hide('everything', 'name ytag')
cmd.hide('everything', 'name ztag')

cmd.label('name xtag', '"X"')
cmd.label('name ytag', '"Y"')
cmd.label('name ztag', '"Z"')
◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 使用GROMACS计算分子间相互作用
后一篇: 逆旅北方

访问人次(2015年7月 9日起): | 最后更新: 2024-04-16 06:38:20 UTC | 版权所有 © 2008 - 2024 Jerkwin