我的轨迹包含 75 帧(*.dcd 文件)。但是当我尝试通过 tcl 命令计算帧数时:
set id [molinfo top get id ]
puts [molinfo $id get numframes]
我得到的数字要低得多,即 3。
那么我怎样才能得到正确的帧数呢?
PS:我知道我可以使用VMD来达到这个目的,但是轨迹文件在远程计算机上,我需要运行几个计算,比如RMSD,这取决于通过代码的帧数(没有图形界面)。
这是一个老问题,但我找到了解决方案并希望它对其他人有所帮助。
当并非所有帧都加载时,我遇到了您的 VMD 仅出现几帧的问题。从VMD focumentation,强调我的:
mol addfile waitfor: ... 在返回之前要加载多少帧;默认值为 1 ... [additional] 帧将在后台加载... 如果 frames 为 -1 或 all,则在命令返回之前,将立即加载所有仍在进行中的文件中的所有帧 ...
因此,默认情况下,我们只希望加载一帧,除非我们指定 waitfor 。如果有更多帧(例如加载了 3/75),那是因为 VMD 在后台加载了更多。
特别是在加载时,我建议执行以下操作:
set id [mol new "example.psf"]
mol addfile "example.dcd" waitfor all molid $id;
set n_frames [molinfo $id get numframes]
puts "There are $n_frames frames"
关键部分是以下行:
mol addfile "example.dcd" waitfor all molid $id;
如上所述,其中使用了“waitfor”标志。