1

I am trying to do a nested loop, but I'm getting the error message "wrong # args: should be "for start test next command". What does this mean, and could someone please help me find what is wrong with my code?

Note: I'm running the code in Virtual Molecular Dynamics (VMD) so it includes some terms specific to the program like resid and mol. Please disregard those.

#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 ..
2
  • 2
    Nevermind, problem solved. Realized I cannot put opening bracket of for loops on a separate line Commented Dec 3, 2015 at 17:46
  • 2
    Newlines really matter, because they mark the end of commands by default… Commented Dec 3, 2015 at 20:24

1 Answer 1

3

You need to start the body of the for loop on the same line. The first curly of the body needs to go after the next command.

for {set i 0} {$i < 10} {incr i} {
  puts $i
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.