ProDy 1.4 Series
===============================================================================

.. contents::
   :local:

1.4.9 (Nov 14, 2013)
-------------------------------------------------------------------------------

**Upcoming changes**:

  * Support for Python 3.1 and NumPy 1.5 will be dropped, meaning no Windows
    installers will be built for these versions of them.

**Improvements**:

  * :class:`.HierView` can handle :class:`.Residue` instances that have
    same :term:`segment` name, :term:`chain` identifier, and :term:`resnum`,
    if PDB file contains ``TER`` lines to terminate these residues. If
    these three identifiers are shared by multiple residues, indexing
    :class:`.AtomGroup` instances will return a list of residues. This
    behavior can be used as follows. Note that in v1.5, this will be the
    default behavior.

  >>> pdb_lines = """
  ... ATOM      1  O   WAT A   1       4.694  -3.891  -0.592  1.00  1.00
  ... ATOM      2  H1  WAT A   1       5.096  -3.068  -0.190  1.00  1.00
  ... ATOM      3  H2  WAT A   1       5.420  -4.544  -0.808  1.00  1.00
  ... TER
  ... ATOM      4  O   WAT A   1     -30.035  19.116  -2.193  1.00  1.00
  ... ATOM      5  H1  WAT A   1     -30.959  18.736  -2.244  1.00  1.00
  ... ATOM      6  H2  WAT A   1     -29.993  19.960  -2.728  1.00  1.00
  ... TER
  ... ATOM      7  O   WAT A   1     -77.584 -21.524 -37.894  1.00  1.00
  ... ATOM      8  H1  WAT A   1     -77.226 -21.966 -38.717  1.00  1.00
  ... ATOM      9  H2  WAT A   1     -77.023 -20.726 -37.674  1.00  1.00
  ... TER"""
  >>> from StringIO import StringIO
  >>> atoms = parsePDBStream(StringIO(pdb_lines))

    Current behavior:

  >>> print(atoms.numResidues())
  1
  >>> atoms['A', 1]
  <Residue: WAT 1 from Chain A from Unknown (9 atoms)>


    To activate the new behavior (which will be the default behavior in v1.5):

  >>> hv = atoms.getHierView(ter=True)
  >>> print(hv.numResidues())
  >>> hv['A', 1]

  * :func:`.parsePDB` reads ``TER`` records in PDB files. Atoms and hetero
    atoms (:term:`hetatm`) that are followed by a ``TER`` record are now
    flagged as :term:`pdbter`.


**Bugfixes**:

  * Fixed memory leaks in :func:`.uniqueSequences` and
    :func:`.buildSeqidMatrix`.


1.4.8 (Nov 4, 2013)
-------------------------------------------------------------------------------

**New Features**:

  * New analysis functions :func:`.buildOMESMatrix` and :func:`.buildSCAMatrix`
    are implemented.

  * New :meth:`.AtomGroup.numBytes` method returns an estimate of memory usage.

  * New :func:`.countBytes` utility function is added for counting bytes used
    by NumPy arrays.


**Improvements**:

  * :func:`.parsePDB` resizes data arrays to decrease memory usage.

**Bugfixes**:

  * Fixed memory leaks in MSA :mod:`~.sequence.analysis` functions.

  * Fixed potential problems with importing contributed libraries.


1.4.7 (Oct 29, 2013)
-------------------------------------------------------------------------------

**Improvements**:

  * :class:`.AtomGroup`, :class:`.Selection`, and other :class:`.Atomic`
    classes are picklable.

  * Improved equality tests for :class:`.AtomGroup`. Two different instances
    are considered equal if they contain identical data and coordinate sets.


1.4.6 (Oct 16, 2013)
-------------------------------------------------------------------------------

**Bugfixes**:

  * Selection problem with using :term:`resid` is fixed (:issue:`160`)

  * Fixed a memory leak in MSA parsers written in C.  When dealing with
    large files, leak would cause a segmentation fault.

  * Fixed a memory leak in MSA parsers written in C.  When dealing with
    large files, leak would cause a segmentation fault.

  * Fixed a reference counting problem in MSA parsers in C that would
    cause segmentation fault when reading files that uses the same
    label for multiple sequences.

  * Updated :func:`.fetchPDBLigand` to use PDB for fetching XML files.

  * Revised handling of MSA file formats to avoid exceptions for unknown
    extensions.


1.4.5 (Sep 6, 2013)
-------------------------------------------------------------------------------

**New Features**:

  * :func:`.parsePDBHeader` function can parse space group information
    from header section specified as ``REMARK 290``, e.g.
    ``parsePDBHeader('1mkp', 'space_group')`` or
    ``parsePDBHeader('1mkp')['space_group']``

  * :term:`heavy` selection flag is defined as an alias for :term:`noh`.

  * :func:`.matchChains` function can match non-hydrogen atoms using
    ``subset='heavy'`` keyword argument.

  * Added ``update_coords`` keyword argument to :meth:`.PCA.builCovariance`,
    so that average coordinates calculated internally can be stored in
    ensemble or trajectory objects used as input.

**Improvements**:

  * Unit tests can be run with Python 2.6 when `unittest2` module is installed.

  .. _unittest2: https://pypi.python.org/pypi/unittest2

**Bugfixes**:

  * Fixed problems with reading compressed PDB files using Python 3.3.

  * Fixed a bug in :func:`.parseSTRIDE` function that prevented reading files.

  * Improved parsing of biomolecular transformations.

  * Fixed memory allocation in C code used by :func:`.parseMSA` (Python 2.6).

  * Fixed a potential name error in trajectory classes.

  * Fixed problems in handling compressed files when using Python 2.6 and 3.3.

  * Fixed a problem with indexing :class:`.NMA` instances in Python 3 series.


1.4.4 (July 22, 2013)
-------------------------------------------------------------------------------

**Improvements**:

  * :func:`.writeNMD` and :func:`.parseNMD` write and read segment names.
    NMWiz is also improved to handle segment names. Improvements
    will be available in VMD v1.9.2.

**Bugfixes**:

  * A bug in :func:`.saveAtoms` that would cause :exc:`KeyError` when
    bonds are set but fragments are not determined is fixed.

  * Import ProDy would fail when :envvar:`HOME` is not set. Changed
    :class:`.PackageSettings` to handle this case graciously.


1.4.3 (June 14, 2013)
-------------------------------------------------------------------------------

**Changes**:

  * :func:`.getVMDpath` and :func:`.setVMDpath` functions are deprecated for
    removal, use :func:`.pathVMD` instead.

  * Increased :func:`.blastPDB` *timeout* to 60 seconds.

  * :func:`.extendModel` and :func:`.extendMode` functions have a new option
    for normalizing extended mode(s).

  * :func:`.sampleModes` and :func:`.traverseMode` automatically normalizes
    input modes.

**Bugfixes**:

  * A bug in :func:`.applyTransformation` is fixed. The function would
    interpret some external transformation matrices incorrectly.

  * A bug in :func:`.fetchPDBLigand` function is fixed.


1.4.2 (April 19, 2013)
-------------------------------------------------------------------------------

**Improvements**:

  * :func:`.fetchPDB` and :func:`.fetchPDBfromMirror` functions can handle
    partial PDB mirrors.  See :func:`.pathPDBMirror` for setting a mirror path.

**Changes**:

  * `MSE <http://www.pdb.org/pdb/ligand/ligandsummary.do?hetId=MSE>`_ is
    included in the definition of non-standard amino acids, i.e.
    :term:`nonstdaa`.

**Bugfixes**:

  * Atom selection problems related to using :term:`all` and :term:`none` in
    composite selections, e.g. ``'calpha and all'``, is fixed by defining these
    keywords as :ref:`flags`.

  * Fasta files with sequence labels using multiple pipe characters would
    cause C parser (and so :func:`.parseMSA`) to fail.  This issue is fixed
    by completely disregarding pipe characters.

  * Empty chain identifiers for PDB hits would cause a problem in parsing
    XML results file and :func:`.blastPDB` would throw an exception.  This
    case is handled by slicing the chain identifier string.

  * A problem in :func:`.viewNMDinVMD` related to module imports is fixed.

  * A problem with handling weights in :func:`.loadEnsemble` is fixed.


1.4.1 (Dec 16, 2012)
-------------------------------------------------------------------------------

**New Features**:

  * :func:`.buildSeqidMatrix` and :func:`.uniqueSequences` functions
    are implemented for comparing sequences in an :class:`.MSA` object.

  * :func:`.showHeatmap`, :func:`.parseHeatmap`, and :func:`.writeHeatmap`
    functions are implemented to support VMD plugin `Heat Mapper`_ file format.

    .. _Heat Mapper: http://www.ks.uiuc.edu/Research/vmd/plugins/heatmapper/

  * :class:`.Sequence` is implemented to handle individual sequence records
    and point to sequences in :class:`.MSA` instances.

  * :ref:`evol-occupancy` application is implemented for refined MSA
    quality checking purposes.

  * :func:`.mergeMSA` function and :ref:`evol-merge` application are
    implemented for merging Pfam MSA to study multi-domain proteins.


**Improvements**:

  * :func:`.refineMSA` function and :ref:`evol-refine` application
    can perform MSA refinements by removing similar sequences.

  * :func:`.writePDB` function takes *beta* and *occupancy* arguments
    to be outputted in corresponding columns.

  * :class:`.MSA` indexing and slicing are revised and improved.

  * :func:`.parseMSA` is improved to handle indexing of sequences that
    have the same label in an MSA file, e.g. domains repeated in a protein.

  * :ref:`prody-anm`, :ref:`prody-gnm`, and :ref:`prody-pca` applications
    can write heatmap files for visualization using NMWiz and Heatmapper
    plugins.

  * Several improvements made to handling sequence labels in Pfam MSA files.
    Files that contain sequence parts with same protein UniProt ID are
    handled delicately.

**Changes**:

  * ProDy will not emit a warning message when a wwPDB server is not set
    using :func:`.wwPDBServer`, and use the default US server.

  * Indexing :class:`.MSA` returns :class:`.Sequence` instances.

  * Iterating over :class:`.MSA` and :class:`.MSAFile` yields
    :class:`.Sequence` instances.

**Bugfixes**:

  * Fixed a syntax problem that prevented running ProDy using Python 2.6.

  * Fixed :class:`.NMA` indexing problem that was introduced in v1.4.


Normal Mode Wizard
^^^^^^^^^^^^^^^^^^

  * NMWiz can visualize heatmaps linked to structural view via Heatmapper.
    Clicking on the heatmap will highlight atom or residue pairs.

  * ProDy interface has the option to write and load cross-correlations.

  * NMWiz can determined whether a model is an extended model. For extended
    models plotting mobility has been improved. Only a single value per residue
    will be plotted, and clicking on the plot will highlight all of the
    residue atoms.


1.4 (Dec 2, 2012)
-------------------------------------------------------------------------------

**New Features**:

*Python 3 Support*

  * ProDy has been refactored to support Python 3.  Windows installers for
    Python 2.6, 2.7, 3.1, and 3.2 are available in :ref:`getprody`.

  * Unit tests are compatible with Python 2.7 and 3.2, and running them with
    other versions gives errors due to unavailability of some :mod:`unittest`
    features.

*Sequence Analysis*

  * New applications :ref:`evol-apps` are available.

  * :func:`.searchPfam` and :func:`.fetchPfamMSA` functions are implemented
    for searching and retrieving Pfam data.  See :ref:`msafiles` for usage
    examples.

  * :class:`.MSAFile` class, :func:`.parseMSA` and :func:`.writeMSA` functions
    are implemented for reading and writing multiple sequence alignments.
    See :ref:`msafiles` for usage examples.

  * :class:`.MSA` class has been implemented for storing and manipulating
    MSAs in memory.

  * :func:`.calcShannonEntropy`, :func:`.buildMutinfoMatrix`, and
    :func:`.calcMSAOccupancy` functions are implemented implemented for
    MSA analysis.  See :ref:`msa-analysis` for usage examples.

  * :func:`.showShannonEntropy`, :func:`.showMutinfoMatrix`, and
    :func:`.showMSAOccupancy` functions are implemented implemented for
    MSA analysis.  See :ref:`msa-analysis` for usage examples.

  * :func:`.applyMutinfoCorr` and :func:`.applyMutinfoNorm` functions are
    implemented for applying normalization and corrections to mutual
    information matrices.

  * :func:`.calcRankorder` function is implemented for identifying highly
    correlated/co-evolving pairs of residues.


**Bugfix**:

  * Fixed selection issues involving use of ``x`` or negative numbers.

