如何在tcl脚本中获得准确的帧数?

时间:2015-02-15 22:19:53

标签: tcl vmd

我的轨迹包含75帧(* .dcd文件)。但是当我尝试通过tcl命令计算帧数时:

set id [molinfo top get id ]
puts [molinfo $id get numframes]

我得到的数字要低得多,即3。

那么如何才能获得正确的帧数?

PS:我知道我可以将VMD用于此目的,但轨迹文件位于远程计算机上,我需要运行多个计算,如RMSD,这取决于通过代码的帧数(没有图形界面) )。

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但是我找到了解决方案,希望它能对其他人有所帮助。

问题:默认情况下,VMD不会(阻止)加载所有帧

当不是所有框架都加载时,我遇到了您的VMD问题,似乎只有几个框架。在VMD focumentation中,强调我的观点:

  

mol addfile等待:   ...   返回前要加载多少帧; 默认值为1 ... [其他]帧将在后台加载 ...如果帧为-1或全部,则所有仍在处理中的文件中的所有帧将在之前加载该命令返回...

因此,默认情况下,除非指定了waitfor,否则我们只希望加载一帧。如果有更多的帧(例如加载了3/75),那是因为VMD在后台加载了更多帧。

解决方案:加载时使用waitfor

尤其是在加载时,我建议执行以下操作:

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”标志。