我是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
}发布于 2020-06-09 08:34:56
这里的问题是:
measure bond {$atom_1 $atom_2} frame $i问题是{…}在Tcl中的意思实际上是“完全引用这个,根本没有替换”。它没有发送两个数字的列表,而是传递两个非数字的列表(文字字符串$atom_1和$atom_2)。
修复方法是将{$atom_1 $atom_2}替换为[list $atom_1 $atom_2]。
是的,proc、for和if利用了这种行为。只是他们将事情传回Tcl解释器引擎,作为执行的一部分。
https://stackoverflow.com/questions/62278136
复制相似问题