计算化学公社

标题: VMD编写tcl脚本求助 [打印本页]

作者
Author:
让你变成回忆    时间: 2018-3-27 20:23
标题: VMD编写tcl脚本求助
通过模拟得到了一个二元混合体系(分别记为分子1和分子2),现在我想以某个分子(分子1)为中心,把它周围一定距离范围内的所有分子2都选出来,以便后续计算。

现在写出来的tcl脚本能实现找到所有满足条件的分子2,问题是:能否把这些分子的元素符号以及x、y、z坐标输出成一个坐标文件以便VMD可以直接打开。

我是通过atomselect0 get {name x y z}这样的方式,但是这样的问题就是一行出现很多次元素名称以及坐标,没有换行。

作者
Author:
sobereva    时间: 2018-3-28 15:11
用lindex命令把列表里的元素提出来之后再输出
作者
Author:
让你变成回忆    时间: 2018-3-29 08:48
sobereva 发表于 2018-3-28 15:11
用lindex命令把列表里的元素提出来之后再输出

OK,搞定了。之前没弄明白列表里具体的信息。
谢谢sob老师~
作者
Author:
让你变成回忆    时间: 2018-3-29 19:14
sobereva 发表于 2018-3-28 15:11
用lindex命令把列表里的元素提出来之后再输出

sob老师您好,再请问您一下:能否将选中的结构输出成一个gro文件呢?  还是说只有先提取了各部分内容,然后另外写程序来输出。
作者
Author:
sobereva    时间: 2018-3-29 20:21
可以用$sel writegro citrus.gro来把$sel对应的原子保存出gro文件
作者
Author:
HJC    时间: 2020-12-14 14:11
楼主您好!我也想统计给定距离范围内的这样一个二元或三元的dimer,但由于本人才疏学浅,尝试后还是不会写tcl脚本,您方便的话可以分享一下吗?感谢!
作者
Author:
让你变成回忆    时间: 2020-12-14 18:16
本帖最后由 让你变成回忆 于 2020-12-14 18:17 编辑
HJC 发表于 2020-12-14 14:11
楼主您好!我也想统计给定距离范围内的这样一个二元或三元的dimer,但由于本人才疏学浅,尝试后还是不会写t ...

这个脚本年代有些久远了,后来我用了其他语言实现该功能(不过由于这里面调用了别人的一些代码,所以不方便公开代码,抱歉),就再也没用过这个tcl脚本了。
我大概找了一下,你可以试试下面的代码:
  1. set nmol [llength [lsort -unique [[atomselect top all] get residue]]]
  2. set guest [atomselect top "resid 1400"]
  3. set gcom [measure center $guest weight mass]
  4. set x0 [lindex $gcom 0]
  5. set y0 [lindex $gcom 1]
  6. set z0 [lindex $gcom 2]

  7. for {set imol 1} {$imol <= $nmol} {incr imol} {
  8. set sel [atomselect top "resid $imol"]
  9. set COM [measure center $sel weight mass]
  10. set x($imol) [lindex $COM 0]
  11. set y($imol) [lindex $COM 1]
  12. set z($imol) [lindex $COM 2]
  13. }


  14. $sel delete

  15. set crit 20

  16. set output [open ./output w]
  17. for {set i 1} {$i <= $nmol} {incr i} {
  18. set sel [atomselect top "resid $i"]
  19. set dx2 [expr ($x($i)-$x0)**2]
  20. set dy2 [expr ($y($i)-$y0)**2]
  21. set dz2 [expr ($z($i)-$z0)**2]
  22. set dist [expr sqrt($dx2+$dy2+$dz2)]
  23. if {$dist <= $crit} {
  24.         set data [$sel get { resid resname name serial x y z}]
  25.         set numh [$sel num]
  26.         for {set j 0 } {$j < $numh} {incr j} {
  27.                 puts $output [lindex $data $j]
  28.         }
  29. }
  30. }
  31. close $output
复制代码



作者
Author:
HJC    时间: 2020-12-14 19:51
让你变成回忆 发表于 2020-12-14 18:16
这个脚本年代有些久远了,后来我用了其他语言实现该功能(不过由于这里面调用了别人的一些代码,所以不方 ...

谢谢您的帮助!我尝试一下,如果还是不会想等您空闲时,与您再进行交流~
作者
Author:
wdp    时间: 2021-12-23 21:43
您好,我想从钙钛矿体系中选出甲胺分子,您有类似的脚本可以分享一下吗

作者
Author:
sobereva    时间: 2021-12-24 01:35
wdp 发表于 2021-12-23 21:43
您好,我想从钙钛矿体系中选出甲胺分子,您有类似的脚本可以分享一下吗

结合实际情况举一反三
VMD里原子选择语句的语法和例子
http://sobereva.com/504http://bbs.keinsci.com/thread-14267-1-1.html




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