# 目录结构说明 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 # 显示小分子的表面 ``` ## 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 (之后选择破解的版本) ```