From: Amit Gupta (
Date: Tue Dec 20 2016 - 03:45:40 CST

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!