From: Amit Gupta (
Date: Tue Dec 20 2016 - 06:28:54 CST


Yes I realized it and added it later on. Now I can see all the arrows, but together! I mean they are not changing with frame, rather all arrows from all frames are visible all the time

From: Ashar Malik <>
Sent: Tuesday, December 20, 2016 5:49:33 PM
To: Amit Gupta
Subject: Re: Fw: vmd-l: Draw arrows in trajectory file


I think this maybe because you are not updating your selections properly. to see the arrow move - I guess your selections for arrows need to be updated on a frame by frame basis.
Try either "$sel update" after "$sel frame $i"

or drop the use of $sel update and use make selections like ...

set end [lindex [[atomselect top "index $n_atom" frame $i] get {x y z}] 0]

notice "frame $i" in the command you used. This will force a selection in the frame controlled by the loop.
I think this should fix it. Otherwise - write back.


On Tue, Dec 20, 2016 at 10:45 PM, Amit Gupta <<>> wrote:

Sorry I sent the message below to the person who replied rather than to mailing list:

Thank you for the reply. I modified the script as written at the bottom of mail and it worked fine (did not crash). However now i notice that arrows are drawn only once, in the first frame. After which I do not see any movement in the arrows. Is there any way to draw arrows per frame?

Modified lines that worked:

set end_temp [atomselect top "index $n_atom"]
set end [lindex [ $end_temp get {x y z}] 0]

set start_temp [atomselect top "index $current_c_atom_index"]
set start [lindex [$start_temp get {x y z}] 0]

$end_temp delete
$start_temp delete

From: Norman Geist <<>>
Sent: Tuesday, December 20, 2016 2:07:25 PM
To: 'Amit Gupta'
Subject: AW: vmd-l: Draw arrows in trajectory file

You produced a common memory leak with many atomselects which you never clear.
After you no more need an atomselect object, you should call "delete" on it to free memory.


set a [atomselect top all]
set list [$a get index]
$a delete; #<-------

So whats happening is that vmd gets killed for eating up all the memory.

Best of luck

Norman Geist

Von:<> [<>] Im Auftrag von Amit Gupta
Gesendet: Dienstag, 20. Dezember 2016 07:31
Betreff: vmd-l: Draw arrows in trajectory file

I want to draw come arrows in a lammps trajectory file, indicating movement of certain vectors.
I have written script below, it works fine for single frame, but for more than one frame, VMD crashes without any message (even in console). Can anyone suggest a reason?

draw color yellow

##-----------Draw arrow subroutine from VMD website----------

proc vmd_draw_arrow {mol start end} {

    # an arrow is made of a cylinder and a cone

    set middle [vecadd $start [vecscale 0.75 [vecsub $end $start]]]

    graphics $mol cylinder $start $middle radius 0.1

    graphics $mol cone $middle $end radius 0.3



set n [molinfo top get numframes]

set sel [atomselect top "all"]

set n_list [atomselect top "type 6"] #get indexes of all nitrogens in molecules

set all_n_atoms [$n_list get index]

for {set i 0} {$i < $n} {incr i} {

     $sel frame $i

    foreach n_atom $all_n_atoms {

        set current_c_atom_index [expr $n_atom - 1] # get index of C attached to N

        set end [lindex [[atomselect top "index $n_atom"] get {x y z}] 0]

        set start [lindex [[atomselect top "index $current_c_atom_index"] get {x y z}] 0]

        draw arrow $start $end



Sorry if certain logic seems slightly convoluted, still getting used to TCL!