[gmx-users] mirroring a trajectorie

Tsjerk Wassenaar tsjerkw at gmail.com
Tue May 17 19:25:44 CEST 2011

#!/usr/bin/env python

# Python compliant e-mail
# Save it as xtcrev.py

# Hi Thomas,

# Here's a piece of python code that reverses a trajectory.

### xtcrev.py: ###

#!/usr/bin/env python

# Reverse an XTC trajectory
# (c)2011 Tsjerk A. Wassenaar
#   University of Groningen

from struct import unpack
import sys
import os

def i(x): return sum([ord(x[j])<<(24-j*8) for j in range(4)])

def strseek(stream,s,bufsize=10000):
    v = len(s)
    x = stream.read(bufsize)
    n = 0
    while len(x) >= v:
        m = x.find(s)
        if m > -1:
            # If we found the tag, the position is the total length
            # read plus the index at which the tag was found
            n += m
            yield n
            # Now we strip the part up to and including the tag
            x = x[m+v:]
            n += v
        elif len(x) > v:
            # If the tag was not found, strip the string, keeping only
            # the last v-1 characters, as these could combine with the
            # next part to be read in.
            # n is incremented with the number of characters taken from
            # the current string x (len(x)-v+1)
            n += len(x)-v+1
            x = x[1-v:]
        if len(x) <= v:
            x += stream.read(bufsize)

# Get the tag to identify the start of a frame
f   = open(sys.argv[1])
tag = f.read(8)                     # Tag: magic number and number of atoms
n   = 92 + i(f.read(84)[-4:])       # Size of frame in bytes

# Find all positions at which the tag is found and the frame lengths
frames  = [ i for i in strseek(open(sys.argv[1]),tag) ]
nf      = len(frames)
lengths = [ j-i for i,j in zip(frames,frames[1:]+[nf]) ]

# Reverse the lists

# Write the frames in reversed order
f = open(sys.argv[1])
o = open(sys.argv[2],"w")
for pos,bytes in zip(frames,lengths):


On Tue, May 17, 2011 at 6:05 PM, Thomas Schlesier <schlesi at uni-mainz.de> wrote:
> Hi all,
> is it possible to mirror a trajectorie?
> I have done pulling simulations, where i first pulled two molecules apart
> and later used the pulled them together (starting form the last frame of the
> pulling-(apart)-simulation).
> Now want to calculate the rmsd of structures for the path. So i would like
> to compared first frame of pull-apart with last frame of pull-together ...
> Only way i could think of, would be to write the .xtc into individual
> .gro-files, then order them and finally put them together to the mirrored
> .xtc
> This should work, but probably there is an easier way of doing this?
> Greetings
> Thomas
> --
> gmx-users mailing list    gmx-users at gromacs.org
> http://lists.gromacs.org/mailman/listinfo/gmx-users
> Please search the archive at
> http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
> Please don't post (un)subscribe requests to the list. Use the www interface
> or send it to gmx-users-request at gromacs.org.
> Can't post? Read http://www.gromacs.org/Support/Mailing_Lists

Tsjerk A. Wassenaar, Ph.D.

post-doctoral researcher
Molecular Dynamics Group
* Groningen Institute for Biomolecular Research and Biotechnology
* Zernike Institute for Advanced Materials
University of Groningen
The Netherlands

More information about the gromacs.org_gmx-users mailing list