计算化学公社

 找回密码 Forget password
 注册 Register
Views: 298|回复 Reply: 7

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

[复制链接 Copy URL]

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

发表于 Post on 2022-11-30 12:44:23 | 显示全部楼层 Show all |阅读模式 Reading model
最近在做黏土矿物纳米孔隙内流体行为分析,其中黏土矿物为伊利石,采用ClayFF力场,该力场的成键作用只考虑OH,其他Al-O和Si-O都视为不存在。在这种情况下如果使用VMD的guessbonds命令则会生成所有的化学键,但是除了OH外其他的键都不需要,如何指定只生成OH呢?
通过tcl脚本能实现嘛?还是通过Python脚本才能实现这种操作?

347

帖子

0

威望

1385

eV
积分
1732

Level 5 (御坂)

发表于 Post on 2022-11-30 19:50:57 | 显示全部楼层 Show all
看你的描述,是希望用 VMD 显示轨迹文件里的某些化学键(比如 O-H 键),而不显示另一些化学键(比如 Al-O, Si-O 键)?

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

在 VMD 主界面的菜单栏上点击 “Graphics” ——> “Representations” 。在弹出的对话框中如下设置
VMD_dynamic_Bond.png

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

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

 楼主 Author| 发表于 Post on 2022-11-30 22:17:38 | 显示全部楼层 Show all
乐平 发表于 2022-11-30 19:50
看你的描述,是希望用 VMD 显示轨迹文件里的某些化学键(比如 O-H 键),而不显示另一些化学键(比如 Al-O, ...

我这个不是显示轨迹文件,是想通过VMD生成lammps的data文件。研究方向是纳米孔隙内的流体行为。建模流程是:作为纳米孔的伊利石在MS里面建模,然后导出的pdb文件,通过packmol在里面填充流体分子,导出整体伊利石+流体分子的pdb文件,然后再VMD中生成包含键、角、二面角信息的data文件,但是使用guessbond的话,就生成所有的化学键了,而要用的伊利石力场又要求只考虑OH的成键作用,就很纠结...

4万

帖子

99

威望

4万

eV
积分
89873

管理员

公社社长+计算化学玩家

发表于 Post on 2022-12-1 06:31:00 | 显示全部楼层 Show all
得自己写VMD tcl脚本
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办最高质量的各种计算化学类培训:初级量子化学培训班基础(中级)量子化学培训班分子动力学与GROMACS培训班量子化学波函数分析与Multiwfn程序培训班,内容介绍以及往届资料购买请点击链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的最佳途径。培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取培训最新消息、避免错过网上最有价值的计算化学文章!
欢迎加入人气最高、水准最高的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人,讨论范畴相同
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(最强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

 楼主 Author| 发表于 Post on 2022-12-1 09:41:03 | 显示全部楼层 Show all
sobereva 发表于 2022-12-1 06:31
得自己写VMD tcl脚本

好的,感谢站长大大,我去学习一下tcl命令,之前不太确定能不能用tcl做这个,怕白学了。我准备参考下面这个tcl脚本:http://bbs.keinsci.com/thread-4753-1-1.html

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

 楼主 Author| 发表于 Post on 2022-12-1 20:31:57 | 显示全部楼层 Show all
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]

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

 楼主 Author| 发表于 Post on 2022-12-2 09:20:17 | 显示全部楼层 Show all
sobereva 发表于 2022-12-1 06:31
得自己写VMD tcl脚本

站长,问题已解决,我是在晶胞里给给上下两个对称Al元素定义了不同的type(Al1,Al2),然后就不会一起被选中了。

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

 楼主 Author| 发表于 Post on 2022-12-8 21:04:07 | 显示全部楼层 Show all
更新一下,其实给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}
}}}

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2023-2-2 09:24 , Processed in 0.693537 second(s), 25 queries .

快速回复 返回顶部 返回列表 Return to list