Вложенный цикл Tcl: неправильно # аргументы: должны быть для начала проверки следующей команды

Я пытаюсь выполнить вложенный цикл, но получаю сообщение об ошибке «неправильный # аргумент: должно быть «для начала проверки следующей команды». Что это значит, и может ли кто-нибудь помочь мне найти, что не так с моим кодом ?

Примечание. Я запускаю код в виртуальной молекулярной динамике (VMD), поэтому он включает некоторые термины, характерные для программы, такие как resid и mol. Пожалуйста, не обращайте на них внимания.

#count water molecules between chain A and chain C or between #chain B and chain C


set input_file [open ./name_3_pdb_chain_renamed.dat r]

set data [read $input_file]
set data [split $data "\n"]
close $input_file

set chain_list [lindex $data 0]

cd 7_count_water

set outfile [open count_water3.dat w]


set chain_compare ""

set pdblen [llength $chain_list]

for {set i 0} {$i<$pdblen} {incr i} 
{
set pid [lindex [lindex $chain_list $i] 0]

set len [llength [lindex $chain_list $i]]

mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb


mol modstyle 0 top NewCartoon



if {$len==4} {
    set chain_compare [lappend chain_compare $pid]
}

set 11 [atomselect top all]

set mid [$11 molid]

mol delete $mid
}




set lll [llength $chain_compare]

for {set j 0} {$j< $lll} {incr j} 
{

set pid [lindex $chain_compare $j]

mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb

set 11 [atomselect top "chain A and name CA"]

set res_len [llength [$11 get resid]]

set res_id [$11 get resid]

#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$al get resid]]
set ag_id [$al get resid]


#loop water between chain A and chain C
for {set k 0} {$k<$res_len} {incr k} 
{

    set water_around_a [atomselect top "{resname HOH and {within 5.0 of {chain A and resid [lindex $res_id $k]} and {within 5.0 of chain C}}} "]


    set water_around_a_resid [$water_around_a get resid]
    set water_around_a_resname [$water_around_a get resname]

    #loop antigen residues around water
    for {set g 0} {$g < ag_len} {incr g} 
    {

        set ag_around_water [atomselect top "{chain C and {resid [lindex $res_id $g] and {within 5.0 of $water_around_a}}} "]

        set ag_around_water resid [$ag_around_water get resid]

        set ag_around_water_resname [$ag_around_water get resname]


        puts $outfile "$pid [lindex $res_id $k] [lindex [$11 get resname] $k] $ag_around_water_resname A: $water_around_a_resname"
    }
}



set 11 [atomselect top "chain B and name CA"]

set res_len [llength [$b11 get resid]]

set res_id [$b11 get resid]

#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$al get resid]]
set ag_id [$al get resid]

for {set k 0} {$k<$res_len} {incr k} 
{


set water_around_b [atomselect top "{resname HOH and {within 5.0 of {chain B and resid [lindex $res_id $k]} and {within 5.0 of chain C}}} "]

set water_around_b_resid [$water_around_b get resid]
set water_around_b_resname [$water_around_b get resname]

#loop antigen residues around water
for {set g 0} {$g < ag_len} {incr g} 
{

    set ag_around_water [atomselect top "{chain C and {resid [lindex $res_id $g] and {within 5.0 of $water_around_b}}} "]

    set ag_around_water resid [$ag_around_water get resid]

    set ag_around_water_resname [$ag_around_water get resname]

    puts $outfile "$pid [lindex $res_id $k] [lindex [$11 get resname] $k] $ag_around_water_resname A: $water_around_b_resname"


    }

}

}


close $outfile

cd ..

person Merly    schedule 03.12.2015    source источник
comment
Ничего, проблема решена. Реализовано, что я не могу поставить открывающую скобку для циклов на отдельной строке   -  person Merly    schedule 03.12.2015
comment
Новые строки действительно имеют значение, потому что по умолчанию они отмечают конец команд...   -  person Donal Fellows    schedule 03.12.2015


Ответы (1)


Вам нужно запустить тело цикла for в той же строке. Первый завиток тела должен идти после следующей команды.

for {set i 0} {$i < 10} {incr i} {
  puts $i
}
person wolfhammer    schedule 03.12.2015