From: John Stone (johns_at_ks.uiuc.edu)
Date: Wed Jun 12 2013 - 21:03:55 CDT

Hi,
  I don't see any "close" call in your script.
For every file that you "open", there should be a matching "close"
when you read the end of the file...

Cheers,
  John

On Thu, Jun 13, 2013 at 02:14:35AM +0200, Ludovic wrote:
> Hi everyone!
>
> I'm trying to visualize the movement of atoms using a system with 8000
> frames.
> I'm using a Tcl script to load each frame (each in a single PDB file)
> and make a screenshot with VMD.
> The problem is that it stops at the 1000-ish frame giving me the error:
> "couldn't read file XXX: too many open files"
> (it works well if I use less than a 1000 frames)
> (I'm using Ubuntu 10.4 64-bit and VMD 1.9.1)
>
> You can find the script I was using at the end of this post (version 1).
>
> I guess it's a memory problem so I tried modifying the script (version
> 2) so it is creating a molecule, adding to it the first 1000 frames,
> make the screenshots then delete the molecule, creating a second
> molecule, adding to it the next 1000 frames...
> But it gives me the same error.
>
> I also tried using the command "animate delete" at the end end of each
> loop, but still the same error.
> I really have no idea what to do. Maybe the problem is in the "readBF" part?
>
> I'd be really glad if someone could help me on this...
>
> I also have another question while I'm at it.
> For the time being I'm using the user-field to save data for each atom,
> so that, each frame, VMD checks if this value is higher than a value
> "$thresh" for each atom and modify the color using a color scale.
> What I would like (and couldn't manage) to do is, when an atom get a
> higher value of $thresh, modify its color but keep this color for all
> subsequent frames (and still modify its position).
> I tried using "mol colupdate 1 top off" but it doesn't work, and the
> colors go weird.
> I can't use "mol drawframes" either since the position of the atoms will
> not be updated.
>
> If you have an idea of some kind...
>
> Thank you very much!
>
> Regards,
> Ludovic Mercier
>
>
> ##########################################################
> ##########################################################
> ###
> ### VERSION 1
> ###
>
> ## Name:
> ## makeanimallpdbwBF.tcl
> ##
>
> proc readBF { fname } {
> set all [atomselect top all]
> set in [open $fname r]
> set beta {}
> set numat 0
> while { [gets $in line] != -1 } {
> switch -- [string range $line 0 3] {
> ATOM -
> HETA {
> incr numat
> lappend beta [expr [string range $line 61 66]]
> }
> }
> }
> return $beta
> }
>
> #start is 1
> #end is the total number of frames
> proc makeanimallpdbwBF {start end fileformat thresh threshmax} {
>
> for {set i [expr $start]} {$i <= $end} {incr i 1} {
> set filename [format $fileformat [expr $i]]
> mol addfile $filename type pdb waitfor all
> }
>
> for {set i $start} {$i <= $end} {incr i 1} {
> set filename [format $fileformat [expr $i]]
> set all [atomselect top all frame [expr $i-1]]
> set beta [readBF $filename]
> $all set user $beta
> $all delete
> }
>
> mol modselect 0 top user < $thresh and not protein
> mol modcolor 0 top ColorID 2
> mol modstyle 0 top CPK 1.800000 0.300000 10.000000 2.000000
> mol modmaterial 0 top AOEdgy
> #mol showperiodic top 0 xyXY
> #mol numperiodic top 0 1
> mol addrep top
>
> mol modselect 1 top user >= $thresh
> mol modcolor 1 top user
> mol modstyle 1 top CPK 2.600000 0.300000 10.000000 2.000000
> mol modmaterial 1 top Opaque
> #mol showperiodic top 1 xyXY
> #mol numperiodic top 1 1
> mol addrep top
>
> mol modselect 2 top protein
> mol modcolor 2 top Name
> mol modstyle 2 top CPK 1.500000 1.2000000 10.000000 2.000000
> mol modmaterial 2 top BrushedMetal
> #mol showperiodic top 2 xyXY
> #mol numperiodic top 2 1
> mol addrep top
>
> mol selupdate 0 top on
> mol selupdate 1 top on
> mol selupdate 2 top on
> mol colupdate 0 top on
> mol colupdate 1 top on
> mol colupdate 2 top on
>
> #pbc set {41.259 41.259 41.259 90.0 90.0 90.0} -molid top -all
> #pbc box -centersel protein -center com -color magenta
>
> color scale method BGR
> color scale midpoint 0.2
> mol scaleminmax top 1 $thresh $threshmax
>
> scale by 1.6
>
> for {set i [expr $start]} {$i <= $end} {incr i 1} {
>
> animate goto [expr $i-1]
> set filename [format $fileformat [expr $i]]
> set filename $filename.rgb
> render snapshot $filename
> }
> #atomselect list
> }
>
> ############################################
> ############################################
> ###
> ### VERSION 2
> ###
>
> ## Name:
> ## makeanimallpdbwBF.tcl
> ##
>
> proc readBF { fname } {
> set all [atomselect top all]
> set in [open $fname r]
> set beta {}
> set numat 0
> while { [gets $in line] != -1 } {
> switch -- [string range $line 0 3] {
> ATOM -
> HETA {
> incr numat
> lappend beta [expr [string range $line 61 66]]
> }
> }
> }
> return $beta
> }
>
> proc makeanimallpdbwBF {start end fileformat thresh threshmax} {
>
> set filename [format $fileformat [expr $start]]
> mol new $filename type pdb waitfor all
>
> mol modselect 0 top user < $thresh and not protein
> mol modcolor 0 top ColorID 2
> mol modstyle 0 top CPK 1.800000 0.300000 10.000000 2.000000
> mol modmaterial 0 top AOEdgy
>
> mol addrep top
> mol modselect 1 top user >= $thresh
> mol modcolor 1 top user
> mol modstyle 1 top CPK 2.600000 0.300000 10.000000 2.000000
> mol modmaterial 1 top Opaque
>
> mol addrep top
> mol modselect 2 top protein
> mol modcolor 2 top Name
> mol modstyle 2 top CPK 1.500000 1.2000000 10.000000 2.000000
> mol modmaterial 2 top BrushedMetal
>
> color scale method BGR
> color scale midpoint 0.2
> mol scaleminmax top 1 $thresh $threshmax
>
> scale by 1.7
>
> for {set i $start} {$i <= 1000} {incr i 1} {
>
> set filename [format $fileformat [expr $i]]
> animate read pdb $filename
> set all [atomselect top all]
> set beta [readBF $filename]
> $all set user $beta
>
> set filename $filename.rgb
> render snapshot $filename
>
> $all delete
> }
> animate delete all top
>
> mol delete top
>
> set filename [format $fileformat 1001]
> mol new $filename type pdb waitfor all
>
> mol modselect 0 top user < $thresh and not protein
> mol modcolor 0 top ColorID 2
> mol modstyle 0 top CPK 1.800000 0.300000 10.000000 2.000000
> mol modmaterial 0 top AOEdgy
>
> mol addrep top
> mol modselect 1 top user >= $thresh
> mol modcolor 1 top user
> mol modstyle 1 top CPK 2.600000 0.300000 10.000000 2.000000
> mol modmaterial 1 top Opaque
>
> mol addrep top
> mol modselect 2 top protein
> mol modcolor 2 top Name
> mol modstyle 2 top CPK 1.500000 1.2000000 10.000000 2.000000
> mol modmaterial 2 top BrushedMetal
>
> color scale method BGR
> color scale midpoint 0.2
> mol scaleminmax top 1 $thresh $threshmax
>
> scale by 1.7
>
> for {set i 1001} {$i <= 2000} {incr i 1} {
>
> set filename [format $fileformat [expr $i]]
> animate read pdb $filename
> set all [atomselect top all]
> set beta [readBF $filename]
> $all set user $beta
>
> set filename $filename.rgb
> render snapshot $filename
>
> $all delete
> }
> animate delete all top
>
> #atomselect list
> #mol list
> }

-- 
NIH Center for Macromolecular Modeling and Bioinformatics
Beckman Institute for Advanced Science and Technology
University of Illinois, 405 N. Mathews Ave, Urbana, IL 61801
http://www.ks.uiuc.edu/~johns/           Phone: 217-244-3349
http://www.ks.uiuc.edu/Research/vmd/