计算化学公社

标题: 求助VMD脚本仅能准确统计一帧的问题 [打印本页]

作者
Author:
cuicuishark    时间: 2025-4-24 10:11
标题: 求助VMD脚本仅能准确统计一帧的问题
求助各位老师,在使用该脚本统计两分子与水形成的氢键桥中两个氢键的平均键角时,如果仅统计一帧数据准确,统计多帧数时出现错误的键角数据(如30度),经检查问题大概率出在第二次foreach循环但是没有发现具体问题是什么

作者
Author:
Uus/pMeC6H4-/キ    时间: 2025-4-24 13:23
本帖最后由 Uus/pMeC6H4-/キ 于 2025-4-24 13:35 编辑

问题应该出在定义选区这里
  1. for {set i 0} {$i < $frames} {incr i} {
  2. set FCOOH [atomselect top "resname 8S3A and name H22 O3" frame $i]
  3. set FCOO [atomselect top "resname O7WK and name O2 O3" frame $i]
  4. set SOL [atomselect top "resname 6UAV" frame $i]
  5. ...}
复制代码
建议更改为如下写法,在循环外定义选区、循环每一帧时更新对应帧号并相应更新实际选择范围
  1. set FCOOH [atomselect top "resname 8S3A and name H22 O3"]
  2. set FCOO [atomselect top "resname O7WK and name O2 O3"]
  3. set SOL [atomselect top "resname 6UAV"]
  4. for {set i 0} {$i < $frames} {incr i} {
  5. $FCOOH frame $i; $FCOOH update
  6. $FCOO frame $i; $FCOO update
  7. $SOL frame $i; $SOL update
  8. ...}
复制代码


编辑:等等,由于选区范围只用resname和name定义,理论上应该各帧一致。如果涉及空间上的几何判据改变(比如within 4 of ...这种),那确实有必要像上面一样指定实时更新。

另一个可能出问题的是后面逐帧测量键角处,measure angle指令应该加frame $i选项确定测量所用的帧。

作者
Author:
cuicuishark    时间: 2025-4-25 08:59
Uus/pMeC6H4-/キ 发表于 2025-4-24 13:23
问题应该出在定义选区这里
建议更改为如下写法,在循环外定义选区、循环每一帧时更新对应帧号并相应更新实 ...

问题解决了,非常感谢您的解答!




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