ProDy 0.9 Series
===============================================================================

.. contents::
   :local:


0.9.4 (Feb 4, 2012)
-------------------------------------------------------------------------------

**Changes**:

  * :meth:`setAtomGroup` and :meth:`getAtomGroup` methods are renamed as
    :meth:`.Ensemble.setAtoms` and  :meth:`.Ensemble.getAtoms`.

  * :class:`.AtomGroup` class trajectory methods, i.e.
    :meth:`AtomGroup.setTrajectory`,
    :meth:`AtomGroup.getTrajectory`,
    :meth:`AtomGroup.nextFrame`,
    :meth:`AtomGroup.nextFrame`, and
    :meth:`AtomGroup.gotoFrame`
    methods are deprecated. Version 1.0 will feature a better integration
    of :class:`.AtomGroup` and :class:`.Trajectory` classes.


**Bugfixes**:

  * Bugfixes in :meth:`.Bond.setACSIndex`, :func:`.saveAtoms`,
    and :meth:`.HierView.getSegment`.

  * Bugfixes in :class:`.GammaVariableCutoff` and :class:`.GammaStructureBased`
    classes.

  * Bugfix in :func:`.calcCrossCorr` function.

  * Bugfixes in :meth:`.Ensemble.getWeights`, :func:`.showOccupancies`,
    :meth:`.DCDFile.flush`.

  * Bugfixes in ProDy commands :ref:`prody-blast`, :ref:`prody-fetch`, and
    :ref:`prody-pca`.

  * Bugfix in :func:`.calcCenter` function.


0.9.3 (Feb 1, 2012)
-------------------------------------------------------------------------------

**New Features**:

  * :class:`.DBRef` class is implemented for storing references
    to sequence databases parsed from PDB header records.

  * Methods for storing coordinate set labels in :class:`.AtomGroup`
    instances are implemented: :meth:`~.AtomGroup.getACSLabel`, and
    :meth:`~.AtomGroup.getACSLabel`.

  * :func:`.calcCenter` and :func:`.moveAtoms` functions
    are implemented for dealing with coordinate translation.

  * Hierarchical view, :class:`.HierView`, is completely redesigned.
    PDB files that contain non-empty segment name column (or when such
    information is parsed from a PSF file), new design delicately handles this
    information to identify distinct chains and residues.  This prevents
    merging distinct chains in different segments but with same identifiers
    and residues in those with same numbers.  New design is also using ordered
    dictionaries :class:`collections.OrderedDict` and lists so that chain and
    residue iterations yield them in the order they are parsed from file.
    These improvements also bring modest improvements in speed.

  * :class:`.Segment` class is implemented for handling segments
    of atoms defined in molecular dynamics simulations setup, using
    :program:`psfgen` for example.

  * Context manager methods are added to trajectory classes.  A trajectory
    file can be opened as follows::

      with Trajectory('mdm2.dcd') as traj:
          for frame in traj:
              calcGyradius(frame)

  * :class:`.Chain` slicing is implemented::

      p38 = parsePDB('1p38')
      chA = p38['A']
      res_4to10 = chA[4:11]
      res_100toLAST = chA[100:]

  * Some support for bonds is implemented to :class:`.AtomGroup` class.
    Bonds can be set using :meth:`~.AtomGroup.setBonds` method.  All
    bonds must be set at once.  :meth:`~.AtomGroup.iterBonds` or
    :meth:`~.Atom.iterBonds` methods can be used to iterate over bonds
    in an AtomGroup or an Atom.

  * :func:`.parsePSF` parses bond information and sets to the
    atom group.

  * :meth:`.Selection.update` method is implemented, which may be useful to
    update a distance based selection after coordinate changes.

  * :func:`.buildKDTree` and :func:`.iterNeighbors` methods
    are implemented for facilitating identification of pairs of atoms that
    are proximal.

  * :meth:`~.AtomGroup.iterAtoms` method is implemented to all
    :mod:`~prody.atomic` classes to provide uniformity for atom iterations.

  * :func:`.calcAngle`, :func:`.calcDihedral`, :func:`.calcPhi`,
    :func:`.calcPsi`, and :func:`.calcOmega` methods are implemented.

**Improvements**:

  * :meth:`.Chain.getSelstr` and :meth:`.Residue.getSelstr` methods are
    improved to include the selection string of a :class:`.Selection` when
    they are built using one.

**Changes**:

  * :class:`.Residue` methods :meth:`~.Residue.getNumber`,
    :meth:`~.Residue.setNumber`, :meth:`~.Residue.getName`,
    :meth:`~.Residue.setName` methods are deprecated and will be
    removed in v1.0.

  * :class:`.Chain` methods :meth:`~.Chain.getIdentifier` and
    :meth:`~.Chain.setIdentifier` methods are deprecated and will be
    removed in v1.0.

  * :class:`.Polymer` attribute :attr:`~.Polymer.identifier`
    is renamed as :attr:`~.Polymer.chid`.
  * :class:`.Chemical` attribute :attr:`~.Chemical.identifier`
    is renamed as :attr:`~.Chemical.resname`.

  * :meth:`getACSI` and :meth:`setACSI` are renamed as
    :meth:`~.AtomGroup.getACSIndex` and
    :meth:`~.AtomGroup.setACSIndex`, respectively.

  * :func:`calcRadiusOfGyration` is deprecated and will be removed
    in v1.0.  Use :func:`.calcGyradius` instead.


**Bugfixes**:

  * Fixed a problem in :func:`.parsePDB` that caused loosing existing
    coordinate sets in an :class:`.AtomGroup` when passed as *ag*
    argument.

  * Fixed a problem with ``"same ... as ..."`` argument of :class:`.Select`
    that selected atoms when followed by an incorrect atom selection.

  * Fixed another problem with ``"same ... as ..."`` which result in selecting
    multiple chains when same chain identifier is found in multiple segments
    or multiple residues when same residue number is found in multiple
    segments.

  * Improved handling of negative integers in indexing :class:`.AtomGroup`
    instances.


0.9.2 (Jan 11, 2012)
-------------------------------------------------------------------------------

**New Features**:

  * :program:`prody catdcd` command is implemented for concatenating and/or
    slicing :file:`.dcd` files.  See :ref:`prody-catdcd` for usage examples.

  * :class:`.DCDFile` can be opened in write or append mode, and
    coordinate sets can be added using :meth:`~.DCDFile.write` method.

  * :func:`.getReservedWords` can be used to get a list of words
    that cannot be used to label user data.

  * :func:`.confProDy` function is added for configuring ProDy.

  * ProDy can optionally backup existing files with :file:`.BAK` (or another)
    extension instead of overwriting them.  This behavior can be activated
    using :func:`.confProDy` function.

**Improvements**:

  * :func:`.writeDCD` file accepts :class:`.AtomGroup` or other
    :class:`.Atomic` instances as *trajectory* argument.

  * :program:`prody align` command can be used to align multiple PDB structures.

  * :program:`prody pca` command allows atom selections for DCD files that are
    accompanied with a PDB or PSF file.

**Changes**:

  * :class:`.DCDFile` instances, when closed, raise exception, similar
    to behavior of :class:`file` objects in Python.

  * Title of :class:`.AtomGroup` instances resulting from copying an
    :class:`.Atomic` instances does not start with 'Copy of'.

  * :func:`changeVerbosity` and :func:`getVerbosityLevel` are renamed as
    :func:`.setVerbosity` and :func:`.getVerbosity`, respectively.
    Old names will be removed in v1.0.

  * ProDy applications (commands) module is rewritten to use new
    :mod:`argparse` module. See :ref:`prody-apps` for details of changes.

  * :mod:`argparse` module is added to the package for Python versions 2.6
    and older.


**Bugfixes**:

  * Fixed problems in :func:`.loadAtoms` and :func:`.saveAtoms` functions.

  * Bugfixes in :func:`.parseDCD` and :func:`.writeDCD` functions for Windows
    compatability.


0.9.1 (Nov 9, 2011)
-------------------------------------------------------------------------------

**Bug Fixes**:

  * Fixed problems with reading and writing configuration files.
  * Fixed problem with importing nose for testing.

0.9 (Nov 8, 2011)
-------------------------------------------------------------------------------

**New Features**:

  * `PDBML <http://pdbml.pdb.org/>`_ and `mmCIF <http://mmcif.pdb.org/>`_ files
    can be retrieved using :func:`.fetchPDB` function.

  * :func:`.getPDBLocalFolder` and :func:`.setPDBLocalFolder` functions are
    implemented for local PDB folder management.

  * :func:`.parsePDBHeader` is implemented for convenient parsing of
    header data from :file:`.pdb` files.

  * :func:`.showProtein` is implemented to allow taking a quick look
    at protein structure.

  * :class:`.Chemical` and :class:`.Polymer` classes are implemented for
    storing chemical and polymer component data parsed from PDB header records.


**Changes**:

  .. warning::  This release introduces numerous changes in method and function
     names all aiming to improve the interactive usage experience.  All changes
     are listed below.  Currently these functions and methods are present in
     both old and new names, so code using ProDy must not be affected.  Old
     function names will be removed from version 1.0, which is expected to
     happen late in the first quarter of 2012.

     Old function names are marked as deprecated, but ProDy will not issue any
     warnings until the end of 2011.  In 2012, ProDy will automatically start
     issuing :class:`DeprecationWarning` upon calls using old names to remind
     the user of the name change.

     For deprecated methods that are present in multiple classes, only the
     affected modules are listed for brevity.

  .. note::  When modifying code using ProDy to adjust the name changes,
     turning on deprecation warnings may help locating all use cases of the
     deprecated names.  See :meth:`.turnonDeprecationWarnings` for this
     purpose.

  **Functions**:

  The following function name changes are mainly to reduce the length of the
  name in order to make them more suitable for interactive sessions:

  ========================================  =====================================
  Old name                                  New name
  ========================================  =====================================
  :func:`applyBiomolecularTransformations`  :func:`.buildBiomolecules`
  :func:`assignSecondaryStructure`          :func:`.assignSecstr`
  :func:`scanPerturbationResponse`          :func:`.calcPerturbResponse`
  :func:`calcCrossCorrelations`             :func:`.calcCrossCorr`
  :func:`calcCumulativeOverlap`             :func:`.calcCumulOverlap`
  :func:`calcCovarianceOverlap`             :func:`.calcCovOverlap`
  :func:`showFractOfVariances`              :func:`.showFractVars`
  :func:`showCumFractOfVariances`           :func:`.showCumulFractVars`
  :func:`showCrossCorrelations`             :func:`.showCrossCorr`
  :func:`showCumulativeOverlap`             :func:`.showCumulOverlap`
  :func:`deform`                            :func:`.deformAtoms`
  :func:`calcSumOfWeights`                  :func:`.calcOccupancies`
  :func:`showSumOfWeights`                  :func:`.showOccupancies`
  :func:`trimEnsemble`                      :func:`.trimPDBEnsemble`
  :func:`getKeywordResidueNames`            :func:`.getKeywordResnames`
  :func:`setKeywordResidueNames`            :func:`.setKeywordResnames`
  :func:`getPairwiseAlignmentMethod`        :func:`.getAlignmentMethod`
  :func:`setPairwiseAlignmentMethod`        :func:`.setAlignmentMethod`
  :func:`getPairwiseMatchScore`             :func:`.getMatchScore`
  :func:`setPairwiseMatchScore`             :func:`.setMatchScore`
  :func:`getPairwiseMismatchScore`          :func:`.getMismatchScore`
  :func:`setPairwiseMismatchScore`          :func:`.setMismatchScore`
  :func:`getPairwiseGapOpeningPenalty`      :func:`.getGapPenalty`
  :func:`setPairwiseGapOpeningPenalty`      :func:`.setGapPenalty`
  :func:`getPairwiseGapExtensionPenalty`    :func:`.getGapExtPenalty`
  :func:`setPairwiseGapExtensionPenalty`    :func:`.setGapExtPenalty`
  ========================================  =====================================

  **Coordinate methods**:

  All :meth:`getCoordinates` and :meth:`setCoordinates` methods in
  :mod:`~prody.atomic` and :mod:`~prody.ensemble` classes are renamed as
  :meth:`getCoords` and :meth:`setCoords`, respectively.

  ``getNumOf`` **methods**:

  All method names starting with ``getNumOf`` now start with ``num``.  This
  change brings two advantages: method names (i) are considerably shorter,
  and (ii) do not suggest that there might also be corresponding ``set``
  methods.

  ============================  ====================  =========================
  Old name                      New name              Affected modules
  ============================  ====================  =========================
  :meth:`getNumOfAtoms`         :meth:`numAtoms`      :mod:`~prody.atomic`,
                                                      :mod:`~prody.ensemble`,
                                                      :mod:`.dynamics`
  :meth:`getNumOfChains`        :meth:`numChains`     :mod:`~prody.atomic`
  :meth:`getNumOfConfs`         :meth:`numConfs`      :mod:`~prody.ensemble`
  :meth:`getNumOfCoordsets`     :meth:`numCoordsets`  :mod:`~prody.atomic`,
                                                      :mod:`~prody.ensemble`
  :meth:`getNumOfDegOfFreedom`  :meth:`numDOF`        :mod:`.dynamics`
  :meth:`getNumOfFixed`         :meth:`numFixed`      :mod:`~prody.ensemble`
  :meth:`getNumOfFrames`        :meth:`numFrames`     :mod:`~prody.ensemble`
  :meth:`getNumOfResidues`      :meth:`numResidues`   :mod:`~prody.atomic`
  :meth:`getNumOfMapped`        :meth:`numMapped`     :mod:`~prody.atomic`
  :meth:`getNumOfModes`         :meth:`numModes`      :mod:`.dynamics`
  :meth:`getNumOfSelected`      :meth:`numSelected`   :mod:`~prody.ensemble`
  :meth:`getNumOfUnmapped`      :meth:`numUnmapped`   :mod:`~prody.atomic`
  ============================  ====================  =========================

  ``getName`` **method**:

  :meth:`getName` methods are renamed as :meth:`getTitle` to avoid confusions
  that might arise from changes in :mod:`~prody.atomic` method names listed
  below.  All classes in :mod:`~prody.atomic`, :mod:`~prody.ensemble`, and
  :mod:`~prody.dynamics` are affected from this change.

  In line with this change, :func:`.parsePDB` and
  :func:`.parsePQR` *name* arguments are changed to *title*, but
  *name* argument will also work until release 1.0.

  This name change conflicted with :meth:`.DCDFile.getTitle` method.
  The conflict is resolved in favor of the general :meth:`getTitle` method.
  An alternative method will be implemented to handle title strings in
  :file:`DCD` files.

  ``get/set`` **methods of atomic classes**:

  Names of ``get`` and ``set`` methods allowing access to atomic data are all
  shortened as follows:

  ===========================  =======================
  Old name                     New name
  ===========================  =======================
  :meth:`getAtomNames`         :meth:`getNames`
  :meth:`getAtomTypes`         :meth:`getTypes`
  :meth:`getAltLocIndicators`  :meth:`getAltlocs`
  :meth:`getAnisoTempFactors`  :meth:`getAnisos`
  :meth:`getAnisoStdDevs`      :meth:`getAnistds`
  :meth:`getChainIdentifiers`  :meth:`getChains`
  :meth:`getElementSymbols`    :meth:`getElements`
  :meth:`getHeteroFlags`       :meth:`getHeteros`
  :meth:`getInsertionCodes`    :meth:`getIcodes`
  :meth:`getResidueNames`      :meth:`getResnames`
  :meth:`getResidueNumbers`    :meth:`getResnums`
  :meth:`getSecondaryStrs`     :meth:`getSecstrs`
  :meth:`getSegmentNames`      :meth:`getSegnames`
  :meth:`getSerialNumbers`     :meth:`getSerials`
  :meth:`getTempFactors`         :meth:`getBetas`
  ===========================  =======================

  This change affects all :mod:`~prody.atomic` classes,
  :class:`.AtomGroup`, :class:`.Atom`, :class:`.Chain`,
  :class:`.Residue`, :class:`.Selection` and
  :class:`.AtomMap`.


  **Other changes in atomic methods**:

  * :meth:`getSelectionString` renamed as :meth:`getSelstr`

  Methods handling user data (which was previously called attribute) are
  renamed as follows:

  ====================  =======================
  Old name              New name
  ====================  =======================
  :meth:`getAttribute`  :meth:`getData`
  :meth:`getAttrNames`  :meth:`getDataLabels`
  :meth:`getAttrType`   :meth:`getDataType`
  :meth:`delAttribute`  :meth:`delData`
  :meth:`isAttribute`     :meth:`isData`
  :meth:`setAttribute`  :meth:`setData`
  ====================  =======================

  **To be removed**:

  Finally, the following methods will be removed, but other suitable methods
  are overloaded to perform their action:

  * removed :meth:`AtomGroup.getBySerialRange`, overloaded
    :meth:`.AtomGroup.getBySerial`
  * removed :func:`.getProteinResidueNames`, overloaded
    :func:`.getKeywordResnames`
  * removed :func:`.setProteinResidueNames`, overloaded
    :func:`.setKeywordResnames`


**Scripts**:

  The way ProDy scripts work has changed. See :ref:`prody-apps` for details.
  Using older scripts will start issuing deprecation warnings in 2012.

**Bug Fixes**:

  * Bugs in :func:`.execDSSP` and :func:`.execSTRIDE` functions that caused
    exceptions when compressed files were passed is fixed.

  * A problem in scripts for PCA of DCD files is fixed.


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

Development of NMWiz is finalized and it will not be distributed in the ProDy
installation package anymore.  See :ref:`nmwiz` pages for instructions on
installing it.