计算化学公社

标题: 通过VMD的tcl脚本可以实现特定化学键成键,而其他键不成键嘛? [打印本页]

作者
Author:
sigusigu    时间: 2022-11-30 12:44
标题: 通过VMD的tcl脚本可以实现特定化学键成键,而其他键不成键嘛?
最近在做黏土矿物纳米孔隙内流体行为分析,其中黏土矿物为伊利石,采用ClayFF力场,该力场的成键作用只考虑OH,其他Al-O和Si-O都视为不存在。在这种情况下如果使用VMD的guessbonds命令则会生成所有的化学键,但是除了OH外其他的键都不需要,如何指定只生成OH呢?
通过tcl脚本能实现嘛?还是通过Python脚本才能实现这种操作?

作者
Author:
乐平    时间: 2022-11-30 19:50
看你的描述,是希望用 VMD 显示轨迹文件里的某些化学键(比如 O-H 键),而不显示另一些化学键(比如 Al-O, Si-O 键)?

其实不需要 Tcl 语言,只用设置显示的样式就行了。

在 VMD 主界面的菜单栏上点击 “Graphics” ——> “Representations” 。在弹出的对话框中如下设置
(, 下载次数 Times of downloads: 19)

简单地说,就是将原始图层用 VDW 显示,可以调节半径到你喜欢的大小。然后新建一个图层,如红框所示,选择你关注的 O H (name O H),然后将显示方法改为 Dynamic Bonds,然后设置合适的 Distance Cutoff 值(即显示为成键的范围)。


作者
Author:
sigusigu    时间: 2022-11-30 22:17
乐平 发表于 2022-11-30 19:50
看你的描述,是希望用 VMD 显示轨迹文件里的某些化学键(比如 O-H 键),而不显示另一些化学键(比如 Al-O, ...

我这个不是显示轨迹文件,是想通过VMD生成lammps的data文件。研究方向是纳米孔隙内的流体行为。建模流程是:作为纳米孔的伊利石在MS里面建模,然后导出的pdb文件,通过packmol在里面填充流体分子,导出整体伊利石+流体分子的pdb文件,然后再VMD中生成包含键、角、二面角信息的data文件,但是使用guessbond的话,就生成所有的化学键了,而要用的伊利石力场又要求只考虑OH的成键作用,就很纠结...
作者
Author:
sobereva    时间: 2022-12-1 06:31
得自己写VMD tcl脚本
作者
Author:
sigusigu    时间: 2022-12-1 09:41
sobereva 发表于 2022-12-1 06:31
得自己写VMD tcl脚本

好的,感谢站长大大,我去学习一下tcl命令,之前不太确定能不能用tcl做这个,怕白学了。我准备参考下面这个tcl脚本:http://bbs.keinsci.com/thread-4753-1-1.html
作者
Author:
sigusigu    时间: 2022-12-1 20:31
sobereva 发表于 2022-12-1 06:31
得自己写VMD tcl脚本

站长!我遇到了一个小问题,我今天学习了一下tcl命令,按照我的需求编译了一下:
topo clearbonds
         topo clearangles
set ilist [[atomselect top "name OH"] get index]; #select O of OH
foreach i $ilist {   
set j [atomselect top "name HO and within 2 of index $i"];  
set k [atomselect top "name Al and within 2 of index $i"];
topo addbond [$j get index] $i -bondtype 1;
topo addangle [$k get index] $i [$j get index] 2;
}
但是VMD报错为expected integer but got "69 71"
逐句排查了一下,发现如果不涉及变量k,能正确形成OH键,所以问题应该出在set k [atomselect top "name Al and within 2 of index $i"];或者topo addangle [$k get index] $i [$j get index] 2; 但是这句话很简洁而且我也找不出问题,希望您指点一下![img][/img]

作者
Author:
sigusigu    时间: 2022-12-2 09:20
sobereva 发表于 2022-12-1 06:31
得自己写VMD tcl脚本

站长,问题已解决,我是在晶胞里给给上下两个对称Al元素定义了不同的type(Al1,Al2),然后就不会一起被选中了。
作者
Author:
sigusigu    时间: 2022-12-8 21:04
更新一下,其实给Al元素定义不同type的话也不太能解决问题,最后发现通过以下代码能实现基本功能,给大家参考一下。
set OH [[atomselect top "type OH"] get index];
foreach i $OH {   
set j [atomselect top "type HO and within 2 of index $i"];  
topo addbond [$j get index] $i;
}

set Al [[atomselect top "type Al"] get index];
set HO [[atomselect top "type HO"] get index];
foreach k $OH {foreach l $HO {foreach m $Al {
        set dist1 [measure bond "$m $k"]
    set dist2 [measure bond "$l $k"]
        if {($dist1<2)&&($dist2<2)} {topo addangle $k $l $m}
}}}




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3