十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PyMOL使用教程:从安装到选择表达式与脚本化出图

PyMOL使用教程:从安装到选择表达式与脚本化出图 简介这份pymol使用教程汇编面向结构生物学、生物信息学初学者与科研人员围绕分子三维结构可视化需求梳理从源码安装到基础操作、常用命令的学习路径帮助读者快速上手并做出清晰美观的蛋白质结构图。资源包仅1个PDF文件约5.96MB内容集中适合作为案头查阅的电子手册。教程从源码安装讲起分别说明Windows下借助CygWin配置C、Python、OpenGL以及Linux环境中Python、Pmw、libpng等依赖并介绍External GUI与Viewer Window双窗口界面、命令行操作及load加载PDB文件。图像操作部分展开鼠标旋转、缩放、平移、剪切平面调节等技巧并介绍log_open记录命令及cartoon、ribbon、surface等显示表示。已有475人学习。1. 从一张被退回的论文配图说起PyMOL 到底解决什么问题投稿返修时被审稿人点名「Figure 3 的结构图分辨率和视角请统一重画」这种经历做过结构的人多半都有。同一个复合物三张插图三种配色、三种朝向、三种二级结构标注看的人自然怀疑结论的严谨性。PyMOL 就是拿来终结这类问题的一个开放源码、由使用者赞助的分子三维结构显示软件名字里的「Py」表示它建在 Python 之上「Mol」是分子molecule的缩写。它由 Warren Lyford DeLano 编写DeLano Scientific LLC 负责商业发行据作者宣称正式发表的科学论文中四分之一的蛋白质结构图像出自它之手。这份《pymol 使用教程》汇编的价值在于它没有停在「点哪个菜单」而是把安装编译、命令行语法、selection-expression 和选择宏这几层讲到了能用脚本复现的程度。适合结构生物学、药物化学、做分子动力学和写学位论文的人尤其是需要批量出统一风格配图的那类工作。2. PyMOL 安装源码编译、CygWin 与 Conda 三条路线2.1 为什么早期教程满篇都在讲编译自 2006 年 8 月 1 日起DeLano Scientific 对事先编译好的 PyMOL 执行程序包括 beta 版采取限定下载措施只有付费用户才能取得源代码仍然免费下载供使用者自行编译。这条历史决定了当年所有中文教程的安装章节都是编译流程——不是作者爱折腾是没得选。今天的开源版在 conda-forge 上有现成构建常见做法是conda install -c conda-forge pymol-open-source。但编译链路仍值得看一遍PyMOL 的图形层同时依赖 OpenGL 和 Tk/Pmw编译参数不对就会出现「装是装上了窗口起不来」这种最难查的故障。2.2 Linux 从源码编译的完整流程教程列的依赖是 Python、Pmw、OpenGL driver作者用的是 Nvidia、libpng以及下载源码要用的 Subversion client。缺一个都会在编译或启动阶段炸掉先装齐再动手。mkdir pymol-src svn co https://pymol.svn.sourceforge.net/svnroot/pymol/trunk/pymol pymol-src cd pymol-src sudo python setup.py install # 安装核心模块 sudo python setup2.py install # 安装可选组件与脚本 sudo cp ./pymol /usr/bin # 把启动脚本放进 PATH否则找不到命令四条命令的顺序不能换。setup.py负责核心模块和 Python 扩展setup2.py处理 Pmw 等可选依赖测试套件也在第二步里。最后一步容易被忽略pymol是个 shell 启动脚本不复制到$PATH覆盖的目录命令行直接敲pymol会提示 command not found。老源码按 Python 2 编写在 Python 3 环境下执行setup.py会直接抛语法错误用python2 setup.py或在虚拟环境里编译更省事。2.3 Windows 用户CygWin 路线与 Conda 路线对比Windows 走 CygWin需要确保装齐 Cgcc / g 包、Python、OpenGL、PNG 四个模块。CygWin 只提供 POSIX 兼容层OpenGL 最终仍落到 Windows 的 opengl32所以要额外拉一个 X Server 才有图形输出这是 CygWin 方案最容易被漏掉的一环。路线依赖适用场景主要代价Linux 源码编译Python、Pmw、OpenGL、libpng、SVN服务器无 root 限制、需要指定版本编译耗时长依赖冲突排查麻烦Windows CygWinC、Python、OpenGL、PNG、X Server只能在 Windows 桌面出图图形栈多层转发OpenGL 性能打折Condaconda-forge无大多数日常使用版本跟随上游旧脚本偶有兼容问题发行版包管理视仓库而定快速验证版本偏旧插件生态可能缺2.4 两个高频报错的定位方法第一个是启动即报ImportError: No module named Pmw说明核心装好了但可选组件没跟上补一条命令即可python setup2.py install pmw。第二个是 Gentoo 上提示ImportError: No module named _tkinter根因是编译 Python 时没打开 tcl/tk 支持用USEtcltk emerge python重编 Python 再回头编 PyMOL。这两个错误的共同点是「报错信息指向 Python 模块问题却出在上游依赖」遇到同类提示先查依赖包再查 PyMOL 本身。提示批量出图用pymol -cq script.py走无窗口模式比开 GUI 稳定得多也方便塞进任务队列。3. 对象模型与显示层级load / show / hide 的正确用法3.1 对象、选择集、显示状态三层结构打开 PyMOL 后是双窗口布局上面是 External GUI包含标准菜单、输出区、命令行输入区和常用命令按钮下面是 Viewer Window左半是 Viewer显示结构右半是 Internal GUI对象与选择集列表。Viewer 左下角的PyMOL提示符就是命令行所有 GUI 操作在这里都有对应命令。标准复制、剪切、粘贴只在 External GUI 里生效且必须用 CtrlC、CtrlX、CtrlV这是 External GUI 最实用的一点。load一个 PDB 文件后PyMOL 会创建一个 objectselect出来的东西叫 selection它不复制坐标只是对原子集合的引用。object 决定数据边界selection 决定操作范围显示状态show/hide、enable/disable决定最终看到什么这三层分清楚后面的命令就不会互相打架。3.2 加载文件与自定义对象名加载有两种方式External GUI 的 File → Open或者命令行load filename。以从 wwpdb 下载的 2vl0.pdbPENTAMERIC LIGAND GATED ION CHANNEL FROM ERWINIA CHRYSANTHEMI为例from pymol import cmd cmd.load(2vl0.pdb) # 对象名自动取文件名即 2vl0 cmd.load(2vl0.pdb, test) # 显式命名为 test后续命令都用这个名字 cmd.load(2vl0.pdb, test, state1) # 指定载入第 1 个 state对象名是后续所有操作的句柄起名要有语义比如channel、ligand_site。同名重复加载会让 PyMOL 提示覆盖批量脚本里尤其要避免撞名。3.3 representation 对照表与 show / hide 切换刚打开的 PDB 把所有原子一股脑画在 Viewer 里看着乱是正常的——蛋白质动辄上万个原子。解法是切换表示方式representation几何含义典型场景渲染开销lines键线逐原子检查小分子、氢键低sticks带粗细的键棍配体、活性口袋中ribbon骨架飘带看二级结构走向中cartoon螺旋箭头 环论文主图中高dots点阵填充快速看体积轮廓低spheres球棍的球金属离子、水高surface分子表面口袋、界面很高mesh网格表面表面 内部同看很高切换命令成对使用show和hide不加 selection 时默认作用于allcmd.hide(lines) # 隐藏全部键线 cmd.show(ribbon) # 全结构改成飘带 cmd.show(cartoon, chain A) # 只让 A 链走 cartoon cmd.hide(everything, resn HOH) # 清掉水分子3.4 选链、上色与多对象状态管理2vl0 是一个五聚体结构里两套一模一样的分子只是朝向不同。先给链编号才看得清cmd.label(all, chains) # 在每个残基上标注链号 cmd.select(test, chain fghij) # 把 F-J 链选出来命名 test cmd.hide(ribbon, test) # 隐藏这套分子 cmd.hide(everything, test) cmd.show(cartoon, test)先select再命名好处是后面可以反复对这个名字下手Internal GUI 右侧面板里也能直接看到并操作它。上色按二级结构走ss表示 secondary structureh是螺旋s是折叠l是环和其余部分cmd.color(red, ss h) # 所有螺旋变红 cmd.color(yellow, ss s) # 所有 beta 折叠变黄 cmd.color(green, ss l) # 环和其他结构变绿 cmd.delete(test) # 删选择集 cmd.delete(2vl0) # 删整个对象多个对象可以同时打开用disable/enable临时开关可见性disable用在 selection 上时会去掉那份粉色小点标记但不改变选中目标的可见性这点容易误解。视角调整除了鼠标还有命令zoom放大到选定目标orient让目标最大尺寸水平显示、次大尺寸竖直显示view只存视角不存显示方式cmd.zoom(test) cmd.orient(test) cmd.view(v1, store) # 存当前视角 cmd.view(v1, recall) # 回到该视角4. selection-expression把「选哪一部分」写准确4.1 命令语法骨架keyword 加 argumentPyMOL 命令由关键词和变量组成quit这类不需要变量zoom即使不写变量也能执行——因为它的默认变量是allzoom与zoom all等价。带多个变量时必须用逗号隔开color就是典型cmd.color(red) # 只有一个变量第二变量默认 all cmd.color(red, chain A) # 指定选择表达只染 A 链选择表达可以简单到一个元素符号也可以复杂到多层逻辑嵌套它是 PyMOL 命令体系里最值得花时间的一块。4.2 selector 与 identifier 速查语法是select 名字, selector identifier例如select test, name conca表示选中 PDB 里名字为这些的原子。identifier 之间用连接表示「或」。selector简写identifier 含义示例symbole.元素符号select polar, symbol onnamen.原子名select carbons, name cacbcgcdresnr.残基名select aas, resn aspgluasnglnresii.残基编号select mults10, resi 110100chainc.链标识select firstch, chain asegis.段标识select ligand, segi ligaltalt交替构象标识select altconf, alt abssss二级结构单字母select allstrs, ss hslbb按 B-factor 比较select fuzzy, b 12qq按 occupancy 比较select lowcharges, q 0.5index / ididx. / id内部 / 外部序号select intid, index 23all*全部已加载原子select everything, allhydroh.全部氢原子select honly, hydrohetatmhetHETATM 记录原子select het, hetatmvisible / presentv. / pr.可见对象 / 有坐标的原子select shown, visible4.3 逻辑操作子与括号优先级逻辑操作子能把简单选择拼成复杂条件写集合运算时按优先级加括号最内层括号最先求值操作子简写效果示例not!取补集select sidechains, ! bband交集select far_bb, bb farfrm_tenor|并集select all_prot, bb | sidechainininidentifiers 全匹配select same_atom, pept in protlikel.name/resi 匹配select similar_atom, pept like protgapgap范德华半径差超阈值select farfrm_ten, resi 10 gap 5arounda.以 s1 为球心取球select near_ten, resi 10 around 5expande.把选择集向外扩select near_ten_x, near10 expand 3withinw.取 s2 邻域内属于 s1 的原子select bbnearten, bb w. 4 of resi 10byresbr.扩展到完整残基select complete_res, br. bbnear10byobjectbo.扩展到整个对象select near_obj, bo. near_resneighbornbr.直接成键的原子select vicinos, nbr. resi 10组合使用要注意语义比如「选 B 链但排除 88 号残基」写成select chain b and (not resi 88)。漏掉括号时and和not的结合顺序会和预期不一致。4.4 选择宏的斜杠语法与通配省略选择宏用/分隔 identifier顺序固定/object-name/segi-identifier/chain-identifier/resi-identifier/name-identifier。它本质上被翻译成带and的常规选择表达式再执行写起来短得多cmd.select(ca100, chain a and resi 100 and name ca) # 常规写法 cmd.select(ca100, a/100/ca) # 宏写法等价 cmd.show(lines, a/100/ca) cmd.color(green, a/142/) # 末尾省略 name142 号残基全部原子变绿 cmd.show(cartoon, a//) # 省略 resi 与 name整条 A 链走 cartoon cmd.zoom(/2vl0//a/100/ca) # 以斜杠开头从 object 层开始匹配 cmd.zoom(/2vl0//b) # segi 位省略相当于通配以斜杠开头表示从表达式顶端object 层开始不以斜杠开头则以最后一项为 name-identifier。两个斜杠之间留空就是通配PyMOL 会补上该层全部元素。使用限制有三条宏必须至少含一个斜杠否则会被当成普通选择表达式宏内部不能有空格它被当作一个词读取选择集和对象的命名只能用字母、数字、下划线要避开! # $ % ^ * ( ) [ ] { } \ | ~ ? / 这些字符否则解析直接失败。注意宏和 selection-expression 混用时会先翻译再求值调试复杂选择时先select tmp, ...看一眼选中范围再套用到show或color上。5. cartoon 渲染与脚本化出图5.1 cartoon 的 type 参数怎么选cartoon是论文主图的默认选项命令格式为cartoon type, (selection)不指定 type 时走自动判断type视觉特征适用情况automatic按二级结构自动切换通用最省事loop细管环区等宽想看拓扑走向tube比 loop 粗的管大分子整体展示putty粗细随 B-factor 变化展示柔性、无序区oval / rectangle椭圆、矩形截面强调螺旋的截面感cmd.cartoon(putty, channel) # 按 B-factor 显示粗细 cmd.set(cartoon_putty_scale_max, 3.0) # 最粗端的放大倍数 cmd.set(cartoon_putty_radius, 0.3) # 基线半径 cmd.show(cartoon, channel)putty 的粗细由 B-factor 映射而来值越高画得越粗解读时必须在图注里说明这一点否则读者会把「粗」误读成「重要」。5.2 从交互到脚本三种保存方式的配合PyMOL 缺 undo用会话文件弥补File → Save Session 生成.pse随时可存、不可编辑打开后回到当时的对象、视角和显示状态。命令记录走log_open产出.pml文本可用script.pml重放日志记录不包含视角要额外用get_view补进去。三种产物的分工如下产物可编辑记录内容调用方式.pml是命令历史script.pml.pse否完整会话状态File → Open.png否渲染结果直接引用5.3 一份可复用的出图脚本与自查把交互过程固化成脚本是保证多张配图风格一致的关键。下面这份以 2vl0 为例from pymol import cmd cmd.load(2vl0.pdb, channel) # 载入并命名 cmd.hide(everything) # 清空默认全原子显示 cmd.show(cartoon, channel) # 主体走 cartoon cmd.color(red, ss h) # 螺旋红 cmd.color(yellow, ss s) # 折叠黄 cmd.color(green, ss l) # 环绿 cmd.orient(channel) # 统一朝向 cmd.set(ray_shadows, 0) # 关阴影避免灰底 cmd.set(antialias, 2) # 抗锯齿等级 cmd.ray(1600, 1200) # 渲染 1600x1200 cmd.png(fig1_channel.png, dpi300) # 落盘ray是出图前的关键一步它做光线追踪带来三维反射和阴影效果ray(1600, 1200)的两个参数是像素宽高直接决定投稿时的分辨率是否达标。渲染前先set ray_shadows, 0可以得到干净白底antialias提到 2 以上字迹边缘才不毛。脚本跑完后打开 PNG 确认三件事像素尺寸与期刊要求一致、各元素颜色与图注对应、视角方向和上一张图保持同一套orient基准。把这份脚本连同.pml一起归档半年后补图时改两行参数即可复现。本文还有配套的精品资源点击获取
返回列表