======================
 MDAnalysis CHANGELOG
======================

The rules for this file:
  * entries are sorted newest-first.
  * summarize sets of changes - don't reproduce every subversion log comment here.
  * don't ever delete anything.
  * keep the format consistent (79 char width, M/D/Y date format) and do not
    use tabs but use spaces for formatting	 

------------------------------------------------------------------------------

12/24/12 danny.parton, jandom, orbeckst, jjlights03, jphillips, naveen.michaudagrawal, andy.somogyi, sebastien.buchoux

  * 0.7.7

  Enhancements

  * multithreaded distance_array() (Issue 80, experimental); see the 
    new core.parallel.distance module
  * MDAnalysis.analysis.rms for simple RMSD analysis
  * format of input coordinates can be set as (filename, format)
    tuples (Issue 76) 
  * new AtomGroup.asphericity() and AtomGroup.shapeParameter()   
    methods to compute shape descriptors.
  * access to forces (AtomGroup.forces with get_forces() and set_forces();
    the default unit for force is kJ/(mol*A) and it is automatically 
    converted from/to native). Currently, only the TRR Reader/Writer
    support forces.
  * all element masses
  * logger reports current version when starting

  Fixes

  * fixed Issue 115 (GROReader now uses fixed-column width format to read GRO files)
  * fixed Issue 116 (Failed to write AMBER netcdf trajectory from AtomGroup)
  * fixed Issue 117 (could not write Gromacs XTC/TRR from AMBER netcdf)
  * fixed Issue 120 (DCDWriter: wrote wrong unitcell information)
  * fixed Issue 121 (PSFParser would fail with IndexError for files without SEGID)
  * Issue 122 (made installation of netCDF4 library optional, which
    means that users of the AMBER netcdf Reader/Writer will have to
    manually install the library and its dependencies netcdf and HDF5, 
    see https://code.google.com/p/mdanalysis/wiki/netcdf)

06/30/12 orbeckst, joshua.adelman, andy.somogyi, tyler.je.reddy, lukas.grossar, denniej0, danny.parton

  * 0.7.6 

  Enhancements

  * GRO file velocities may be accessed as AtomGroup.velocities()
    or Atom.velocity (Issue 102)
  * PrimitivePDBReader can be sliced
  * AMBER NetCDF (binary trajectory) reader and writer, supporting
    coordinates and velocities; requires netcdf4-python (Issue 109)
  * additional attributes and methods for AtomGroup to consolidate
    the interface to the Timestep: attribute 'positions' and 
    'get_positions()' can be used instead of the 'coordinates()' 
    method. get/set methods for both positions and velocities.
  * almost all Readers now support some form of slicing; unsupported
    slicing operations will raise a TypeError  
  * additional analysis for Nucleic Acid order parameters 
    (MDAnalysis.analysis.nuclinfo) 
  * AMBER TOPParser now able to do both amber10 and amber12 formats 
    (Issue 100)
 
  Changes

  * HydrogenBondAnalysis: multiple enhancements and changes (Issue 103)
    - many new analysis functions (see docs)
    - run() does not return the results anymore; results are simply
      stored as attribute timeseries (similar to other analysis tools)
    - only write per-frame debugging messages to the logfile when the 
      new verbose keyword is set to True
    - more reliable detection of hydrogens bonded to heavy atoms  
    - remove duplicate hydrogen bonds from the output
  * removed CHO and EAM (formyl and ethanol termini of gA in CHARMM)
    from the set of residues recognized as protein (collision with
    commonly used CHO for cholesterol)
  * PrimitivePDBWriter: special segid SYSTEM is translated to empty
    chainID
  * In order to write multi frame PDB files, the multiframe=True
    keyword must be supplied or use the MultiPDBWriter 
  * empty AtomGroup can be constructed or can result from a selection
    without matches; it does *not* raise NoDataError anymore (Issue 12)
  * all single frame readers denote the first (and only) frame as 
    frame number 1 (i.e. ts.frame == 1); it used to be 0 but 1 is
    consistent with the way this is is handled with real trajectories
  * requires Biopython >= 1.51 (fixes for Issue 112 and Issue 113)
  * Atom.type is always stored as a string.

  Fixes

  * HydrogenBondAnalysis: NH1 and NH2 were not recognized
  * GROWriter: enforce maximum resname and atomname length of 5 chars
  * Universe.load_new() raised a NameError (thanks to JiyongPark.77)
  * fixed Issue 105 (trajectory snapshots could not be written to PDB)
  * fixed Issue 107 (NAMD/VMD space delimited PSF files can be
    autodetected and read); important when using CGENFF atom types
    (thanks to JiyongPark.77 for initial patch)
  * fixed Issue 101 (could not write single frame to trr file)
  * fixed: permissive=True flag was ignored in Universe and hence the
    PrimitivePDBReader was always selected even if the Biopython one
    was desired
  * fixed Issue 112 (used removed Biopython constructs in 
    MDAnalysis.analysis.align.fasta2select; thanks to francesco.oteri
    for a test case and fix)
  * fixed failing 'type' selection for topology formats that read an
    atom type as an integer (such as the AMBER parser)
  * fixed Issue 111 (NAN in pycpqrot and RMSD calculation)
  * fixed Issue 113 (replaced outdated Biopython to call ClustalW)


02/16/12 sebastien.buchoux

  * 0.7.5.1
  
  Fixes
  
  * added: missing files (Issue 95)
  * removed: unused delaunay-related files

02/11/12 orbeckst, sebastien.buchoux, jandom, hallben, lukasgrossar

  * 0.7.5

  MDAnalysis can now be found on PyPI, allowing simple installation
  from the internet. Metadata was added to setup to facilitate PyPI
  upload and pages on the wiki describe how to do this.
  In addition, Debian/Ubuntu packages are also available.

  Note that in order to run UnitTests one needs the separate package
  MDAnalysisTests (also release 0.7.5).

  Enhancements

  * new method OtherWriter() for trajectory readers to generate a
    writer for any format that has been initialised for the common
    basic values
  * new simple Residue.chi1_selection() selection
  * new distances.between() function (EXPERIMENTAL)
  * support LAMMPS non-standard DCD files (Issue 84; EXPERIMENTAL)
  * read and write multi-frame PDB files (Issue 77; EXPERIMENTAL)
  * extend the PDB parsing, support CONECT and REMARK entries
  * new GNM-based trajectory analysis module (Issue 90)
  * Read/Write velocities with TRR, new attribute Atom.velocity
    and AtomGroup.velocities() (Issue 91)
  * hydrogen bond analysis detects a range of GLYCAM atom types
    and utils.convert_aa_code will also accept GLYCAM-style residue
    names (Issue 92)
  * XYZ reader: can set timestep (Issue 92)

  Changes

  * The UnitTests are now integrated with the separate test data in a 
    separate Python package named MDAnalysisTests; to run the tests 
    for 0.7.5 one will need MDAnalysisTests-0.7.5 (Issue 87).
  * install a range of analysis dependencies right away: networkx,
    biopython, GridDataFormats (usually all painless); leave scipy and
    matplotlib to the user and the local package manager  
  * When writing a trajectory and converting units, effectively a copy
    of the timestep is made and the in-memory timestep is not
    altered. In this way, analysis after writing a frame will still
    see the coordinates in MDAnalysis units and not converted units.
  
  Fixes

  * analysis.align.rms_fit_traj(): can output fitted trajectory to any
    supported format not just the input format
  * fixed ProgressMeter: default format string was broken
  * fixed: ResidueGroup and SegmentGroup indexing (did not work with
    numpy.int64 etc) and now raise TypeError if it does not fit
  * fixed HydrogenBondingAnalysis backbone donor list: had C but
    should have been O (this was supposed to be fixed with r849 in
    0.7.4 but a typo crept in). NOTE: analysis might have produced
    partially wrong results. 
  * fixed: dihedral() and other methods using core.util.angle() sometimes
    returned nan instead of +pi or -pi
  * fixed: writing a trajectory from chained CRD files gave garbage
    coordinates (Issue 81)
  * fixed: support files for docs are now in included in the source
    distribution (thanks to Sebastien Buchoux; Issue 82)
  * fixed: core.util.iterable() would wrongly detect unicode strings
    as "iterable"; this lead the Reader autodections and then the
    ChainReader fail with "Runtime Error: Maximum recursion depth
    exceeded" for single filenames provided as a unicode string.
  * fixed: HBond analysis pickling of tables (Issue 92) 


07/09/11 orbeckst, dcaplan, jandom

  * 0.7.4

  Enhancements

  * Universe() got new keywords topology_format and format to allow
    the user to specify the file formats instead of deriving it from the
    extensions (does not work with "chained" files at the moment); thanks to
    Michael Lerner for the suggestion
  * Chain trajectory reader allows frame indexing.
  * Issue 75: additional donors and acceptors keywords for H-bond analysis
  * structural alignment functions alignto() and rms_fit_traj() can also take a
    list of selection strings in order to define atom groups with fixed atom
    order and alignto() preserves the order of supplied AtomGroups for the
    special select values "all" and None.
  * new set_* methods for AtomGroup allows changing of Atom attributes
    for all members of the group (such as the segid) (EXPERIMENTAL)
  * new Atom and Residue attribute resnum that can be used to store
    the canonical PDB residue number (EXPERIMENTAL)

  Fixes
 
  * fixed Issue 74 (bug in AMBER topology parser which would show up for
    certain numbers of input lines; thanks to htaoyu1)
  * fix for Issue 48 (sparse contact_matrix in distances.py was slow when 
    written in pure python; optimized in c code using scipy.weave) 
  * HydrogenBondingAnalysis: donor atom name CO --> O (proper backbone
    oxygen); without the fix one misses most of the backbone H-bonds
  * alignto() and rms_fit_trj(): order of mobile and reference
    selection was reversed when supplied as a tuple (sel1, sel2)

  Changes

  * replaced analysis.util.progress_meter() with class core.log.ProgressMeter

  * Issue 28: split off test data trajectories and structures from
    MDAnalaysis/tests/data into separate package MDAnalysisTestData, which is
    required to run the UnitTests from release 0.7.4 onwards. Numbering matches
    the earliest MDAnalysis release for which the data is needed. Any later
    releases of MDAnalysis will also use these test data unless a
    MDAnalysisTestData package with a higher release number is available.

 

05/22/11 orbeckst, jandom, Benjamin Hall, Paul Rigor, dcaplan,
         Christian Beckstein (logo), denniej0

  * 0.7.3

  Removals

  * completely removed the old core.rms_fitting module (and thus we also do not
    depend on the LAPACK library anymore, which should simplify installation);
    use the functions accessible through MDAnalysis.analysis.align (which are
    faster and use QCPROT)

  Enhancements
 
  * PDBQT (autodock) format added (reading and writing of single frames)
  * new attributes universe.trajectory.frame and universe.trajectory.frame:
    report the current frame number and time (e.g. in ps) of the current frame
    of the trajectory
  * new attribute Timestep.volume (unit cell volume)
  * new special methods of AtomGroup: bond(), angle(), improper() in
    addition to the calculation of dihedral()
  * HELANAL helix analysis in MDAnalysis.analysis.helanal; Python
    implementation of helanal.f from
    http://www.ccrnp.ncifcrf.gov/users/kumarsan/HELANAL/helanal.html (Benjamin
    Hall, used under GPL v2+)
  * hydrogen bonds analysis in MDAnalysis.analysis.hbonds
  * MDAnalysis.analysis.distances.dist() for calculating distances between
    matching atoms in two groups
  * MDAnalysis logo by Christian Beckstein (and a reformatting of the
    online docs to match the logo theme)

  Change of behaviour

  * alignto() and rms_fit_trj(): changed keyword 'select' default from
    'backbone' to 'all'

  Fixes

  * fixed alignto() (raised KeyError)
  * fixed Issue 57 (check for illegal coordinates when writing PDB and GRO)
  * use spaces everywhere and no TABs and tell emacs and vim to keep it that
    way (Issue 69)
  * fixed Issue 70 (problems with instant atom selections)


03/31/11 orbeckst, dcaplan, naveen.michaudagrawal
  * 0.7.2
  * NOTE: minimum Python version required is 2.5 (since 0.6.3)

  Enhancements
 
  * loading from a PDB sets segid to the chain id if it exists
  * PrimitivePDBWriter uses first letter of segid as PDB chain id
  * aliased segment.name to segment.id
  * new method AtomGroup.bbox() that returns the orthorhombic bounding box
  * enhancements of the analysis.density module (build density
    from B-factors)
  * PQR radius is now an attribute of Atom; AtomGroup.radii() returns the
    radii as a NumPy array; internally B-factor has also become an
    attribute of each Atom.
  * recognise many more OPLS/AA and Amber residue names as "protein"
  * recognise more atom masses (taken from CHARMM27 and Gromacs) and 
    atom types (from CHARMM, Amber, OPLS, GROMOS) and moved
    masses and types into new module topology.tables; the type recognition
    is still incomplete but can be easily enhanced in tables
  * analysis.align: convenience functions rotation_matrix() and alignto()
  * TrajectoryReader gained Writer() method which returns an appropriate
    TrajectoryWriter instance that can be used for processing this
    trajectory (enhancement of the Trajectory API); if no Writer is known
    then a NotImplementedError is raised    
  * doc improvements   
   
  Fixes
  
  * installation: removed dependency on Cython; developer should
    use setup_developer.py instead of setup.py (Issue 66)   
  * Fixed a problem with the strict PDBReader: raised exception when the
    pdb did not contain a segid
  * Support for PDBs with 4 character resnames and segID output when
    writing (Issue 63) --- makes the (default) PrimitivePDBReader/Writer
    more suitable for NAMD/CHARMM but breaks strict PDB standard. If
    you need full PDB reading capabilities, use the strict PDB reader
    [i.e. use Universe(..., permissive=False)]
  * fixed bug in (experimental) phi and psi selections
  * fixed bugs in reading of unit cells (Issue 60, Issue 61, Issue 34)
  * universe.trajectory.delta returns the full precision dt value
    instead of a value rounded to 4 decimals (Issue 64)
  * fixed bug in DCDWriter (XTC->DCD was broken, Issue 59)

02/08/11 orbeckst, denniej0, jandom, tyler.je.reddy, Joshua Adelman
  * 0.7.1 release
  * online documentation
  * AMBER topology and trj capabilities (netcdf not yet available)
  * PQR file reading support
  * new analysis.contacts.ContactAnalysis1 class that supports a
    native contact analysis between arbitrary groups     
  * new examples (e.g. peptide helix clustering in a membrane)
  * fixed Issue 58 (align.rms_fit_trj; fix reported by Joshua Adelman)
  * new analysis module 'density': creation and analysis of volume data
  * fast RMSD aligner based on Douglas Theobald's QCP method for
    calculating the minimum RMSD between two structures and
    determining the optimal least-squares rotation matrix;
    replaces the slower previous code (implemented by Joshua Adelman from
    his pyqcprot package https://github.com/synapticarbors/pyqcprot);
    deprecated core.rms_fitting.rms_rotation_matrix() and scheduled for
    removal in 0.8
  * uses cython instead of pyrex

11/05/10 orbeckst, denniej0, tyler.je.reddy, danny.parton, joseph.goose
  * major release 0.7.0
    (includes changes that can BREAK BACKWARDS COMPATIBILITY)
  * Removed ALL DEPRECATED code:
    - AtomGroup.principleAxes (Issue 33)
    - DCD.DCDReader.dcd_header() and DCD.DCDWriter.dcd_header()
      (use _dcd_header())
    - Universe.dcd (and Universe.xtc, Universe.trr...) --- from
      now on only Universe.trajectory is supported. 
      WILL BREAK LEGACY CODE!
    - removed the following packages from top-level MDAnalysis
      name space:
          - AtomGroup, Selection: import them from MDAnalysis.core if
            really needed (e.g. 'import MDAnalysis.core.AtomGroup')
          - distances, rms_fitting: 'import MDAnalysis.analysis.distances'
            or 'import MDAnalysis.analysis.align.rms_fitting' (the
            actual modules still live in MDAnalysis.core but they
            might get moved in the future and bundled with
            transformations)
          - 'from MDAnalysis import *' will only get ['Timeseries',
            'Universe', 'asUniverse', 'Writer', 'collection']
          - removed copy flag from distance_array and self_distance_array:
            setting it to False would always give wrong results so there was
            no good reason keeping it around 
  * whitespace is no longer required around parentheses for 
    selectAtoms strings but the old syntax with white space
    still works (Issue 43)
  * improved trajectory writing
    - MDAnalysis.Writer() factory function that provides an
      appropriate writer for the desired file format
    - Writer.write() accepts a Timestep, a Universe, or a 
      arbitrary AtomGroup (e.g. from a selection); this is much
      more flexible than Writer.write_next_timestep()
  * New attributes for trajectory readers: dt (time between
    frames) and totaltime (length of the trajectory)
  * Changes to AtomGroup
    - Indexing is made consistent with the way lists behave:
       1. indexing with integers returns a single Atom
       2. slicing always returns a new AtomGroup
       3. advanced slicing with a list or array returns a new
          AtomGroup (NEW, fixes Issue 36) 
    - AtomGroup coordinates can be manipulated (translate(),
      rotate() and rotateby() methods; when appropriate, these methods
      can take AtomGroups or arrays to determine coordinates)
    - new attributes 'residues' and 'segments' for AtomGroup to give 
      access to the list of residue/segment objects of the group 
    - new exception 'NoDataError'; raised when creation of an empty
      AtomGroup is attempted (see also Issue 12)
    - consistent representation of the Segment > Residue > Atom
      hierarchy: all classes related to AtomGroup have the
      attributes 'atoms', 'residues', 'segments' which provide
      access to groups of the corresponding objects
  * improvements to Residue, ResidueGroup and Segment classes 
    - documented accessing residues from Segment as
      Segment.r<resid>; resid is 1-based -- BREAKS OLD CODE 
      that relied on this being 0-based
    - added SegmentGroup class
          - can write from Residue, ResidueGroup and Segment (Issue 46)
          - residue name attribute of a Segment now consistently
            returns a ResidueGroup (Issue 47) -- MIGHT BREAK OLD CODE
          - added documentation and examples in the doc strings
          - new special dihedral angle selections defined for Residue
            class to simplify analysis of backbone torsions (experimental)
  * new contact_matrix method for calculating contacts 
    (Issue 30); for large (N > ~10000) coordinate arrays
    automatically switches to a method using a sparse matrix (slower)
  * more example scripts (e.g. for membrane analysis, trajectory writing,
    coordinate transformations)
  * CRDReader added (fixes  Issue 40 ) ... it will work for both
    standard and extended formats: NO special flags needed. 
  * CRDWriter will now write extended crd files: NO special flags needed.  
  * By default, PDB files are read with the PrimitivePDBReader and not
    the Bio.PDB reader anymore because the latter can drop atoms when
    they have the same name in a residue (which happens for systems
    generated from MD simulations) The PrimitivePDBReader copes just fine
    with those cases (but does not handle esoteric PDB features such as
    alternative atoms and insertion codes that are not needed for
    handling MD simulation data).  
      - The default behaviour of MDAnalysis  can be set through the flag
	MDAnalysis.core.flag['permissive_pdb_reader']. The default is True.  
      - One can always manually select the PDB reader by providing the
        permissive keyword to Universe; e.g. Universe(...,permissive=False)
        will read the input file with the Bio.PDB reader. This might be
        useful when processing true Protein Databank PDB files.
  * fixed Issue 51 (distance_array() did not properly check its
    input and wrong results could be returned if the input was a
    float64 and a float32 array)

09/19/10 orbeckst
  * quick-fix release 0.6.4.1
  * fixed import issue with python 2.5 (Issue 41)

09/16/10 orbeckst, danny.parton
  * release 0.6.4
  * GRO writer added
  * fixed XTC writer (Issue 38)
  * convert box representations (Issue 37)
  * primitive PDB parser added (slightly faster and ignores
    correctness of resids, atomnames etc but reads CRYST1 into unitcell)
  * Universe gained the 'permissive' flag to switch on the
    primitive PDB parser/reader
  * Simple 'chained reader' which enables a Universe to
    transparently read a list of trajectory files (Issue 39).
  * Additional methods for AtomGroup: numberOfResidues(), resids(), resnames()
  * new bilayer analysis script for membrane composition on a
    per-leaflet basis (examples/membrane-composition.py); also
    renamed examples/leaflet.py to membrane-leaflets.py

07/08/10 orbeckst, denniej0, danny.parton, philipwfowler
  * 0.6.3 release
  * minimum requirement is python 2.4 (using with_statement in the
    analysis module and we have not tested on 2.3 in a while)
  * analysis modules (MDAnalysis.analysis):
     - lipid bilayer leaflet detection
     - native contact analysis ("q1-q2")
     - rms-fitting based on sequence alignment
  * write selections for other codes from AtomGroups (VMD, pymol, CHARMM, 
    Gromacs ndx)
  * gro reader (Issue 31)
  * better API for loading a topology and a coordinate file in Universe()
  * trajectory reader: DCDReader can reverse trajectory with negative
    step increment; XTC/TRRReader can do simple (forward) slices by doing
    (slow!) sequential iteration
  * deprecated principleAxes() and introduced principalAxes() with less
    confusing return values (Issue 33).
  * fixed wrong unitcell dimensions for XTC/TRR (Issue 34)
  * added basic XYZ reader with compression support (Issue 35)
  * PDB reader guesses masses (unknown elements are set to 0)
  * installation requires Biopython (www.biopython.org)
 
05/28/10 orbeckst, denniej0
  * 0.6.2 release
  * removed a number of imports from the top level (such as rms_fitting);
    this might break some scripts that still rely on the layout that was
    used for 0.5.x (which is now officially declared deprecated)
  * defined trajectory API
  * deprecated DCD.dcd_header --> DCD._dcd_header
  * XTC and TRR compute numframes by iterating through trajectory (slow!)
  * introduced units: base units are ps (time) and Angstrom (length); see core.flags
  * XTC and TRR automatically convert between native Gromacs units (ps, nm) and 
    base units (uses core.flags['convert_gromacs_lengths'] = True)
  * more test cases
  * *really* FIXED Issue 16 (can easy_install from tar file)
  * FIXED a bug in AtomGroup.principalAxes()
  * added dependency information to setup.py (numpy and
    biopython by default; nose for tests)

04/30/10 orbeckst

  * 0.6.1 release
  * can build a simple Universe from a PDB file (FIXES Issue 11)
  * can read Gromacs XTC and TRR files (FIXES Issue 1) but no
    Timeseries or Collections yet for those formats
  * removed Universe.load_new_dcd() and Universe.load_new_pdb()
    --- use the generic Universe.load_new() (MIGHT BREAK OLD CODE)
  * removed deprecated Universe._dcd attribute (MIGHT BREAK OLD CODE)
  * FIXED bug in PDB.PDBWriter and CRD.CRDWriter
  * use SloppyPDB in order to cope with large PDB files
  * core.distances.self_distance_array() is now behaving the
    same way as distance_array()
  * defined Trajectory API (see MDAnalysis/coordinates/__init__.py)
  * renamed _dcdtest to dcdtimeseries (will not affect old code)
  * unit tests added (still need more test cases)

03/31/10 orbeckst, denniej0 
  * 0.6.0 release
  * added KDTree and Neighbour searching code from Biopython for
    faster distance selections: used for AROUND selections;
    POINT is using distance matrix by default as this is
    faster. This can be configured with core.flags
  * core.flags infrastructure to tweak behaviour at run time
  * updated LICENSE file with Biopython License
  * some selections for nucleic acids
  * completely reorganized directory structure to make
    enhancements easier to incorporate
  * FIXED (partial): Issue 18 (Timeseries from a universe.segID
    selection, reported by lordnapi)
  * FIXED: Issue 19 (Timeseries collections were broken,
    reported by Jiyong)
  * can write single frames as pdb or crd (AtomGroup gained the
    write() method)
  * some selections for nucleic acids
  * completely reorganized directory structure to make
    enhancements easier to incorporate
  * FIXED: Issue 19 (Timeseries collections were broken)
  * improved installation
     - EasyInstall (setuptools) support (FIXED Issue 16)
     - better instructions in INSTALL
     - slightly better handling of the configuration of the fast
       linear algebra libs via the setup.cfg file

08/23/08 naveen, orbeckst
  * 0.5.1 release
  * primitive PDB writer (only works if coordinates were read from a pdb)
  * B-factor property (detailed implementation subject to change)
  * periodic flag for PointSelection
  * new correl series: orientation vector for 3-site molecules
    (to calculate the water dipole moment of SPC or TIP3P)
  * distance.distance_array() bug fixed (see doc string)
  * updated LICENSE file UIUC Open Source License

01/29/08 orbeckst
  * prepared 0.5.0 release. Includes previously disabled
    distance code, PDB reader, incomplete XTC reader (code by
    Benjamin Hall), and marginally updated documentation &
    licenses

11/12/07 naveen
  * prepared for release outside lab

