计算化学公社

标题: vmd中以dynamic bonds形式识别不了氢原子与氢原子成键,是软件的bug吗 [打印本页]

作者
Author:
fsh    时间: 2019-8-16 00:53
标题: vmd中以dynamic bonds形式识别不了氢原子与氢原子成键,是软件的bug吗
测试了一下,将H2分子的pdb文件和O2分子的pdb文件分别导入vmd中,都以dynamic bonds形式显示,调整成键阈值,氧气的情况是正常的,但对氢气分子怎么调节阈值都没有显示原子,虽然CPK形式是可以显示成键的,但是我在进行一个MD模拟计算过程中,体系中间会生成氢气分子,我在播放轨迹时想让成键和断键动态显示,就遇到问题了,以dynamic bonds形式显示,调节成键阈值始终无法使两个H原子成键,H原子会在动力学过程中突然不可见(一开始H是和其他原子成键,MD模拟中间过程断键形成H2,突然不可见也就是因为此),但H-H之间却始终不成键。
作者
Author:
sobereva    时间: 2019-8-16 07:12
dynamic bonds对H-H应当是不奏效,至少对于1.9.3版而言

这种情况可以自己创建个回调函数,每次帧号变化的时候,就自动用回调函数执行mol bondsrecalc all; topo retypebonds,就会重新根据距离判断成键。这时候用CPK就可以了
作者
Author:
fsh    时间: 2019-8-18 18:20
sobereva 发表于 2019-8-16 07:12
dynamic bonds对H-H应当是不奏效,至少对于1.9.3版而言

这种情况可以自己创建个回调函数,每次帧号变化 ...

好的,谢谢老师
作者
Author:
huangyoyo    时间: 2019-8-29 17:55
本帖最后由 huangyoyo 于 2019-8-29 17:57 编辑
fsh 发表于 2019-8-18 18:20
好的,谢谢老师

请问回调函数怎么写?我也是需要观察氢气的生成。
作者
Author:
highlight    时间: 2019-8-29 20:22
我现在不能用谷歌,找不到原文在哪了。这可能是保存下来的一小段,你要用就看着改吧。
  1. # Pickbond
  2. # Author: Justin Gullingsrud
  3. # Date: 11 January, 2001
  4. # Compatible VMD versions: Post-1.6; i.e, anything built after the above
  5. #    date ;-)  You can rewrite the delbond and addbond procs below to reflect
  6. #    the current state of VMD's bond changing API; it's undergone a bit of flux.


  7. # This is a script to allow users to add or delete bonds by picking atoms
  8. # with the mouse.  Type "pickbond add" at the text console, and now picking
  9. # pairs of atoms will result a new bond being created between them.
  10. # "pickbond del" will cause bonds between picked pairs of atoms to be
  11. # deleted.  "pickbond stop" ceases all pickbond behavior.


  12. proc delbond { molid atom1 atom2 } {
  13.   if { $atom1 > $atom2 } {
  14.     set tmp $atom1
  15.     set atom1 $atom2
  16.     set atom2 $tmp
  17.   }
  18.   set sel [atomselect $molid "index $atom1 $atom2"]
  19.   lassign [$sel getbonds] bond1 bond2
  20.   
  21.   set id [lsearch -exact $bond1 $atom2]
  22.   if { $id != -1 } {
  23.     set bond1 [lreplace $bond1 $id $id ]
  24.   }
  25.   set id [lsearch -exact $bond2 $atom1]
  26.   if { $id != -1 } {
  27.     set bond2 [lreplace $bond2 $id $id ]
  28.   }
  29.   $sel setbonds [list $bond1 $bond2]
  30.   $sel delete
  31. }

  32. proc addbond { molid atom1 atom2 } {
  33.   if {$atom1 == $atom2 } {
  34.     #error "cannot bond an atom to itself"
  35.     return
  36.   }
  37.   if { $atom1 > $atom2 } {
  38.     set tmp $atom1
  39.     set atom1 $atom2
  40.     set atom2 $tmp
  41.   }
  42.   set sel [atomselect $molid "index $atom1 $atom2"]
  43.   lassign [$sel getbonds] bond1 bond2

  44.   set id [lsearch -exact $bond1 $atom2]
  45.   if { $id == -1 } {
  46.     lappend bond1 $atom2
  47.   }
  48.   set id [lsearch -exact $bond2 $atom1]
  49.   if { $id == -1 } {
  50.     lappend bond2 $atom1
  51.   }
  52.   $sel setbonds [list $bond1 $bond2]
  53.   $sel delete
  54. }

  55. # set this proc to trace on vmd_pick_atom

  56. set pickbond_molid -1
  57. set pickbond_atom1 -1
  58. set pickbond_proc addbond

  59. proc pickbond_trace { name1 name2 op } {
  60.   global pickbond_proc pickbond_molid pickbond_atom1 vmd_pick_mol vmd_pick_atom

  61.   if { $pickbond_molid == -1 } {
  62.     # this is the first atom
  63.     set pickbond_molid $vmd_pick_mol
  64.     set pickbond_atom1 $vmd_pick_atom
  65.   } else {
  66.     # we have two atoms: call the proc
  67.     catch {$pickbond_proc $pickbond_molid $pickbond_atom1 $vmd_pick_atom}
  68.     set pickbond_molid -1
  69.     set pickbond_atom1 -1
  70.   }
  71. }

  72.       
  73. #
  74. # pickbond [add | del | stop ]
  75. #
  76. proc pickbond { op } {
  77.   global pickbond_molid pickbond_atom1 pickbond_proc

  78.   set pickbond_molid -1
  79.   set pickbond_atom1 -1

  80.   uplevel {trace vdelete vmd_pick_atom w pickbond_trace}

  81.   if { $op == "add" } {
  82.     set pickbond_proc addbond
  83.     uplevel {trace variable vmd_pick_atom w pickbond_trace}
  84.   } elseif { $op == "del" } {
  85.     set pickbond_proc delbond
  86.     uplevel {trace variable vmd_pick_atom w pickbond_trace}
  87.   } elseif { $op == "stop" } {
  88.     puts "No more pickbond"
  89.   } else {
  90.     error "Unknown option: choose one of add, del, or stop"
  91.   }
  92. }
复制代码





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