VMD-L Mailing List
From: Axel Kohlmeyer (akohlmey_at_gmail.com)
Date: Thu Feb 18 2021 - 01:13:34 CST
- Next message: Norman Geist: "AW: Native contacts tcl script crashed"
- Previous message: Ashar Malik: "Re: Native contacts tcl script crashed"
- In reply to: Sunita Patel: "Re: Native contacts tcl script crashed"
- Next in thread: Norman Geist: "AW: Native contacts tcl script crashed"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
Same problem as before.
-- Dr. Axel Kohlmeyer akohlmey_at_gmail.com https://urldefense.com/v3/__http://goo.gl/1wk0__;!!DZ3fjg!vUrMzduLli0ZEXu_x7__X4CLWKDfGxQEqXCRjsC_biyldGcvX0h88lP7n4ccISp3OQ$ College of Science & Technology, Temple University, Philadelphia PA, USA International Centre for Theoretical Physics, Trieste, Italy On Thu, Feb 18, 2021, 01:39 Sunita Patel <sunita.patel_at_cbs.ac.in> wrote: > Dear VMD-users, > > I have rewritten the vmd script considering your suggestions. After each > frame comparison I am deleting the list variable (unset var) and > re-assigning new values to the same variable for comparison with the next > frame. It is working fine up to 80 frames. For hundreds of frames it is > again crashing in GUI mode. I tried running it in vmdtext mode which is > working fine but it is very slow. > > Could anybody see my code and recommend where I need to improve. The tcl > script is attached and also appended in this email. Should I send test > input files? > > Thank you so much for your help. > > Sincerely, > Sunita > > ========== > # Usage "source vmd_native_contacts.tcl" source vmd_native_contact 0. > # First frame is considered as reference native structure. > proc vmd_native_contacts { mol } { > puts "Enter output file name:" > set outputfilename [gets stdin] > set output [open $outputfilename w] > set allCa [atomselect $mol "name CA"] > #get the index of CA atoms > set rid [$allCa get index] > # No. of C-alphas > set ridLength [llength $rid] > set num [molinfo $mol get numframes] > set k 0 ; > # Iteration over frames > while {$k < $num} { > set allpairs {}; > set NC 0; > #compare the CA atoms pair which are separated by 6.5 Ang or less > for {set i 0} {$i < $ridLength} {incr i} { > for {set j [expr $i+4]} {$j < $ridLength} {incr j} { > set fir [lindex $rid $i]; > set sec [lindex $rid $j]; > set firNdx [atomselect $mol "index $fir" frame $k]; > set secNdx [atomselect $mol "index $sec" frame $k]; > set firCen [measure center $firNdx]; > set secCen [measure center $secNdx]; > set diff [vecsub $firCen $secCen]; > set dist [veclength $diff]; > if {$dist < 6.5} { > if {$k == 0} { > lappend refContacts "$fir $sec" ; } > if {$k != 0} { > lappend allpairs "$fir $sec" ; } > } > } > } > set LrefNC [llength $refContacts] > for {set n 0} {$n < $LrefNC} {incr n} { > set refNC [lindex $refContacts $n]; > set search [lsearch $allpairs "$refNC"] > if {$search != -1} { > set NC [expr $NC + 1] > } > } > unset allpairs; > # It gives frame versus number of native contacts. > set pcgNC [expr ([format %8.1f $NC] / [format %8.1f $LrefNC]) * 100] > puts $output "$k [format %8.1f $pcgNC]" ; > flush $output; > set k [expr $k + 1] > } > } > ================================ > > On Tue, Feb 16, 2021 at 4:57 PM Ashar Malik <asharjm_at_gmail.com> wrote: > >> Haven't had a detailed look through your code. >> >> Just a quick point though, that if you make a selection, do delete it >> when you are done with using it. >> >> This should be a fix if memory is the only issue with your code. >> >> >> >> On Tue, Feb 16, 2021 at 7:05 PM Sunita Patel <sunita.patel_at_cbs.ac.in> >> wrote: >> >>> Dear VMD-users, >>> >>> I wrote a tcl script to find the number of native contacts in each >>> frame. The reference frame (frame 0) whose native contacts have been >>> matched with other frames. This program is working fine with a small number >>> of frames (frames 30). However it crashed when I ran the program for 400 >>> frames. >>> >>> I need your help to rectify the program so that it will work for a >>> larger number of frames. Please find the program appended below or also as >>> an attachment. >>> >>> Your help will be highly appreciated. >>> >>> Sincerely, >>> Sunita >>> ============================================================ >>> # Usage "source vmd_native_contacts.tcl" source vmd_native_contact 0. >>> # First frame is considered as reference native structure. >>> proc vmd_native_contacts { mol } { >>> puts "Enter output file name:" >>> set outputfilename [gets stdin] >>> set output [open $outputfilename w] >>> >>> set allCa [atomselect $mol "name CA"] >>> #get the index of CA atoms >>> set rid [$allCa get index] >>> # No. of C-alphas >>> set ridLength [llength $rid] >>> set num [molinfo $mol get numframes] >>> set k 0 ; >>> set allcontacts {} >>> # Iteration over frames >>> while {$k < $num} { >>> set ctr 0 >>> set contactCa {} >>> #compare the CA atoms pair which are separated by 6.5 Ang or less >>> for {set i 0} {$i < $ridLength} {incr i} { >>> for {set j [expr $i+4]} {$j < $ridLength} {incr j} { >>> set fir [lindex $rid $i]; >>> set sec [lindex $rid $j]; >>> set firNdx [atomselect $mol "index $fir" frame $k]; >>> set secNdx [atomselect $mol "index $sec" frame $k]; >>> set firCen [measure center $firNdx]; >>> set secCen [measure center $secNdx]; >>> set diff [vecsub $firCen $secCen]; >>> set dist [veclength $diff]; >>> if {$dist < 6.5} { >>> set ctr [expr $ctr + 1] >>> lappend contactCa "$fir $sec" ; >>> } >>> } >>> } >>> # CA-atomd distance less than 6.5 are put in the list 'allcontacts'. >>> lappend allcontacts "$contactCa" ; >>> set k [expr $k + 1] >>> } >>> >>> # No. of native contacts in the reference structure that is 'frame 0'. >>> set nrefNc [llength [lindex $allcontacts 0]]; >>> # No. of frames 'fr'. >>> set fr [llength [lindex $allcontacts]]; >>> # Searching of native contacts from frame 1 onwards (frame 0 is the >>> reference) >>> for {set m 1} {$m < $fr} {incr m} { >>> set Ncontact 0 >>> for {set n 0} {$n < $nrefNc} {incr n} { >>> set refNc [lindex $allcontacts 0 $n]; >>> set search [lsearch [lindex $allcontacts $m] "$refNc"] >>> if {$search != -1} { >>> set Ncontact [expr $Ncontact + 1] >>> } >>> } >>> set pcgNC [expr ([format %8.1f $Ncontact] / [format %8.1f $nrefNc]) * >>> 100] >>> puts $output "$m [format %8.1f $pcgNC]"; >>> flush $output; >>> } >>> } >>> ==================================================== >>> >>>
- Next message: Norman Geist: "AW: Native contacts tcl script crashed"
- Previous message: Ashar Malik: "Re: Native contacts tcl script crashed"
- In reply to: Sunita Patel: "Re: Native contacts tcl script crashed"
- Next in thread: Norman Geist: "AW: Native contacts tcl script crashed"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]