Files
pymol/README.md
lingyuzeng dcb6d15a16 更新 README.md
添加一些用法
2025-09-03 20:39:48 +08:00

235 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 目录结构说明
asset放一些学习资料github仓库放不下就放到网盘中去。
plugin为自建的pymol的插件开发的一些代码
scripts为一些脚本文件主要是测试代码
## pymol 资源学习绘图
[各种作用力绘图](https://proteintools.uni-bayreuth.de./)
## 环境安装
```shell
conda install -c conda-forge ffmpeg pymol-open-source biopython loguru ipython rdkit click -y
```
## 最高质量渲染
```shell
util.performance(0)
rebuild
```
PyMOL可以用多种方式进行录制
1. **命令行录制**: 使用`log_open``log_close`命令可以将PyMOL的命令行操作记录到文本文件。
```
cmd.log_open('filename.log')
... # Your operations
cmd.log_close()
```
2. **Ray Tracing**: 使用`ray`命令渲染高质量的图片,然后用其他软件将图片合成为视频。
3. **使用`mset`和`mview`创建动画**: 如你之前所述,通过这两个命令创建动画,然后使用`mpng`命令将动画导出为PNG帧最后用其他软件将其合成为视频。
```
cmd.mpng('frame_prefix_', 1, 60)
```
4. **屏幕录制软件**: 使用外部屏幕录制软件如OBS、Camtasia等进行录制。
5. **PyMOL API和脚本**: 使用PyMOL的Python API和PyMOL脚本可以更精细地控制录制内容。
## PyMOL工作目录
使用`cd`命令改变PyMOL的工作目录。例如
```
cmd.cd("/path/to/new/directory")
```
## 图片渲染
设置600DPI
```shell
width = int(1920 * (600 / 72))
height = int(1080 * (600 / 72))
cmd.ray(width, height)
```
得到帧1至帧60的PNG图片
```shell
cmd.mset("1 x60 61 x60")
cmd.scene('frame1', 'store')
cmd.mview('store', state=1, scene='frame1')
cmd.scene('frame2', 'store')
cmd.mview('store', state=60, scene='frame2')
cmd.mview('interpolate')
for i in range(1, 61):
cmd.frame(i)
cmd.ray(1920, 1080, 300)
cmd.mpng(f'frame_prefix_{i}.png')
```
```shell
from dataclasses import dataclass, field
from typing import Tuple
from pathlib import Path
@dataclass
class PyMOLAnimator:
resolution: Tuple[int, int] = (1920, 1080)
dpi: int = 300
frame_count: int = 120
output_dir: Path = field(default_factory=lambda: Path('./'))
def save_frames(self, scene_1: str, scene_2: str):
import pymol.cmd as cmd
# 设置动画帧数
cmd.mset(f"1 x{self.frame_count} {self.frame_count+1} x{self.frame_count}")
# 存储第一帧和最后一帧
cmd.scene(scene_1, 'store')
cmd.mview('store', state=1, scene=scene_1)
cmd.scene(scene_2, 'store')
cmd.mview('store', state=self.frame_count, scene=scene_2)
# 插值以创建动画
cmd.mview('interpolate')
output_path = self.output_dir / 'frame_prefix_'
# 保存每一帧为PNG图片
for i in range(1, self.frame_count+1):
cmd.frame(i)
cmd.ray(self.resolution[0], self.resolution[1], self.dpi)
cmd.mpng(str(output_path) + f'{i}.png')
# 使用
animator = PyMOLAnimator((1920, 1080), 300, 120, Path('/path/to/save'))
animator.save_frames('frame1', 'frame2')
```
## 场景设置
`cmd.mview`和`cmd.scene`两者都用于存储视图状态,但用途和范围有所不同:
### `cmd.mview`
- **主要用途**: 用于电影插值,在电影播放中创建平滑过渡。
- **存储内容**: 主要存储相机和对象矩阵,用于电影帧之间的插值。
- **特定于帧**: 可以为电影中的特定帧或帧范围存储视图。
- **动画专用**: 主要用于创建复杂的电影动画。
```
cmd.mview('store', state=1, scene='frame1')
```
这会在状态1下用场景名`frame1`存储当前相机和对象矩阵。
### `cmd.scene`
- **主要用途**: 存储和恢复场景,方便用户随时回到特定的视图和设置。
- **存储内容**: 存储相机视图、所有对象的活动信息、所有原子的可见性和颜色、所有的表示形式和全局帧索引。
- **不特定于帧**: 主要用于一般目的的视图保存和恢复。
```
cmd.scene('MyScene', 'store', 'This is my special scene')
```
这会存储一个名为"MyScene"的场景,并附带一条消息。
### `select` and `create`
```shell
选择所有蛋白质: select 8g2c_pro, polymer.protein
创建一个新的对象: create 8g2c_pro, polymer.protein
选择所有核酸: select 8g2c_nucleic, polymer.nucleic
创建一个新的对象: create 8g2c_nucleic, polymer.nucleic
选择小分子: select 8g2c_tyk, resn TYK
```
### 背景美化
```shell
# 1. 设置背景为白色,并将表面透明度设置为 50%
bg_color white # 设置背景颜色为白色
set transparency, 0.5 # 设置所有表面透明度为 50%
# 2. 使表面显示使用原子自身的颜色
set surface_color_by_atom, 1 # 启用表面按原子颜色显示
# 3. 蛋白质:着色为橙色,并显示表面
color orange, polymer.protein # 将所有蛋白质polymer.protein着色为橙色
show surface, polymer.protein # 显示蛋白质的表面
# 4. 核酸:着色为白色,并显示表面
color white, polymer.nucleic # 将所有核酸polymer.nucleic着色为白色
show surface, polymer.nucleic # 显示核酸的表面
# 5. 小分子:根据分子的 ligand id这里假设用 organic 选择小分子)着色为红色,并显示表面
color red, organic # 将所有小分子organic着色为红色
show surface, organic # 显示小分子的表面
```
## 删除辅因子
```shell
# 删除8G2C中的辅因子保留TYK
cmd.remove("resn K or resn MG or resn SF4 or resn ZN")
# 删除8G2D中的辅因子保留TYK
cmd.remove("resn K or resn MG or resn SF4 or resn ZN")
```
## 一些用法笔记
```bash
# 关闭阴影渲染
set ray_shadows, off
set ray_shadow, 0.2
# 透明度
set transparency_mode, 2 # 会优化表面渲染效果,半透明看起来更自然。
set transparency, 0.5
# 创建蛋白质与核苷酸对象
create Protein_obj, polymer.protein
create RNA_obj, resn A+U+G+C+RA+RU+RG+RC
```
## Schrodinger_Suites linux install
```shell
cd Schrodinger_Suites_2021-2_Linux-x86_64
bash INSTALL 或者chmod u+x INSTALL ,之后 ./INSTALL
(接下来选安装路径,比如/home/laiguanxue/softwares/Schrodinger_Suites_2023)
后面一路yes
(将Crack/patcher拷贝到安装路径中)
chmod u+x schrodinger-2023-3-patcher-linux
./schrodinger-2023-3-patcher-linux
(之后选择破解的版本)
```