如何将整数传递给 vmd 中的 tcl 过程



我是tcl编程的新手,我需要为vmd编写一个脚本,该脚本计算两对原子之间的两个距离并将它们打印在输出文件中。我不明白为什么措施不能采取atom_1等。这是我的脚本,感谢您的帮助

proc distance {distance_1 atom_1 atom_2 distance_2 atom_3 atom_4 output} {
set outfile [open $output w]
puts $outfile "frame, $distance_1, $distance_2"
set nf [molinfo top get numframes]
for {set i 0} {$i < $nf} {incr i} {
set d1 [measure bond {$atom_1 $atom_2} frame $i]
set d2 [measure bond {$atom_3 $atom_4} frame $i]
puts $outfile "$i , $d1 , $d2"
}
close $outfile
}

这里的问题是:

measure bond {$atom_1 $atom_2} frame $i

问题是{...Tcl中的}实际上意味着"准确引用此内容,完全没有替换"。它不是发送两个数字的列表,而是传递两个非数字的列表(文字字符串$atom_1$atom_2(。

解决方法是将{$atom_1 $atom_2}替换为[list $atom_1 $atom_2]


是的,procforif利用这种行为。只是它们将内容传递回 Tcl 解释器引擎作为执行的一部分。

最新更新