首页 > 解决方案 > 如何将整数传递给 vmd 中的 tcl 过程

问题描述

我是 tcl 编程的新手,我需要为 vmd 编写一个脚本,计算两对原子之间的两个距离并将它们打印到输出文件中。我不明白为什么 measure 不能采取 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

    }

标签: tclvisualizationvmd

解决方案


这里的问题是:

measure bond {$atom_1 $atom_2} frame $i

问题是{Tcl 中的 ...<code>}实际上意味着“完全引用这个,完全没有替换”。它不是发送一个包含两个数字的列表,而是传递一个包含两个非数字的列表(文字字符串$atom_1$atom_2)。

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


是的,并且proc利用这种行为。只是它们在执行过程中将事物传回 Tcl 解释器引擎。forif


推荐阅读