Я запускаю код с помощью консоли tk в VMD (Visual Molecular Dynamics). Первая проблема, с которой я столкнулся, заключалась в том, что код потреблял слишком много вычислительной мощности моего компьютера и приводил к отключению VMD. Я думаю, это потому, что я печатал каждый результат в файл. Мне действительно нужно только посмотреть на результаты, где расстояние меньше 20. Ниже приведен исходный код, который вызывал закрытие VMD:
set seg1 [atomselect top "segname LA0 and name CA"]
set seg2 [atomselect top "segname RA0 and name CA"]
set file [open "Contact_map27.dat" w]
set list1 [$seg1 get index]
set list2 [$seg2 get index]
foreach atom1 $list1 {
foreach atom2 $list2 {
set index1 [atomselect top "index $atom1"]
set index2 [atomselect top "index $atom2"]
set resid1 [[atomselect top "index $atom1"] get resid]
set resid2 [[atomselect top "index $atom2"] get resid]
set resnm1 [[atomselect top "index $atom1"] get resname]
set resnm2 [[atomselect top "index $atom2"] get resname]
puts $file "$resnm1 $resid1 $resnm2 $resid2 [veclength [vecsub [measure center $index1] [measure center $index2]]]"
$index1 delete
$index2 delete
}
}
close $file
Ниже приведена сделанная мной модификация, которая должна печатать значения только в том случае, если расстояние меньше 20:
set seg1 [atomselect top "segname LA0 and name CA"]
set seg2 [atomselect top "segname RA0 and name CA"]
set file [open "Contact_map27.dat" w]
set list1 [$seg1 get index]
set list2 [$seg2 get index]
foreach atom1 $list1 {
foreach atom2 $list2 {
set index1 [atomselect top "index $atom1"]
set index2 [atomselect top "index $atom2"]
set resid1 [[atomselect top "index $atom1"] get resid]
set resid2 [[atomselect top "index $atom2"] get resid]
set resnm1 [[atomselect top "index $atom1"] get resname]
set resnm2 [[atomselect top "index $atom2"] get resname]
set dist [[veclength [vecsub [measure center $index1] [measure center $index2]]]]
if {$dist < 20} {
puts $file "$resnm1 $resid1 $resnm2 $resid2 $dist"}
else {puts $file " "}
$index1 delete
$index2 delete
}
}
close $file
Сообщение об ошибке, которое я получаю, когда запускаю второй код: «Недопустимое имя команды» 26.774817104116487»
Если кто-нибудь может просто дать мне вторую пару глаз и сообщить мне, что происходит, я был бы очень признателен! Заранее спасибо!