计算化学公社

标题: 关于在VMD中利用脚本输出一定范围内原子的成键信息 [打印本页]

作者
Author:
ruanyang    时间: 2015-4-3 08:33
标题: 关于在VMD中利用脚本输出一定范围内原子的成键信息
本人自己编写了一个简单的tcl脚本用于判断选中原子是否成键,但是在运行时出现错误:invalid bareword "get"
in expression "(sqrt(($i _@_get x-$j get x)*($i ge...";
should be "$get" or "{get}" or "get(...)" or ...
我自己修改的一段时间问题没有解决!特此发帖请各位高手帮帮忙!!!!谢谢大家了
  1. mol load gro cntsol_md.gro
  2. set outfile [open ruanyang.dat w]
  3. set a [atomselect top "resname gri and y > 25.389998"]
  4. puts $outfile [$a get resid]
  5. close $outfile
  6. set list_1 {}
  7. set list_2 {}

  8. foreach {i j} {open ruanyang.dat r} {
  9.   set x1 {$i get x}
  10.   set y1 {$i get y}
  11.   set z1 {$i get z}
  12.   set x2 {$j get x}
  13.   set y2 {$j get y}
  14.   set z2 {$j get z}
  15.   
  16.   set list_1 [expr (sqrt(($x1-$x2)*($x1-$x2)+($y1-$y2)*($y1-$y2)+($z1-$z2)*($z1-$z2)))]
  17.   
  18.   if {$list_1 < = 1.42 && $list_1 > 1.40} {
  19.    lappend list_1 $i $j
  20.    } else {
  21.    lappend list_2 $list_1
  22.   }
  23. }

  24. mol top delete
复制代码



作者
Author:
sobereva    时间: 2015-4-3 17:08
暂时太忙没时间仔细看,貌似set x1 {$i get x}应该为set x1 [$i get x]
作者
Author:
ruanyang    时间: 2015-4-3 18:12
谢谢Sob老师的回帖,问题解决的差不多了!你说的那个地方是有错误!等我改好了,把正确的脚本传上来!给大家做个参考 Sob老师的量化培训班一定会很精彩的
作者
Author:
ruanyang    时间: 2015-4-4 14:28
已顺利解决这个问题,其实这个脚本不仅可以得到键的信息,也可以得到角,二面角的信息!(只要进行适当的修改)。这个是第一次写TCL脚本,其中有不少不足的地方!(特别是在数学计算的地方,可以利用  向量的计算代替,可以提高计算效率)!希望有懂TCL的坛友们,将这个脚本进行完善! 谢谢
作者
Author:
ruanyang    时间: 2015-4-4 14:29
  1. mol load gro xxx.gro
  2. set a [atomselect top "resname gri and y > distance"]
  3. set resnb [$a get resid]
  4. set xyz [$a get {x y z} ]
  5. set b {}
  6. set d {}

  7. set out_in [open bond.txt w]
  8. set out_ry [open bond_out.txt w]


  9. foreach i $resnb {
  10.         foreach j $resnb {
  11.            if $j>$i {
  12.                         set x1 [[atomselect top "resid $i"] get x]
  13.                         set y1 [[atomselect top "resid $i"] get y]
  14.                         set z1 [[atomselect top "resid $i"] get z]
  15.                         set x2 [[atomselect top "resid $j"] get x]
  16.                         set y2 [[atomselect top "resid $j"] get y]
  17.                         set z2 [[atomselect top "resid $j"] get z]
  18.                         set r [expr {sqrt(($x1-$x2)*($x1-$x2)+($y1-$y2)*($y1-$y2)+($z1-$z2)*($z1-$z2))}]
  19.                         if {$r < 1.43&&$r > 1.40} {
  20.                                 lappend b "$i $j $r \n"
  21.                         } else {
  22.                                 lappend d "$i $j \n"
  23.                         }
  24.                 }
  25.         }
  26. }

  27. puts $out_in $b
  28. puts $out_ry $d
  29. close $out_in
  30. close $out_ry

  31. mol delete top
复制代码







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