[gmx-users] Re: Trouble loading User data with a Tcl script (only half the data seems to load)
J. Nathan Scott
scottjn at chemistry.montana.edu
Fri May 6 17:10:32 CEST 2011
Oops, this message and the original should have gone to the VMD mailing list
and not Gromacs of course. My mistake, apologies for cluttering your inbox.
:-)
-Nathan
On Thu, May 5, 2011 at 3:35 PM, J. Nathan Scott <
scottjn at chemistry.montana.edu> wrote:
> Hello again, fellow gmx-users,
>
> I finally found my coding error that only set the User data for the first
> half of the frames loaded, it was a simple indexing error after all.
> However, I would still *greatly* appreciate any assistance with speeding up
> the following loop:
>
>
> for {set k 6} {$k <= 141} {incr k} {
> set prot [atomselect $mol_ID "resid $k" frame $j]
> set num [$prot num]
> $prot frame $j
> set user_list {}
> set u [lindex $efield [expr $k - 6]]
> for {set b 1} {$b <= $num} {incr b} {
> lappend user_list $u
> }
> $prot set user $user_list
> $prot delete
> }
>
> Is there a simpler way to accomplish the task of assigning a single User
> value to individual residues without first atomselecting each one, getting
> its number of atoms, and then finally looping over the atoms to build a
> user_list? I'm hoping that there is some better way to do this that I
> haven't thought of yet. My script runs very wonderfully except for this
> chunk.
>
> Thanks in advance for any help you can provide,
>
> -Nathan
>
>
> On Wed, May 4, 2011 at 11:06 AM, J. Nathan Scott <
> scottjn at chemistry.montana.edu> wrote:
>
>> Hello all,
>>
>> I have written a script that does per-time-step coloring of the water
>> molecules, residues, and ions in my protein based on electric field values I
>> previously calculated. I received excellent help here a few months sorting
>> out some problems with the script, but there is one big one remaining that I
>> hope someone can help with.
>>
>> The problem is that only half the frames (the first half) in my simulation
>> are getting colored, and I can't figure out why. This happens no matter how
>> many frames I load, whether the full trajectory or just a few hundred
>> frames. For what it's worth, the machine I'm running on has 12 GB of RAM, a
>> very nice video card, and a new Xeon quad core processor, so I don't think
>> this is an issue of system resources. At least I can see that there is still
>> tons of free RAM when I am experiencing this issue.
>>
>> Also, I would sincerely appreciate any advice on speeding up one of my
>> loops. To color the water molecules and ions I can simply atomselect them
>> all, and then loop through the values from the electric field data file for
>> that timestep and assign the color value to a user list either 3 or 1 times
>> respectively to color each atom.
>>
>> However, for the residues in the protein I am having to atomselect them
>> one at a time, get the number of atoms for that residue, and then do another
>> loop to build a list of the correct length to assign the user values to each
>> atom of the residue. Can anyone recommend a more efficient way of coloring
>> the residues? When the residue coloring part of the script is stripped out
>> it runs so much faster despite the fact that there are far fewer protein
>> atoms than there are water or ion atoms, so I know this method of assignment
>> is sluggish.
>>
>> Please see the script below my signature, and thank you in advance for any
>> advice you can provide.
>>
>> --
>> ----------
>> J. Nathan Scott, Ph.D.
>> Postdoctoral Fellow
>> Department of Chemistry and Biochemistry
>> Montana State University
>>
>>
>>
>>
>> #######################################################################
>> set first 0;
>> set last 1000;
>> set mut wt;
>> set mut_ wt_;
>> set i $first; #i will be timestep/filename indicator,
>> set j 0;
>>
>> mol new /data/1stn/xtc/1stn_$mut.gro type gro waitfor all
>> mol addfile /data/1stn/xtc/1stn_$mut.xtc type xtc waitfor all first $first
>> last $l$
>> set mol_ID top;
>> set n [ molinfo $mol_ID get numframes ];
>> animate goto 0
>> animate delete beg 0 end 0 skip 0 0
>> mol delrep 0 $mol_ID
>>
>> while {$i <= $last} {
>> set fp [open "/data/1stn/$mut/pd5/pd5.stripped/1stn_$mut_$i.pd5"
>> r]
>> set file_data [read $fp]
>> close $fp
>>
>> set data [split $file_data "\n"]
>> foreach {one} $data {
>> lappend efield [lindex $one 3]
>> }
>>
>> ### Looping through residues in the for loop,
>> ### selecting one residue at a time, getting its number of atoms,
>> ### and then building a user value list for each of those
>> ### atoms in another for loop.
>>
>> for {set k 6} {$k <= 141} {incr k} {
>> set prot [atomselect $mol_ID "resid $k" frame $j]
>> set num [$prot num]
>> $prot frame $j
>> set user_list {}
>> set u [lindex $efield [expr $k - 6]]
>> for {set b 1} {$b <= $num} {incr b} {
>> lappend user_list $u
>> }
>> $prot set user $user_list
>> $prot delete
>> }
>>
>> ### Water loop works well
>>
>> set wat [atomselect $mol_ID waters frame $j]
>> $wat frame $j
>> set user_list {}
>> for {set a 136} {$a < 10233} {incr a} {
>> set u [lindex $efield $a]
>> lappend user_list $u $u $u
>> }
>> $wat set user $user_list
>> $wat delete
>>
>> ### Ion loop works well too
>>
>> set ions [atomselect $mol_ID ions frame $j]
>> $ions frame $j
>> set user_list {}
>> for {set a 10233} {$a < 10243} {incr a} {
>> set u [lindex $efield $a]
>> lappend user_list $u
>> }
>> $ions set user $user_list
>> $ions delete
>>
>> unset efield
>> incr j 1
>> incr i 2
>> }
>>
>>
>>
>>
>
>
> --
> ----------
> J. Nathan Scott, Ph.D.
> Postdoctoral Fellow
> Department of Chemistry and Biochemistry
> Montana State University
>
--
----------
J. Nathan Scott, Ph.D.
Postdoctoral Fellow
Department of Chemistry and Biochemistry
Montana State University
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-users/attachments/20110506/595edec1/attachment.html>
More information about the gromacs.org_gmx-users
mailing list