Package schrodinger :: Package application :: Package desmond :: Package packages :: Package msys :: Package molfile
[hide private]
[frames] | no frames]

Package molfile


Structure and coordinate file manipulation library.

--------------------------
# Synopsis of common tasks
--------------------------

Reading a structure file:

  reader = molfile.mae.read('/path/to/foo.mae')

Iterating through the frames in a file:

  for frame in molfile.dtr.read('/path/to/foo.dtr').frames():
    function( frame.pos, frame.vel, frame.time, frame.box )

Random access to frames (only dtr files support this currently):

  f27 = molfile.dtr.read('/path/to/foo.dtr').frame(27) # 0-based index

Convert an mae file to a pdb file:

  input=molfile.mae.read('foo.mae')
  output=molfile.pdb.write('foo.pdb', atoms=input.atoms)
  output.frame(input.frames().next())
  output.close()

Write every 10th frame in a dtr to a trr:

  input=molfile.dtr.read('big.dtr')
  output=molfile.trr.write('out.trr, natoms=input.natoms)
  for i in range(0,input.nframes, 10):
    output.frame( input.frame(i) )
  output.close()


Write a frame with a specified set of gids:
    f = molfile.Frame(natoms, with_gids=True
    f.gid[:] = my_gids
    f.pos[:] = my_positions
    w.frame(f)

Read a trajectory possibly containing dynamically varying gids.
    r = molfile.dtr.read(path, with_gids=True)
    f = r.frame(0)
    gids = f.gid    # None if not present


Read the raw fields from a frameset (dtr):
    dtr = molfile.DtrReader('input.dtr')    # also works for stk
    for i in range(dtr.nframes):
        f = dtr.frame(i)
        keyvals = dict()
        frame = dtr.frame(i, keyvals=keyvals)
        ## use data in keyvals

Write raw fields to a frameset (dtr):
    dtr = molfile.DtrWriter('output.dtr', natoms=natoms)
    keyvals = dict( s = "a string",
                    f = positions.flatten(),    # must be 1d arrays
                    i = numpy.array([1,2,3]),
                    )
    dtr.append( time = my_time, keyvals = keyvals )

--------------------------
# The molfile data module
--------------------------
All data is read to and from molfile objects in terms of a small number of
classes defined within the module:

  Atom:  Represents fixed particle attributes; i.e. no position or
         velocity!  Atoms hold references to other atoms through their
         bonds member; use Atom.addbond and Atom.delbond to change the
         bond topology.

  Frame: Data from a single timestep.  Contains position, velocity,
         unit cell, and physical time.

--------------------------
# Plugin objects
--------------------------
For each supported file type, e.g., 'pdb', 'mae', trr', there is a Plugin
object with that name in the module.  A Plugin can be queried for its 
capabilities using its 'can_*' methods.  Nearly all plugins can read files,
but only some can write.  Use the Plugin.read method to create a Reader,
and Plugin.write to create a write.

Some plugins, e.g., psf, read only structure data (atoms), while others,
e.g., dtr, read only coordinate data (frames).  If you try to read atoms
from a dtr, or frames from a psf, you'll get an error.

--------------------------
# Reader objects
--------------------------
A Reader is a handle to an open file.  Use the atoms member to fetch the
atomic structure from the file, assuming it exists.  To access frames,
there are two methods.

  Reader.frames() -- returns a FrameIter object for iteration over frames.
  FrameIter has two methods: the usual next() method which returns a
  Frame, and skip(n=1), which advances the iterator by n frames without
  (necessarily) reading anything.  FrameIter is a very poor iterator:
  once a frame has been read or skipped, it can't be loaded again;
  you have use a brand new Reader.

  Reader.frame(n) -- returns the nth frame (0-based index).  Currently
  only the dtr plugin supports this method.

  Reader.grid(n) -- return the nth grid.  For dx and ccp4 files.

--------------------------
# Writer objects
--------------------------
Writers are initialized with a path and either an array of Atoms or an
atom count.  If the Writer supports structure writing, Atoms must be 
provided; if the Writer only writes frames, either one will do.

If the writer supports frame writing, Writer.frame(f) appends frame f
to the end of the file.  

If the writer supports grid writing, Writer.grid(g) writes Grid g 
to the file, where g is an instance of molfile.Grid, either returned
from reader.grid(n) or created from scratch.

Writer.close() will be invoked when the Writer goes out of scope, but
it's not a bad idea to invoke it explicitly.

Classes [hide private]
  FrameIter
  Grid
  StkFile
Generalized stk file: handles any molfile format that provides times
  SeqFile
Functions [hide private]
 
register_plugin(plugin, d=extensiondict)
put plugin in the global namespace, and add to extensiondict
 
load_shared_library(path)
 
guess_filetype(filename, default=None, extensiondict=extensiondict)
return plugin name based on filename, or default if none found.
 
_grid_from_reader(reader, n)
construct from reader and index of dataset
 
_grid_to_writer(writer, grid)
Write grid to writer
Variables [hide private]
  extensiondict = dict()
  with_pandas = True
hash(x)