计算化学公社

 找回密码 Forget password
 注册 Register
Views: 10294|回复 Reply: 4
打印 Print 上一主题 Last thread 下一主题 Next thread

[VMD] vmd中以dynamic bonds形式识别不了氢原子与氢原子成键,是软件的bug吗

[复制链接 Copy URL]

38

帖子

0

威望

585

eV
积分
623

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
测试了一下,将H2分子的pdb文件和O2分子的pdb文件分别导入vmd中,都以dynamic bonds形式显示,调整成键阈值,氧气的情况是正常的,但对氢气分子怎么调节阈值都没有显示原子,虽然CPK形式是可以显示成键的,但是我在进行一个MD模拟计算过程中,体系中间会生成氢气分子,我在播放轨迹时想让成键和断键动态显示,就遇到问题了,以dynamic bonds形式显示,调节成键阈值始终无法使两个H原子成键,H原子会在动力学过程中突然不可见(一开始H是和其他原子成键,MD模拟中间过程断键形成H2,突然不可见也就是因为此),但H-H之间却始终不成键。

186

帖子

1

威望

4529

eV
积分
4735

Level 6 (一方通行)

5#
发表于 Post on 2019-8-29 20:22:04 | 只看该作者 Only view this author
我现在不能用谷歌,找不到原文在哪了。这可能是保存下来的一小段,你要用就看着改吧。
  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. }
复制代码

82

帖子

0

威望

512

eV
积分
594

Level 4 (黑子)

4#
发表于 Post on 2019-8-29 17:55:15 | 只看该作者 Only view this author
本帖最后由 huangyoyo 于 2019-8-29 17:57 编辑
fsh 发表于 2019-8-18 18:20
好的,谢谢老师

请问回调函数怎么写?我也是需要观察氢气的生成。

38

帖子

0

威望

585

eV
积分
623

Level 4 (黑子)

3#
 楼主 Author| 发表于 Post on 2019-8-18 18:20:39 | 只看该作者 Only view this author
sobereva 发表于 2019-8-16 07:12
dynamic bonds对H-H应当是不奏效,至少对于1.9.3版而言

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

好的,谢谢老师

6万

帖子

99

威望

5万

eV
积分
124694

管理员

公社社长

2#
发表于 Post on 2019-8-16 07:12:54 | 只看该作者 Only view this author
dynamic bonds对H-H应当是不奏效,至少对于1.9.3版而言

这种情况可以自己创建个回调函数,每次帧号变化的时候,就自动用回调函数执行mol bondsrecalc all; topo retypebonds,就会重新根据距离判断成键。这时候用CPK就可以了
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

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

GMT+8, 2026-1-25 05:00 , Processed in 0.157375 second(s), 21 queries , Gzip On.

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