我相信这一点以前在这里已经问过,但我似乎找不到任何联系,可以帮助我解决我的特殊问题。
我正在使用vmd中的tcl脚本来进行快速分析。
package require pbctools
set wat [atomselect top "segid HETA"]
set pbcbox [pbc get -now]
set Lz [lindex [lindex $pbcbox 0] 2]
set Qwat 0
puts [$wat get charge]
foreach i{$wat get z} j{$wat get charge} {set $Qwat [expr $Qwat + $j * ($i + 0.5 * $Lz) / $Lz]}
#puts $Qwat当我运行这个脚本时,我得到了错误:

当原子选择0表示它设置得很好时,100.608742是方框Lz的长度,它正在为每个原子找到电荷(每个原子都有一个负电荷)。
但是,它在这个foreach循环上失败了,我希望它同时通过位置和电荷进行迭代。所以,列表1中的第1行和列表2中的第1行,我已经尝试了我能想到的每一个语法迭代,但我似乎无法让这个表达式在foreach循环中工作。
我在这里做错了什么?
发布于 2022-05-04 19:44:45
问题是,您缺少了一些用于Tcl的空白来理解您想要的内容。
因此,foreach i{$wat get z} j{$wat get charge} {}创建了3个变量(假设$wat是"atomselect0"):
}”
如您所见,没有变量"j“。我猜你想要的可能是:
foreach i [$wat get z] j [$wat get charge] {
set $Qwat [expr {$Qwat + $j * ($i + 0.5 * $Lz) / $Lz}]
}(除了一些不寻常的情况外,通常最好用你的表达方式来表达。所以我也做了这个改变,虽然这不是绝对必要的。)
https://stackoverflow.com/questions/72118247
复制相似问题