本帖最后由 luzujia 于 2024-5-25 20:44 编辑
研究了一下怎么批量实现键级的自动标注,在此整理向大家分享。(虽然有这个需求的小伙伴应该不多,但万一有用呢)
好像没有任何的可视化程序可以直接显示分子的键级,受社长利用原子显示静电势表面极值点的方法的启发,实现了基于VMD的键级自动标注。
步骤: 1. 首先要有一个键级列表文件,我的命名格式为[mol]_bond_BO.txt,文件的结构如下:
第一列是化学键,第三列是键级,第二列是键长,并没有什么用,写成这种格式是“历史原因”。这个文件我是用脚本从Multiwfn里输出的键级记录文件bndmat.txt里读的,基本思路是先从高斯输出文件里读键连关系,再去bndmat.txt里找相应的键级。这个脚本也给了,就是附件里的geom.sh。从名字可以看出来,这个脚本原来是用来从高斯输出文件里读键长、键角、二面角的。不带参数执行会输出如下的使用说明
简单解释一下,i/o分表代表”读初始结构/读最后一帧结构”,<B/A/D/T>分别代表输出”键长/键角/二面角/全部”,如果第三个参数是一个文件那就会去读键级。在我的例子中,执行“geom.sh ske100.out i bndmat.txt”就得到ske100_bond_BO.txt。在后面的bo_visual.sh和showchrg.vmd两个脚本中,都是按这个规则去找相对应的文件的。所以要注意文件名命名格式,或者改脚本以符合你的习惯。同理,我定义键级文件是3列的,如果你用自己的方法得到的没有键长这一列,要嘛随便填点东西占位,要嘛改脚本。
2. 把分子结构文件转为mol2格式,我是用Open Babel把高斯输出文件转成mol2文件。命令为“obabel -ig98 input_file -omol2 -O output_file”。
3. 用bo_visual.sh生成mol2文件对应的“键级点”文件[mol]_bo.mol2。我进行自动标注的思路是在每个键的中心点定义一个原子(就叫做键级点吧),把键级写到原子电荷的位置(@<TRIPOS>ATOM字段的最后一列),然后用vmd同时载入分子结构文件和键级点文件,然后显示键级点的原子电荷,这就实现了自动标注键级的作用。
4. 把所有的[mol].mol2、[mol]_bo.mol2文件和附件里的showchrg.vmd、showchrg.tcl脚本都拷到VMD文件夹里。在VMD命令行窗口输入“source showchrg.vmd”就会对所有分子进行批量键级标注。效果如下:
图中红色的点表示该键的键级最小,特别用不同元素作了标识。VMD默认的原子标签是绿色的,如果想用别的颜色(像这个例子改成了紫色),就按“Graphics--Colors--Labels--Atoms--Colors”在VMD里设置完再运行脚本。
5. 把多张图片排版合并成大图。这是个人的需求,让gpt写了个python脚本实现这个功能,我觉得还挺方便的,也在此分享出来(附件里的image_grids.py,要安装Pillow模块:“pip install pillow”)。先用IrfanView批量裁去白边,再调用image_grids.py进行排版,命令为“python image_grids.py/path/to/images output_grid --rows 3 --cols 3 --add_labels --font_path/path/to/arial.ttf --font_size 24 --h_spacing 10 --v_spacing 10”。可以定义每行和每列放几个,在每个小图下标注其对应的文件名,还可以定义字体(直接用系统自带的字体,如C:/Windows/Fonts/arial.ttf)、还能定义横向和纵向间距。最后效果如下,效果嘛,只能说差强人意吧。
|