Version 2.2.5
(24 March 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.5

    Features:
        * The files created by the value.write user function now include a header describing the parameter.
        * The relax internal structural object now supports the merger of molecules.  This can be useful if different domains of one system are in two PDB files or are split in the one file.
        * The structure.delete user function can now be used to delete parts of molecules down to the level of individual atoms.
        * Helix and sheet information from PDB files are now stored in the internal structural object as metadata.  The structure.read_pdb and structure.write_pdb user functions will preserve this information.
        * The numbers output by the value.display and value.write user functions can now be scaled.
        * The model-free auto-analysis now generates field strength dependent Rex files for each field present.


    Changes:
        * Added a comment to the output from value.display and value.write to describe the parameter.  This idea is discussed at http://thread.gmane.org/gmane.science.nmr.relax.user/1428.  The idea is to take the parameter description from the specific analysis API and add it to the top of the file or output.  This is to help understand what the Rex value are.  For example for the Rex parameter the first line would be: "# Parameter description:  Chemical exchange relaxation (sigma_ex = Rex / omega**2)."
        * Created the Structure.test_read_merge system test to test a new concept - merging of structures.  The idea is to add the merge argument to the structure.read_pdb user function to allow two different structures in two PDB files to be merged.  This is useful if structures of individual domains have have been solved separately and are located in two PDB files.  Then with the merge flag, you will not need to use and external program or hand edit PDB files to join them.
        * Added the merge flag to the structure.read_pdb user function.  This currently does nothing.
        * The merge flag for the structure.read_pdb user function is now propagated to the pack_structs() method.  This structure API method calls the ModelList.merge_item() method which is yet to be implemented.
        * The MolList.add_item() structural API method now returns the added molecule container.  This is used by the pack_structs() method to alias the molecule, and will be required when structure merging is implemented.
        * Whitespace fixes - replaced many instances of the tab character '\t' with 4 spaces.
        * Implemented the merging of structural objects.  This allows the merge flag of the structure.read_pdb user function to work.
        * The printouts from the structure.read_pdb user function are now different with the merge flag set.  The text now says that the molecules are being merged rather than added.
        * Sections of molecules can now be deleted using the structure.delete user function.  The atom ID argument has been added and this is now propagated into the internal structural object.  This ID string can be used to delete subsets of the 3D structural data in the relax data store.
        * Created the Structure.test_read_write_pdb_1UBQ system test.  This is for checking the use of the structure.delete user function with the atom ID argument.
        * The Structure.test_read_write_pdb_1UBQ system test now checks for HELIX and SHEET records.  This is not implemented yet, but the idea is that the structure.read_pdb and structure.write_pdb should preserve the helix and sheet information present in the original PDB and that the internal structural object should store this information.
        * Created the internal structural object _pdb_chain_id_to_mol_index() method.  This will be used to convert PDB chain IDs, which are used to indicate different molecules in the PDB, into molecule indices for the internal structural object.
        * HELIX PDB records are now read, stored, and written out by the internal structural object.  This affects the structure.read_pdb and structure.write_pdb user functions.  The helix is stored as a metadata type object - its elements do not correspond to the atoms in the structural object.
        * SHEET PDB records are now read, stored, and written out by the internal structural object.  This affects the structure.read_pdb and structure.write_pdb user functions.  The sheet is stored as a metadata type object - its elements do not correspond to the atoms in the structural object.
        * Created 13 unit tests of the Internal._trim_helix() internal structural object method.
        * Added the index_flag argument to all structural API atom_loop() methods.
        * Implemented the internal structural object _trim_helix() method.  This is used when the structure.delete user function is called to trim and remove the helix metadata.  For this to work, the additional method _residue_data() was written to create a dictionary with residue numbers as keys and the residue names as numbers.  This dictionary is used by _trim_helix() to change the residue names in the helix metadata.
        * Created 13 unit tests of the Internal._trim_sheet() internal structural object method.  These are mirror the 13 unit tests of Internal._trim_helix().
        * Implemented the Internal._trim_sheet() internal structural object method.  This is also now used by the structure.delete user function to remove sheet metadata for residues which no longer exist.
        * Modified the ScientificPython structural object atom_loop() method to match the internal object.  If only one element is returned from the atom_loop(), then this is returned as a single item rather than a tuple of length 1.
        * Lots of fixes for the change to the structural API atom_loop() method.  This method when returning a single item now returns a single item rather than a tuple of length 1.
        * The index_flag argument to the ScientificPython structural object atom_loop() method is now used.
        * Created the Structure.test_metadata_xml system test.  This is used to check that the structural metadata (currently helices and sheets) are stored in the relax XML save files and then can be read back into relax again.
        * The helix and sheet metadata is now stored in and read from relax XML state files.
        * Added the scaling argument to the value.display and value.write user functions.  The idea comes from a suggestion by Angelo Figueiredo <am dott figueiredo att fct dott unl dott pt> and was discussed at http://thread.gmane.org/gmane.science.nmr.relax.user/1428/focus=1430.  This allows the user to scale parameters to any value, for example scaling the Rex value to the field strength dependent value.
        * The model-free auto-analysis (the dauvergne_protocol) now generates field strength dependent Rex files.  The idea comes from a suggestion by Angelo Figueiredo <am dott figueiredo att fct dott unl dott pt> and was discussed at http://thread.gmane.org/gmane.science.nmr.relax.user/1428/focus=1430.  One file per field strength is generated and named 'rex_600' for 600 MHz, for example.  The new scaling argument of the value.write user function is being used to scale the tiny field strength independent value used internally in relax to the Rex value in rad.s^-1 that you would see in an R2 data set.
        * Added the new 'comment' argument to the value.write user function.  This is used to add user comments to the top of the file.
        * The model-free auto-analysis (the dauvergne_protocol module) now adds comments to the Rex files.  This is through the new comment argument of the value.write user function.  These comments explain that the Rex values are scaled to the stated field strength.
        * Modified the Mf.test_dauvergne_protocol system test to check for all the files and directories created.
        * Created the new lib.text.sectioning module for formatting titles, subtitles and other sectioning text.  The two functions title() and subtitle() have been implemented.
        * Created unit tests for the title() and subtitle() functions of the lib.text.sectioning module.
        * Expansion of the lib.text.sectioning module.  The following new functions have been added:  box(), section(), subsection(), subsubsection(),subtitle(), subsubtitle(), underline().
        * Expanded the unit testing of the lib.text.sectioning module to cover all title and section functions.
        * Added prespace and postspace arguments to the *section() and *title() functions of lib.text.sectioning.  Through these arguments, the amount of spacing above and below the section text can be controlled.
        * Split the generic_fns.structure.geometric.create_rotor_pdb() function.  The non-relax specific code has been shifted into the rotor_pdb() function.
        * Initialised the lib.structure package - this is currently empty.
        * Shifted the rotor creation components from generic_fns.structure.geometric to lib.structure.rotor.  The create_rotor_pdb() function remains in place as this is the user function backend which checks for data pipes and updates the status object, but the rotor_pdb() and create_rotor_propellers() functions have been moved into the relax library.  The create_rotor_propellers() function has been renamed to lib.structure.rotor.rotor_propellers().
        * Converted links in all docstrings to use the Epydoc hyperlink notation.  This will allow links to be clickable for the API documentation (http://www.nmr-relax.com/api/).
        * Added Epydoc hyperlink markup for the bug tracker in the system test docstring where missing.  This is for a better API documentation (http://www.nmr-relax.com/api/).
        * The lib.structure.rotor.rotor_pdb() rotor_angle argument should now be in radians.  This does not affect the structure.create_rotor_pdb() user function as the generic_fns.structure.geometric.create_rotor_pdb() function converts the value to radians prior to calling the rotor_pdb() function.
        * The lib.structure.rotor.rotor_pdb() function can now handle structural models.  The model number argument has been added to allow the rotor structure to be added to a single model, or to all models if not supplied.


    Bugfixes:
        * Fix for a copy and paste error in the Structure.test_read_merge system test.
        * Fixes for all the Ap4Aase truncated PDB files.  The atom numbers are now sequential, as defined by the PDB standard.
        * Bug fix for the structural data consistency test in the pack_structs() structural API method.  The index was not correct causing failures in certain rare cases.
        * Python 3 fix for an import into the generic_fns.structure.internal module.
        * Python 3 fixes for the relax version information for code checked out from the relax repository.  The subversion version.revision() and version.url() functions now handle the Python 3 issue of Popen working with byte arrays instead of normal strings.



Version 2.2.4
(17 March 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.4

    Features:
        * Creation of the structure.create_rotor_pdb user function for creating representations of the rotor frame order model.


    Changes:
        * Updated the release checklist document to include the correct instructions for minfx and bmrblib.  These are the packages bundled with relax (http://gna.org/projects/minfx/ and http://gna.org/projects/bmrblib/)
        * Improvements for Python 2 and 3 compatibility.  Much of the Python 2 verses 3 compatibility, as well as different Python 2 version compatibility and different Python 3 version compatibility, code has been shifted into the compat module.  The different parts of relax now import from the compat module for modules/packages with different import semantics for different Python versions.  In addition the different handling of the bz2 and gzip module for reading and writing files has been shifted from 'relax_io' into 'compat'.  
        * Updated the 2to3 checklist document to include multiple threads for faster operation.  
        * Eliminated the os.devnull import flag dep_check.devnull_import.  This is not needed as the compat relax module defines os.devnull for Python <= 2.3.  The devnull module is no longer part of the relax information printout.  
        * Added a more informative error message if the platform module is missing.  This is for Python <= 2.2.  The file from http://hg.python.org/cpython/file/2.3/Lib/platform.py can simply be copied into the lib/pythonX.X/ directory to fix this.  
        * Slight change to the message printed if the platform module is missing.  
        * Modified the script for running the relax test-suite on multiple Python versions.  The pre-2.2 Python versions are now commented out as well as the abortive Python 3.0.  
        * Created the Mf.test_bug_20613_auto_mf_diff_tensor_pdb system test to catch bug #20613.  This was reported by Angelo Miguel Figueiredo <am dott figueiredo att fct dot unl dot pt> at https://gna.org/bugs/?20613.  This test is a direct copy of the Mf.test_bug_20563_missing_ri_error system test.  The only change is that the local tm global model results file (in the local_tm/aic/ directory) has been modified.  This results were read into relax, the file test_suite/shared_data/structures/Ap4Aase_res1-12.pdb loaded into the data pipe, and the results saved again.  This triggers the bug as the problem is the presence of structural data with the local tm global model being selected in the auto-analysis.  
        * Shifted all of the model-free specific analysis class documentation variables to the top.  This is simply for better organisation of the code.  
        * Created the model-free write_doc class variable talking about the field strength independent Rex value.  This has been added to the value.display and value.write user functions to explain that Rex values are very small and that the user needs to scale them up.  
        * Shifted all of the documentation variables to the top of the specific API_base class.  This is for better organisation.  
        * Added the write_doc class variable to the specific analysis API class as a empty string.  This is to fix the unit tests.  
        * Created the front end for the new structure.create_rotor_pdb user function.  This will be used to create a PDB representation of a rotor motional model.  
        * Added file, directory and overwrite force arguments to the structure.create_rotor_pdb user function.  
        * Started to implement the backend of the structure.create_rotor_pdb user function.  
        * The internal structural object MolContainer.add_atom() method now returns the index of the new atom.  
        * Created the internal structural object MolContainer.last_residue() method.  
        * Fully implemented the structure.create_rotor_pdb user function.  For this, the generic_fns.structure.geometric.create_rotor_propellers() function was created.  


    Bugfixes:
        * Fix for the system tests in the Mac OS X application binary.  The Mf.test_bug_20563_missing_ri_error system test fails in the Mac OS X application binary.  The problem is that the py2app extension used to build the Mac application decides that empty directories are not to be included in the app, so naturally the test fails when checking for these.  Now empty results files have been added to these directories to trick py2app to include them.  
        * Fixes for the unit test package __all__ list checking.  Now only *.py files and directories are checked.  In some cases other files could be present in the packages, for example the object files when compiling the C modules.  These would cause the unit tests to fail unnecessarily.  
        * Fixes for the unit test __all__ list checking for the lib package for the Mac OS X application.  For some reason the py2app extension which creates the app merges the Python installation directory Resources/lib/python2.7 and the relax lib package into Resources/lib.  Now 'python2.7' is blacklisted when checking the lib package so that the parasitic Python install location is ignored.  
        * Bug fix for the structure RMSD function for when old numpy versions are present.  Older numpy versions do not have the ddof argument for the std() standard deviation function,therefore relax now catches this, calculates the biased standard deviation formula, and then multiplies the value by a correction factor to obtain the non-biased estimator.  
        * Bug fix for the info relax system information module for when spaces are present in the relax path.  If relax is placed into a directory containing spaces, then the determination of the architecture of the compiled C modules fails. 
        * Python 3 fixes for the model-free analysis specific code.  This was causing errors "AttributeError: 'dict_values' object has no attribute 'sort'".
        * Python 3 updates and fixes using the 2to3 program.
        * Bug fix for the external Scientific Python Geometry package.  This is a strange Python 3 issue only triggered when the epydoc Python package is installed.  
        * Fix for bug #20613 (https://gna.org/bugs/?20613), the failure of the diffusion tensor PDB creation.  This was reported by Angelo Miguel Figueiredo <am dott figueiredo att fct dot unl dot pt>.  The problem was that the diffusion tensor PDB representation structure.create_diff_tensor_pdb user function was being called even when the local tm global model was selected.  This naturally failed as there is no global diffusion tensor.  Now this user function is avoided for the local tm global model.  
        * Fix for the value.write user function for very small parameter values (Rex for example).  This was reported by Martin Ballaschk <ballaschk att fmp-berlin dott de> in the thread http://thread.gmane.org/gmane.science.nmr.relax.user/1397/focus=1402 and by by Angelo Miguel Figueiredo <am dott figueiredo att fct dot unl dot pt> in the unrelated bug report at https://gna.org/bugs/?20613.  The formatting string "20.15f" has been changed to "20.15g" to allow Python to decide if the normal decimal or exponential form of the number should be printed.  
        * Fix for a strange and extremely rare typo bug in the model-free specific analysis code.  This was identified by Manish Chaubey <manish dott chaubey att tuebingen dott mpg dott de> in the message at http://thread.gmane.org/gmane.science.nmr.relax.user/1422.  This only occurs if a relaxation data error of zero is encountered and is a bug in the RelaxError message explaining the problem with the data.  



Version 2.2.3
(11 March 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.3

    Features:
        * Added the mol_name_target argument to the structure.load_spins user function.  This allows spins from different molecules to be placed together in the same molecule container in the relax data store.
        * Addition of two new user functions - structure.add_model and structure.rmsd.
        * Created the structure.web_of_motion user function.  This is used to create a special PDB file which represents the atomic motions between different structural models.  Identical atoms of the selected models are concatenated into one model, within a temporary internal structural object, and linked together using PDB CONECT records.
        * Better PDB support in the internal structural object with:  Improvements and fixes in reading/writing, an update of the format to version 3.30, and faster PDB parsing.
        * Creation of two new modules for better PDB support - generic_fns.structure.pdb_read and generic_fns.structure.pdb_write.
        * Improvements to the structure.find_pivot user function including the addition of the func_tol argument to better control the simplex optimisation and the use of the logarithmic barrier function to prevent the pivot from heading to infinity when the solution is a line.
        * Initialised a new package called 'lib' - this will in the future be an extensive collection of functions, methods, classes, objects, etc. useful for the study of all types of molecular dynamics.
        * Line wrapping has been turned on in the relax controller in the GUI so that all text is visible.


    Changes:
        * The relax intro text now includes the repository URL for checked out code.  This is for preserving better debugging and logging information, so that it is clear where the code comes from.
        * Created the Structure.test_load_spins_mol_cat system test.  This will be used to test a new 'mol_name_target' argument to the structure.load_spins user function.
        * Created the Structure.test_delete_multi_pipe system test.  This is to check that the structure.delete user function is operating on a single data pipe.
        * Updated the Freecode instructions in the release checklist document.
        * Created the simple Structure.test_delete_empty system test.  This is to demonstrate a failure of the structure.delete user function when no structural data is present.
        * Added a printout to structure.delete for when no structures are present.
        * Created the Structure.test_rmsd system test.  This test checks the currently unimplemented structure.add_model and structure.rmsd user functions.
        * The structural API num_molecules() method can now handle no data being present.
        * Implemented the structure.add_model user function.
        * Added some more checks to the Structure.test_rmsd system test.
        * Modified the structure.add_model calls in the Structure.test_rmsd system test to include model nums.
        * Added the 'model_num' argument to the structure.add_model user function.
        * Modified the structure.add_atom user function to allow the position argument to be a rank-2 array.  This allows a different coordinate for each model to be specified.
        * Spun out the atomic_rmsd() and calc_mean_structure() functions into their own module.  They were previously in the generic_fns.structure.superimpose module but are now in the new generic_fns.structure.statistics module.
        * Added checks for the atomic information to the Structure.test_rmsd system test.  This demonstrates a failure of structure.add_atom user function when specifying different positions for the different models.
        * Docstring addition for the generic_fns.structure.statistics.atomic_rmsd() function.
        * Implemented the structure.rmsd user function.
        * Fixes for the Structure.test_rmsd system test - it now passes.
        * Created a new float_object argument type which is used by the 'pos' argument of structure.add_atom.  A new arg_check.float_object() function has been created to handle any float object greater than rank-0.
        * Created the Structure.test_rmsd_ubi system test to better check the structure.rmsd user function.  This uses the truncated ubiquitin ensemble in the test suite shared data directories.  The RMSD matches the VMD 1.9.1 output.
        * Added a new module generic_fns.structure.pdb_write for generating the PDB records.  This decouples the formatting code from the internal structural obect.  The PDB format has been updated to version 3.30.  There is one function for each PDB record, allowing this to be easily extended and kept up to date.
        * Created the generic_fns.structure.pdb_read module.  This replaces the internal structural object _parse_pdb_record() method which was handling both ATOM+HETATM and CONECT records.  It should allow greater flexibility in reading data out of other PDB records in the future.  There is one function per PDB record type in this module.
        * Added the full 1UBQ PDB structure to the relax test-suite shared data directories.  This is a small, very quick to read structure which will be used for validating the reading and writing of different PDB record types.
        * Changes to the internal structural object.  The _parse_models_pdb() method has been renamed to _parse_pdb_coord() and the opening of the PDB file shifted into the base load_pdb() method.  This is in preparation for better parsing of PDB files to match the main sections of the PDB format, see http://www.wwpdb.org/documentation/format33/v3.3.html.
        * Created the Structure.test_read_pdb_1UBQ to check the complete parsing of the complex PDB file.  The test is currently quite basic and needs to check more of the internal structural object.
        * Better checks for the atomic data in the Structure.test_read_pdb_1UBQ system test.
        * Added a series of _parse_pdb_*() methods to the internal structural object.  These correspond to each section of the PDB format version 3.30 http://www.wwpdb.org/documentation/format33/v3.3.html.  The currently loop over the records of their section, returning the remaining PDB records.  The aim is for fast parsing and breaking into sections.
        * Faster PDB parsing by the removal of the use of the re.search() function.  Now line slices are directly compared instead.
        * Added some more unit tests for the generic_fns.structure.pdb_read module.  These tests are not yet complete, as it is unknown what these unimplemented functions will return.
        * Completed the unit test of the generic_fns.structure.pdb_read.helix() function.
        * Implemented the generic_fns.structure.pdb_read.helix() function.
        * Created the Mf.test_bug_20531_molmol_macro_write_relaxfault system test.  This is an attempt at catching bug #20531.  It creates all of the m0-m9 and tm0-tm9 models, sets some parameter values, and then attempts to create all of the Molmol macros, PyMOL macros, Grace plots and parameter text files as present in the auto_analysis.dauvergne_protocol module.
        * The spectrometer frequency is now set in the Mf.test_bug_20531_molmol_macro_write_relaxfault system test.  This is needed for the Rex scaling.
        * The spin name, element and isotope is now set in Mf.test_bug_20531_molmol_macro_write_relaxfault.  This is required in this system test so that the marco creation is not skipped.
        * Added some work-arounds for the model-free specific code for when no relaxation data is present.  This is needed for the Rex scaling, as the ID of the first relaxation data set was being used to select the first frequency.  As caught by the Mf.test_bug_20531_molmol_macro_write_relaxfault system test, this fails if no relaxation data is present.
        * Expanded the unit test of the generic_fns.structure.pdb_read.sheet() function.
        * Implemented the PDB SHEET record parsing function generic_fns.structure.pdb_read.sheet().
        * Extended the PDB ATOM record reading unit test to be of 80 characters in length, as per the PDB definition.
        * Created unit tests for the generic_fns.structure.pdb_write module.  This currently covers the atom(), helix() and sheet() functions (the last 2 are not yet implemented).
        * Implemented the PDB HELIX record writing function generic_fns.structure.pdb_write.helix().
        * Improved PDB writing capabilities.  The functions of the generic_fns.structure.pdb_write module now all use the _handle_none() function to avoid the text "None" from appearing in the PDB file and _record_validate() to be sure the record has not been corrupted with bad input causing it to be either less or greater than 80 characters.
        * The Mf.test_bug_20531_molmol_macro_write_relaxfault system test now catches bug #20531.  This now uses the results file attached to the bug report https://gna.org/bugs/?20531.
        * Implemented the PDB SHEET record writing function generic_fns.structure.pdb_write.sheet().
        * Created a unit test for the generic_fns.structure.pdb_write.het() function.
        * Created the generic_fns.structure.pdb_write._handle_text() function.  This private function is used to convert text into PDB suitable format (uppercase and values of None converted to empty strings).
        * The diffusion tensor PDB files are now conform better to the PDB standard.  The HET records are now correct, only capitalised text is present in the files, and trailing whitespace to character 80 has been added.
        * Epydoc docstring formatting for the generic_fns.structure.pdb_write modules.  These large changes improve the API documentation at http://www.nmr-relax.com/api/.
        * Created a unit test for the generic_fns.structure.pdb_write.model() function.
        * Added a new PDB file with 3 models and a few atoms for testing of the structure.web_of_motion user function.
        * Created the Structure.test_web_of_motion_all system test.  This is to check the new structure.web_of_motion user function.
        * The structure.web_of_motion user function can now handle file objects as well as file names as input.
        * Small fixes for the Structure.test_web_of_motion_all system test.
        * Created the Structure.test_web_of_motion_12 system test to show how model sets are currently ignored.
        * Implemented the models argument for the structure.web_of_motion user function.  This was previously not being used and was caught by the Structure.test_web_of_motion_12 system test.
        * Created the Structure.test_web_of_motion_13 system test.  This was just to be sure that the models argument was correctly handled by the structure.web_of_motion user function.
        * The structure.find_pivot user function now accepts the func_tol argument.  This is used to terminate the simplex optimisation when this function tolerance value is reached.
        * Shifted the ensemble pivot finding target function into the maths_fns package.
        * Added a sentence to the README file about the sample_scripts directory.
        * Added a document detailing the possible future layout of relax's packages.
        * The structure.find_pivot user function now uses the logarithmic barrier function.  This is for constrained optimisation and requires the newest minfx code.  The pivot position is constrained within a box of +/- 1000 Angstroms from zero.  This is needed for when the solution is an infinite line - i.e. a rotation axis and not a pivot point.  Previously the simplex optimisation would head toward + or - infinity.  But now with a logarithmic barrier, the simplex algorithm can stabilise and find a point on the axis very quickly, long before reaching the edges of the box.
        * The structure.find_pivot user function now accepts the func_tol and box_limit arguments.  This allows the function tolerance for the simplex optimisation to be specified, as well as the size of the box to constrain the pivot to be within.
        * Initialised the lib.geometry package.  This will be a library of all mathematics functions relating to geometry.
        * Added empty packages to the unit tests for the lib and lib.geometry packages.
        * Updated the maths_fns package __all__ list.
        * Updated the test_suite.unit_tests package __all__ list to be more modern.
        * The n_state_model.number_of_states user function no longer requires the N-state model to be defined.  This was only needed to update the model information, and is skipped if not set.
        * The generic_fns.structure.superimpose.find_centroid() function now prints out Euler angles as well.
        * Large improvements to the checking for all the rdc and pcs user functions.  The new methods check_pipe_setup() have been added to replace all other checking.  This standardises all error checking and provides much better coverage.  The results is that you will be much less likely to encounter a Python traceback when something is forgotten, and will be told via a RelaxError what is missing.
        * The rdc.back_calc and pcs.back_calc user functions now warn if no data was calculated.  This is to inform the user about problems at the place that they occur instead of later on with, for example, the creation of empty data files.
        * Updated the float module to handle numpy floats.  This makes the floatToBinaryString() function compatible with the numpy.float16 type.
        * Removed the prune parameter from the backend of the monte_carlo.error_analysis user function.  This was a dangerous parameter used to mimic the 'Trim' parameter from the Modelfree4 program.  The result is bad statistics.  The probable reason for the 'Trim' parameter was the failure of model-free models in the simulations, but this issue was solved using model elimination (see http://www.nmr-relax.com/refs.html#dAuvergneGooley06).
        * Created the Structure.test_read_xyz_strychnine system test to demonstrate a bug in the XYZ parser.  This is for the reading of XYZ structure files.
        * Created the lib.text package for text manipulation.  The first module will be the text formatting of tables.
        * Created the lib.geometry.lines module for performing geometric operations with lines.  This has one stub of a function lib.geometry.lines.closest_point() which will be used to find the closest point on a line to a given point.
        * Added the package checking unit tests for the lib package.
        * Improved the base class unit test for the package __all__ list.  Subpackages are now also checked.
        * Blacklisted a number of files in the maths_fns package for the package __all__ list unit test.
        * Added a unit test for the lib.geometry package __all__ list.
        * Created a unit test for the lib.geometry.lines.closest_point() function.
        * Created the lib.text.table module.  This originates from the prompt.uf_docstring module as most of that module is functions for creating formatted text tables.
        * Updated the lib package __all__ list for the lib.text package.
        * Implemented the closest_point() and closest_point_ax() functions of lib.geometry.lines.  These two functions do the same thing - find the closest point on a line to any given point - but take different arguments to define the line.
        * Improved the package __all__ list base unit test by skipping all hidden files and directories.
        * Refactored the lib.text.table module.  The create_table() function is now called format_table() and the table_line() function has been made private.  All references to the user function tables and the relax status object have been removed and replaced by arguments to format_table().
        * The prompt.uf_docstring module now uses lib.text.table.format_table().  This significantly simplifies the module.
        * Removed a number of unused imports in prompt.uf_docstring.
        * Deleted prompt.uf_docstring.table_line() as this is now a private function of lib.text.table.
        * Fix for lib.text.table.format_table() as table_line() is now private.
        * Added the spacing argument to lib.text.table.format_table().  This removes the reference to the user function table spacing variable from this function and shifts it to the prompt.uf_docstring.create_table() function.
        * Created the framework for the unit tests of the lib.text package.
        * Created two unit tests for the lib.text.table.format_table() function.
        * Updates to the unit tests of the lib.text.table.format_table() function.
        * Many improvements to the lib.text.table module.  The format_table() function now accepts arguments for text to prefix and postfix to each line,the text padding to the left and right inside the table, and the text used to separate the columns.  The _blank() and _rule() private functions have been added to create distinct table elements.
        * Created the lib.text.table.MULTI_COL constant for defining cells spanning multiple columns.  This is not used yet.
        * Modified the Mf.test_mf_auto_analysis GUI test to catch bug #20603 (https://gna.org/bugs/?20603).
        * Created a unit test for the lib.text.table.format_table() function to test multiple column support.  Support for content spanning multiple cells is yet to be implemented.
        * Implemented multi-column support in lib.text.table.format_table().
        * Spacing between heading rows is now functional in lib.text.table.format_table().
        * Created a new unit test of lib.text.table.format_table() to check for non-string type data.
        * The table contents are now all converted to strings in lib.text.table.format_table().  This uses the _convert_to_string() private function.
        * Converted the test_format_table4() unit test of lib.text.table.format_table() to check justification.  The right justification of cells with numbers will be implemented to match these changes.
        * Numbers are now right justified in cells in the lib.text.table.format_table() function.
        * Modified the test_format_table4() unit test of lib.text.table.format_table().  This change is to test the currently unimplemented custom_format argument.  This will be used to allow special formatting in the table.  For example using '%.3f' for a float.
        * Implemented the custom_format argument for lib.text.table.format_table().  This allows cell contents to be formatted as the user asks.  It defaults to standard string conversion is the custom conversion fails.
        * Rounding error fix for the test_format_table4() unit test of lib.text.table.format_table().
        * Python 3 fix for the test_format_table4() unit test of lib.text.table.format_table().  The string representation of the builtin list object is different in Python 2 vs. 3.
        * Created the test_format_table5() unit test for lib.text.table.format_table().  This test checks what happens if no header is given to format_table().  This currently fails.
        * The lib.text.table.format_table() function can now create a table without headers.
        * Added column number checks for the data input into lib.text.table.format_table().
        * Created the test_format_table6() unit test for lib.text.table.format_table().  This test shows a problem with more than one multi-column cells defined, as well as problems when a multi-column cell is wider than the sum of the widths of the columns it spans.
        * Fix for lib.text.table.format_table() when more than one multi-column cell per row is encountered.  The algorithm for determining the total width of the multi-column cell in _table_line() was not checking if the end of the span was being reached.
        * The lib.text.table.format_table() function now handles overfull multi-column cells.  The _determine_widths() private function has been created to better handle the determination of the table column widths.  It will now extend the width of the last column to allow overfull multi-column cells to fit.
        * Modified the test_format_table5() unit test of lib.text.table.format_table() to check bool types.
        * The lib.text.table.format_table() function now handles boolean types.
        * Booleans are not numbers, so do not right justify them in lib.text.table.format_table().
        * The minfx.__version__ value is now read for the version in the relax information printout.
        * The bmrblib.__version__ value is now read for the version in the relax information printout.
        * All of the specific API data and error returning common methods can now handle missing data/errors.  This affects the _return_data_relax_data() and _return_value_general() methods.
        * Updated the release checklist to include information about updating the FSF directory.
        * Modified the release checklist document to use the stable release tags of minfx and bmrblib.  This is instead of the code in trunk which may not always be in a stable state.
        * Redesign of the generic_fns.mol_res_spin.generate_spin_id() function.  The function now tries to generate a unique ID based on the spin information in the specified data pipe.  This is to attempt to fix a bug uncovered by the Structure.test_read_xyz_internal2 system test.  Defaulting in all cases to the spin name rather than spin number will often fail for a small organic molecule, as the name in XYZ files is the atomic symbol and hence will almost never be unique.
        * Created the generic_fns.mol_res_spin.return_molecule_by_name() function.  This will be used in the future as it is much faster than generic_fns.mol_res_spin.return_molecule()if the molecule name is already known.
        * Missing import affecting the generic_fns.interatomic.create_interatom() function.
        * Reverted the last revision (r18737) as it was not correct and RelaxErrors should be used instead.  The command used was:svn merge -r18737:18736 .
        * Fix for the generic_fns.interatomic.create_interatom() function.  RelaxNoSpinWarning has been replaced with RelaxNoSpinError.
        * Fixes for the metadata update of the residue and spin name and number counts.
        * Created the generic_fns.mol_res_spin.generate_spin_id_unique() function.  This will return a truly unique spin ID string based on the current molecule, residue, and spin data structure.
        * The spin_loop() function now uses generate_spin_id_unique() when the return_id flag is set.  This ensures that the caller received a unique spin ID which can be used to retrieve the corresponding spin container.
        * Improved the generic_fns.mol_res_spin.generate_spin_id_unique() function.  This can now work with molecule, residue, and spin names and numbers alternatively to the containers supplied as arguments.  For this to work, the return_molecule_by_name() function has been improved and the functions return_residue_by_info() and return_spin_by_info() have been added.
        * The pcs.read user function backend now uses generic_fns.mol_res_spin.generate_spin_id_unique().  This allows the matching spin container to always be returned for storing the data.
        * Large speed ups of the Bmrb system tests by the deletion of most of the residues.  On one system, this cuts the time for all 3 Bmrb tests from 70 to ~12 seconds.
        * Added the profile flag keyword argument to the relax startup script for Unix-like systems.  This is to simplify the switching on of profiling.
        * Large cleanup and bugfixes for the molecule, residue, and spin data structure metadata maintenance.  The bugs fixed are important for non-protein molecules.  For example is the spin name is not unique per residue, or per molecule if no residues are defined, many parts of relax would fail.  All of the metadata_*() and spin_id_variants*() functions have been redesigned.  It was also identified that metadata_prune() was being used by different parts of relax for two different purposes - the removal or pruning of metadata prior to the deletion of a data structure and the clean up of no longer valid metadata.  These two goals conflicted resulting in unpredictable behaviour.  Therefore the new metadata_cleanup() and spin_id_variants_cleanup() functions have been created and the two behaviours separated.
        * Fix for the bmrb.read user function for the recent molecule, residue and spin metadata improvements.  The generic_fns.bmrb.generate_sequence() function now calls generic_fns.mol_res_spin.metadata_clean()to be sure that the metadata is correct.  The problem is the structure of the BMRB file with no spin information in the entity record, hence the residues are created first and the spins much later in generate_sequence().
        * Removed unused imports in the generic_fns.rdc module.
        * The generic_fns.mol_res_spin.generate_spin_id_unique() function now handles missing spin containers.  Previously if this function was used to generate a spin ID string of a spin not in the data store,it would fail.  Now it generates an ID by defaulting to generate_spin_id().
        * Converted many calls to generic_fns.mol_res_spin.generate_spin_id() to generate_spin_id_unique().  This will allow many future bugs to be avoided, as the spin ID string is most often used to retrieve spin containers.  By using the generate_spin_id_unique() function, the returning of spin containers will always be correct.
        * Created the Mf.test_bug_20563_missing_ri_error system test to catch bug #20563.  The bug report is at https://gna.org/bugs/?20563.  The data added to the test suite is a highly truncated data set of a analysis completed using the data attached to the bug report.
        * Modified the dauvergne_protocol model-free auto-analysis to aid in debugging.  The write_results_dir argument has been added to allow the test suite to read from one directory in test suite shared data directories and redirect output to a temporary directory.
        * The files from the Mf.test_bug_20563_missing_ri_error system test are now placed in a temporary directory.  This is essential for the test suite to prevent files from going everywhere.
        * The frq.seq user function units argument is no longer read-only.  This is needed for some of the GUI tests in the frame_order_testing branch.


    Bugfixes:
        * Fixes for the structure.delete user function.  This can now handle no data being present, the spin and interatomic data containers are now have their structural data properly deleted, and printouts have been added so the user knows what has happened.
        * Bug fix for the arg_check.is_float_matrix() function for when the dimensions are not given.
        * Fix for the structure.add_atom user function for the internal structural object.  The atomic positions for each model are now correctly set.
        * Formatting fixes for the generic_fns.structure.pdb_write module.
        * Fix for the classic_style() method of the model-free specific Macro class.  This was identified by the new Mf.test_bug_20531_molmol_macro_write_relaxfault system test, but would probably never be encountered by relax users.  It is not related to the bug this test is trying to catch.  The problem is if spins have model-free parameters set up but there is no model-free model initialised - then the Molmol and PyMOL macro creation would fail.
        * Fix for bug #20531 (https://gna.org/bugs/?20531).  This is the bug of the RelaxFault during the final stages of the auto_analysis.dauvergne_protocol model-free analysis when the Molmol and PyMOL macros are being created.  The problem was caused by model m9 (just the Rex parameter) when trying to determine what the order parameter for fast (< 200ps) motions is.  The code was assuming that the model-free model would always contain an order parameter.
        * Fix for the generic_fns.structure.pdb_write.het() function - the record now has trailing whitespace.  The PDB records require trailing whitespace to the 80th character position.
        * Fixes for many of the generic_fns.structure.pdb_write functions.  The PDB records are now all filled with whitespace up to the 80th character.
        * Fix for the creation of HET PDB records in the internal structural object.  The residue name and chain ID were mixed up.
        * Fix for the generic_fns.structure.pdb_write.ter() function.  Whitespace to character 80 is now being added to the TER PDB records.
        * Fix for the creation of the FORMUL PDB records by the internal structural object.  The component number is now set to the index of the hetrogen plus one.  This number should have been a sequential number starting at 1 and is not related to the residue number in any way.
        * Fix for the generic_fns.structure.pdb_write.model() function.  The correct amount of whitespace is now added to the end of the record.
        * Fix for the internal PDB reading - the MASTER record was being marked as a molecule.  Now this record is checked for and the molecule loop terminated.
        * Bug fix for the XYZ 3D structure file reader.  The atom name is now correctly set up for each atom in the file.  The element type setting has also been simplified.
        * Fix for bug 20603 (https://gna.org/bugs/?20603), the relaxation data right click menu failure.  The problem was that there was that the last menu item specified had no contents.  This item has been removed.
        * Fix for bug #20563 (https://gna.org/bugs/?20563), the end failure of the model-free auto-analysis.  This was reported by Stanislava Panova (https://gna.org/users/stacy).  The problem was related to the Monte Carlo simulations.  The generic_fns.monte_carlo.create_data() function is now asking for the errors associated with a certain data point, even if that data point does not exist.  The solution was to check if the relaxation data ID string is present in spin.ri_data_err before accessing the key-value pair (in the specific API _return_error_relax_data() common method).
        * Bug fix for the maintenance of the spin ID lookup table metadata.  This is important for small molecules.  Non-unique IDs were being placed into the lookup table,resulting in incorrect spin containers being sometimes used.  Now the molecule container has the _res_name_count and _res_num_count metadata and the residue container the _spin_name_count and _spin_num_count structures.  These are updated via metadata_update() and are used by the spin_id_variants() function to create a list of purely unique spin IDs.
        * The spin_id argument to the residue.delete user function is no longer read-only.  This allows spin ranges or other complicated IDs to be specified.  This is needed for the Bmrb GUI tests to pass.
        * Fix for the package __all__ list checking unit tests - *.pyc files are now skipped.
        * Fix for one of the RelaxError messages from the SpinList.add_item() method.



Version 2.2.2
(12 February 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.2

    Features:
        * Improvements to the relax API documentation (http://www.nmr-relax.com/api/).


    Changes:
        * Updated the release checklist to include the devel_scripts/log_converter.py script usage.
        * Modified the relax manual subtitle as this is no longer only for relaxation analysis.
        * Docstring fix for the maths_fns.vectors.random_unit_vector() function (this is for the API documentation at http://www.nmr-relax.com/api/).
        * Epydoc docstring fix for the dfunc_standard() N-state model target function (this is for the API documentation at http://www.nmr-relax.com/api/).
        * Epydoc docstring fixes for the diffusion tensor objects of the relax data store.
        * Added and edited a number of module docstrings.
        * Module and package docstrings additions/improvements for the SCons scripts.
        * Lots of module and package docstring updates for the analysis specific code.
        * Module docstring additions and improvements for the relax data store modules.
        * Addition of the generic_fns package docstring.
        * Added a module docstring for the main relax module.
        * Created the State.test_bug_20480 system test to catch bug #20480, the failure to load a saved relax model-free state in the GUI (https://gna.org/bugs/?20480).  This bug was reported by Stanislava Panova (https://gna.org/users/stacy).
        * Created the Mf.test_bug_20479_gui_final_pipe GUI test to catch bug #20479, the model-free analysis failure in the GUI after setting the protocol mode to local tm. (https://gna.org/bugs/?20479).  This bug was reported by Stanislava Panova (https://gna.org/users/stacy).
        * Added a printout to the GUI test case base check_exceptions() method to explain what is happening.
        * Large expansion of the Mf.test_bug_20479_gui_final_pipe GUI test.  Instead of loading the bug #20480 state file, now the entire GUI analysis starting from scratch and using the relaxation data files is performed remotely by the test.  This is necessary because the result of the bug is present in the state file.
        * Added spherical diffusion to the optimisation in the Mf.test_bug_20479_gui_final_pipe GUI test.
        * Added a global model print out to the Mf.test_bug_20479_gui_final_pipe GUI test.  This is to help identify where failures occur.
        * Proper handling of the dipole interaction wizard in the Mf.test_bug_20479_gui_final_pipe GUI test.  This was causing the subsequent GUI tests to fail as the observer objects from the wizard were not all being unregistered.
        * Added skips for some GUI tests when wxPython version '2.9.4.1 gtk2 (classic)' is used.  There are a number of bugs in this version which cannot be worked around in certain GUI tests, so they must be skipped.
        * More wxPython version '2.9.4.1 gtk2 (classic)' bug avoidances in the GUI tests.  Now the auto-analyses do not check the gauges in the relax controller at the end of the auto NOE, Rx, and model-free analyses, as reading gauge values is faulty in this version.  The Rx test is no longer skipped for this wxPython version.
        * Improved the printout from the align_tensor.matrix_angles user function.  The relax_io.write_data() function is being used and the tensors are now identified by name rather than index.
        * Improved the printouts from the align_tensor.svd user function.
        * The relax program introduction now includes the revision number for subversion checked out copied.  This allows for better identification of the code base being used.
        * Fixes for the Pcs.test_structural_noise system test.  As this is based on random functions, sometimes, though rarely, the test fails.  Now the simulation accuracy has been increased and the tests are less rigorous.
        * Spacing fixes as identified by the Python 2to3 conversion program.


    Bugfixes:
        * Epydoc documentation fix - a circular import in the GUI code paths has been broken.  This affects the API documentation at http://www.nmr-relax.com/api/.
        * Fix for the failed loading of states in the GUI.  This problem was caught by the State.test_bug_20480 GUI test.  If the loading of a state file fails,sometimes the relax data store can contain partial information from that file.  Now if the loading fails in the GUI, relax is reset.
        * Fix for bug #20480, the failure to load a saved relax model-free state in the GUI (https://gna.org/bugs/?20480).  This was reported by Stanislava Panova (https://gna.org/users/stacy).  The problem was that the state file was saved after a RelaxError occurred during the model-free analysis.  The GUI data store information states that the active data pipe is called 'final'.  But an error occurred prior to the 'final' data pipe being created.  The fix was to allow the state to be loaded even if the GUI data store information has been corrupted.
        * Fix for bug #20479 - the failure of non-fully automated model-free analyses in the GUI.  This bug was reported by Stanislava Panova (https://gna.org/users/stacy) at https://gna.org/bugs/?20479.  The problem is GUI specific and was when running each diffusion model one after the other.  The GUI was setting the base data pipe to the 'final' data pipe, which is a clear error.
        * Fix for bug #20481 (https://gna.org/bugs/?20481).  This is the bug where the dauvergne_protocol model-free auto-analysis expects the prolate and oblate spheroids and ellipsoid to be optimised.  It was caught by the Mf.test_bug_20479_gui_final_pipe GUI test.
        * Bug fix for the diffusion tensor PDB creation in the dauvergne_protocol model-free auto-analysis.  The call to the structure.create_diff_tensor_pdb user function now only occurs if structural data is present.



Version 2.2.1
(01 February 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.1

    Features:
        N/A


    Changes:
        * Replaced a reference to freshmeat with Freecode in the Release checklist document.  Freshmeat no longer exists and is now called Freecode (http://freecode.com/projects/nmr-relax).
        * Created the Mf.test_bug_20464_missing_ri_data system test to catch bug #20464.  The data comes from the bug report submitted by Stanislava Panova (stpanova att gmail dot com) at https://gna.org/bugs/?20464.
        * Created the Structure.test_bug_sr_2998_broken_conect_records system test.  This is to catch the bug reported as service request #2998 (https://gna.org/support/?2998) and is for corrupted PDB files with broken CONECT records.
        * Created the Structure.test_bug_20469_scientific_parser_xray_records system test.  This is to catch bug #20469 (https://gna.org/bugs/?20469).
        * Created the Structure.test_bug_20470_alternate_location_indicator system test to catch bug #20470.  This report is at https://gna.org/bugs/?20470.
        * Created the Structure.test_alt_loc_missing system test.  This is to test that the internal relax PDB reader raises an error when a PDB file is encountered with alternate location indicators but the alt_loc argument has not been specified.
        * Created the Bmrb.test_bug_20471_structure_present to catch bug #20471 (https://gna.org/bugs/?20471).
        * Modified the bmrb.read documentation to make it clearer that the data pipe must be empty.


    Bugfixes:
        * Python 3 fix for a print statement in the metal_pos_opt.py N-state model system test script.
        * Python 3 fix for the part of ScientificPython distributed with relax (for the PDB parser).
        * Python 3 import fixes for the GUI.
        * Python 3 fixes for the list sort() method - this has been replaced by the builtin sorted() function.
        * Fix for bug #20464 (https://gna.org/bugs/?20464) - the model-free analysis failure with missing relaxation data.  The problem was the previously missing data had a value of None whereas now the dictionary element can be missing.  Checks have been added to make sure the spin specific relaxation data structures have the key corresponding to the data.
        * Fix for the N_state_model.test_monte_carlo_sims system test.  On certain systems, the chi2 check is too stringent.
        * Fix for the bug reported as the support request #2998 (https://gna.org/support/?2998).  CONECT records pointing to non-existent atoms can now be handled.
        * Fix for bug #20469 (https://gna.org/bugs/?20469).  This is the Failure in reading X-ray PDB files using the ScientificPython parser.  The ScientificPython Geometry.Transformation module is now distributed with relax.  Some linear algebra imports in the Geometry.TensorModule in newly used code paths have been fixed as well.
        * Fix for bug #20470 (https://gna.org/bugs/?20470).  The structure.read_pdb user function now accepts the alt_loc argument for specifying the alternate location indicator to read.  This is used by the internal PDB reader.  The bug was caught by the Structure.test_bug_20470_alternate_location_indicator system test.
        * Fix for bug #20471 (https://gna.org/bugs/?20471) - the is_empty() AttributeError when reading BMRB files.  The problem was that the data pipe is_empty() method was not handling structural data correctly.  The is_empty() method now belongs to the MolContainer objects rather than cdp.structure, and the object cdp.structure is not always present.



Version 2.2.0
(27 January 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/2.2.0

    Features:
        * Implementation of the rdc.copy and pcs.copy user functions.
        * Improved printouts from the model_selection, pipe.display, rdc.read user functions.
        * Implemented the interatomic.copy and interatomic.create user functions
        * Added the 'units' argument to the frq.set user function to allow values other than Hz to be input.
        * Added the 'empty' flag to the sequence.copy user function to allow all the spin contents to be copied.
        * Implemented the pcs.structural_noise user function.  This is used to determine the PCS error due to structural noise via simulation, and adds the error via variance addition to the experimental PCS error.
        * The N-state model grid search optimises each tensor separately when only tensors are optimised.  This massively collapses the grid search size from inc**(5*N) to N*inc**5, where inc are the number of increments per dimension and N is the number of alignments, making a grid search possible.
        * Implemented the rdc.set_errors and pcs.set_errors user functions.
        * Added Monte Carlo simulation support for the paramagnetic centre for PCSs in the N-state model.
        * The paramagnetic centre position for the PCS can now be optimised using algorithms other than simplex, such as BFGS, as the gradients of the PCS equations have been implemented.  This allows for huge speedups as the simplex optimiser is not suited to such a problem.
        * The probabilities and paramagnetic position can now be simultaneously optimised in the N-state model.  Such a combination would have previously failed to unpack the parameters correctly.
        * Constraints are now allowed for the paramagnetic position optimisation in the N-state model.  This is because the gradients are implemented and functional.


    Changes:
        * The relax HTML user manual footer has been modified to remove the name of the person who compiled it.  This is for http://www.nmr-relax.com/manual/index.html, and now contains links for relax (http://www.nmr-relax.com), the manual (http://www.nmr-relax.com/manual) and the PDF version of the manual (http://download.gna.org/relax/manual/relax.pdf).
        * Small syntax fix in the release checklist document.
        * Added the MARC archive links to the development chapter of the relax user manual.  These links are:  http://marc.info/?l=relax-announce&r=1&w=2, http://marc.info/?l=relax-users&r=1&w=2, http://marc.info/?l=relax-devel&r=1&w=2, and http://marc.info/?l=relax-commits&r=1&w=2.
        * The model-free overfit deselection algorithm now fails with a RelaxError when no spins are selected.  This is to avoid situations such as bug #20277 (https://gna.org/bugs/?20277).
        * The pipe.display user function now uses relax_io.write_data() for better output formatting.
        * Created the N_state_model.test_data_copying system test for the rdc.copy and pcs.copy user functions.  These user functions do not exist yet, but this test will be used to implement them.
        * Reactivated the rdc.copy and pcs.copy user function front-ends.  The backends are missing, so relax is currently broken.
        * Created the RelaxNoAlignError error class for use by rdc.copy and pcs.copy.
        * Created the RelaxAlignError error class for use by the rdc.copy and pcs.copy user functions.
        * Implemented the rdc.copy and pcs.copy user function backends.  This code is copied from the relax_data.copy user function and has been tailored to the different data types.
        * Modified the RDC and PCS data copying system test script to check overwriting.  The rdc.copy and pcs.copy user function should support the overwriting of existent values.
        * The rdc.copy and pcs.copy user functions now support overwriting pre-existing data.
        * Removed some debugging printouts.
        * The N_state_model.test_data_copying system test now checks the spin RDC and PCS data.
        * The model_selection user function is now using relax_io.write_data() for its printouts.  This allows for clean formatting when data pipes have long names.
        * The rdc.write and pcs.write user functions now skip deselected spins.
        * The axis for PDB geometric cone can now be turned off in the create_cone_pdb() function.  The axis_flag keyword argument is now accepted and if False will cause the axis to be excluded.  This is useful for the frame order cones for example as its own {x,y,z}-axis system is created.
        * Many docstring fixes for the functions of the generic_fns.structure.geometric module.
        * Created the N_state_model.test_absolute_rdc_menthol system test to demonstrate a pseudo-atom failure.  This is a test of the long range, absolute RDCs for menthol.
        * Added a check for the second Q factor in the N_state_model.test_absolute_rdc_menthol system test.
        * Modified the N_state_model.test_populations system test to catch bug #20335.  This simply adds calls to the rdc.delete and pcs.delete user functions, and then reloads the RDC and PCS data.
        * Modified the temperature user function - the value can be set twice if it is the same value.
        * Modified the frq.set user function - the value can be set twice if it is the same value.
        * The rdc.back_calc user function now handles absolute RDCs.
        * Created the Align_tensor.test_copy system test to catch bug #20338 (https://gna.org/bugs/?20338).
        * The spin.create_pseudo user function 'members' argument is no longer read only in the GUI.  This allows the user to type in shorter spin IDs rather than selecting them from the list.
        * Shifted and renamed the arg_check.check_float() function to check_types.is_float().
        * The relax_io.write_spin_data() function now formats floating point numbers better.  This affects the printouts of many data loading user functions.
        * Better printouts from the rdc.read user function - the numbers are now formatted.
        * Created the interatomic.copy and interatomic.create user functions.  This is simply new front ends for the user for the functions of generic_fns.interatomic.
        * The generic_fns.interatomic.copy() function now accepts spin IDs as arguments to partially copy the data.
        * Expanded the RelaxNoSpinError class to accept the data pipe name for the error printout.
        * Created the Interatomic.test_copy system test to check the interatomic.copy user function.
        * Expanded the Interatomic.test_copy system test to check interatomic.copy without spin IDs.
        * Added a test for the presence of target sequence data in generic_fns.interatomic.copy().
        * Spun out code from generic_fns.pipes.create() into the new check_type() function.  This code will be reused in a new pipe user function.
        * Created the Pipes.test_change_type system test to check the non-existent pipe.change_type user function.
        * Implemented the pipe.change_type user function front and back ends.
        * Created the Align_tensor.test_fix() system test to check the operation of align_tensor.fix.
        * Created some synthetic paramagnetically aligned RDC and PCS data to the test suite.  This will be used in later system tests.
        * Fixes for the PCS values of the paramagnetic alignment test suite data.  The data generation script output and results file have been added to the repository as well.
        * Created the N_state_model.test_paramag_align_fit system test to check the paramagnetic data.  This test check the alignment tensor optimisation of the RDC and PCS data in test_suite/shared_data/align_data/paramagnetic/, loading both alignment data sets but only optimising one tensor.
        * The RelaxErrors when calling user functions in the prompt/script interface are now more informative.  The user function is now stated.  This is to better help the user work out where the problem is.
        * Created the Rdc.test_rdc_copy system test to demonstrate the failure of the rdc.copy user function.
        * Created the Pcs.test_pcs_load and Pcs.test_pcs_copy system tests to check some of the PCS user functions.  The Pcs system test class is new, and these tests check untested areas of relax.
        * Created RelaxInteratomInconsistentError for when the data is inconsistent between two data pipes.
        * Created the generic_fns.interatomic.consistent_interatomic_data() function for checking data consistency.
        * The rdc.copy user function now uses the new consistent_interatomic_data() function prior to copying.  To copy the RDC data, the interatomic data containers must be identical between the two data pipes.
        * Fix for the N_state_model.test_data_copying system test.  The interatomic data is now copied prior to copying the RDC data.
        * Created 4 unit tests to demonstrate the failure of the selection object with spin IDs.
        * The molecule, residue and spin selection object now works with spin IDs.
        * Docstring consistency editing for all parts of the generic_fns.mol_res_spin module.
        * Created the Selection system test class.  This currently has the test Selection.test_deselect_all for checking the deselect.all user function.  The number of tests will be expanded in the future to cover interatomic data containers and the operation of all the select and deselect user functions.
        * Shifted the boolean selection operations of the generic_fns.selection module into two new functions.  These are the boolean_select() and boolean_deselect() functions.  The change removes much duplicated code which could be a source of bugs in the future.
        * The frq.set user function now warns if the frequency is lower than 100 MHz or higher than 2 GHz.
        * Updated the diffusion tensor minimisation sample script as the code is very old and useless.
        * Created the State.test_align_tensor_with_mc_sims system test to catch bug #20414.  The report is at http://gna.org/bugs/?20414.
        * Modified the align_tensor_mc.bz2 save file to catch a strange and rare bug.  This is caught by the State.test_align_tensor_with_mc_sims system test.
        * Spun out the maths_fns.rotation_matrix.random_rot_axis() function into its own module.  The function is now called maths_fns.vectors.random_unit_vector().
        * Added a second data pipe with data to the 'align_tensor_mc.bz2' saved state to catch a bug.  This bug was recently introduced.
        * Added checks for the RDC data in the State.test_align_tensor_with_mc_sims system test.  This is to be sure that the data is properly converted from the old design.
        * Added the 'empty' flag to the sequence.copy user function to allow all the spin contents to be copied.  The user function was only copying the basic empty molecule, residue and spin containers, in contrast to the interatomic.copy user function which copies all of the container contents as well.  This new flag is for backwards compatibility - it allows old scripts to operate as before while enabling the new functionality.
        * Removed the check for the 3D structural data in the paramag.centre user function.  This check is not needed.
        * Created the Pcs.test_structural_noise system test for the new pcs.structural_noise user function.
        * Created the N_state_model.test_mc_sim_failure system test to demonstrate a bug in the N-state model.  This appears to be a problem with Monte Carlo simulations when data is missing.
        * Modified the N_state_model.test_mc_sim_failure system test to include missing PCS data.  This is to catch another bug.
        * Modified the missing data system test script to include Monte Carlo simulations.  This is to cover untested code paths.
        * Added calls to rdc.set_errors and pcs.set_errors in the missing data N-state model system test script.  These user functions currently do not exist, but are needed as the data files contain no errors.
        * Modified all generic_fns.mol_res_spin.get_*() functions to handle no data pipes being present.  These functions were previously raising RelaxErrors as no pipes were present.  They now return empty lists instead.  This allows many of the GUI user functions to open in the GUI when no data is present, allowing better debugging and less confusion for the user.
        * The Pipes.test_change_type system test is skipped if the required scipy module is not installed.
        * Python 3 fix for the new pcs.structural_noise user function.  There was a string/unicode problem in the Grace plot creation code.
        * Created the Pcs.test_load_multi_col_data system test to demonstrate a failure of PCS data loading.  This is a problem when 15N data is in one column and 1H data is in another, and the spin_id argument is used to specify which is which.
        * Added some printouts to the Pcs.test_load_multi_col_data system test.
        * Created the Pcs.test_grace_plot system test to check the pcs.corr_plot user function.
        * Created the Pcs.test_load_multi_col_data2 system test to catch a bug with the molecule name.  This is the same as the Pcs.test_load_multi_col_data system test but the spins have the molecule name set.
        * Created the Mol_res_spin.test_prune_metadata system test to catch a bug in the spin ID lookup table.  Spin IDs appear not to be correctly removed from the lookup table.
        * Added some more checks to the Mol_res_spin.test_prune_metadata system test to demonstrate more bugs.
        * Activated the Monte Carlo simulations in the metal_pos_opt.py system test script.  This is to test the combination of Monte Carlo simulations and paramagnetic centre position optimisation.
        * Added Monte Carlo simulations to the N_state_model.test_paramag_centre_fit system test.  This is to better test the code paths.
        * Modified the N_state_model.test_mc_sim_failure to demonstrate a failure in paramagnetic centre code.  The failure is for the combination of paramagnetic centre optimisation and Monte Carlo simulations.
        * Modified the paramag.centre user function printouts for the 'fix' flag.
        * The alignment tensor objects in the relax data store now support sequential Monte Carlo analyses.  The AlignTensorData.set_sim_num() method was preventing a second Monte Carlo error analysis from being performed by throwing a RelaxError.  The check for previous simulations has been killed.
        * Added checks to the N-state model for the paramagnetic centre optimisation.  Only simplex optimisation without constraints is allowed for the paramagnetic centre position as the PCS gradients and Hessians are not yet implemented for the coordinate parameters.
        * Improved the RDC and PCS Q factor calculation warnings to be more informative.  These warnings sometimes appear at the end of the N-state model optimisation, but it is not clear where they come from.
        * Clean up of some of the logic in N-state model analysis specific code.  The following methods have been added: _opt_tensor(), _opt_uses_align_data(), _opt_uses_pcs(), and _opt_uses_rdc().  These are used through the class to determine what is needed for or used during optimisation,making a lot of checking code more consistent (hence removing latent bugs).
        * Added some more checks to the metal_pos_opt.py N-state model system test script.
        * First attempt at implementing the paramagnetic centre position gradient in the N-state model.  This will be used for faster optimisation of the lanthanide position.  Two new functions have been added:  maths_fns.pcs.ave_pcs_tensor_ddeltaij_dc() and maths_fns.pcs.pcs_constant_grad().  These are used by the dfunc_*() methods of the N-state model target function class.
        * Major code simplification of the N-state model target functions.  The func_tensor_opt(), dfunc_tensor_opt(), and d2func_tensor_opt() methods have been merged with the func_population(), dfunc_population(), and d2func_population() methods into the new func_standard(),dfunc_standard(), and d2func_standard() methods.  This halves the amount of code required to be maintained and debugged.  For the merger, the new probs_fixed class instance variable has been created to determine when the probabilities need to be unpacked from the parameter vector.
        * Removed the unused parameter scaling in the N-state model gradient and Hessian target functions.
        * Added a RelaxError to the N-state model Hessian for the optimisation of the paramagnetic position.  This is because these equations are not derived or coded yet.
        * Expanded the N-state model target function func_standard() docstring to include the xi derivative.  This is the partial derivative with respect to the paramagnetic centre position.
        * Comment fixes in the ave_pcs_tensor_ddeltaij_dc() and pcs_constant_grad() functions.
        * Modified the N-state model metal_pos_opt.py system test script.  This is to test optimisation with the new paramagnetic position gradients.
        * BFGS optimisation is now being used for the N_state_model.test_mc_sim_failure system test.  This is to have better test coverage of the paramagnetic centre position optimisation gradient code paths.
        * Simplified the parameter unpacking in the func_standard() N-state model target function.
        * Improved the comments in the _disassemble_param_vector() N-state model method.
        * Modified the populations.py N-state model system test script to better test optimisation.  The probability of the 2nd state has been slightly shifted to make sure the original value can be found.
        * Modified the metal_pos_opt.py N-state model system test script to demonstrate some failures.
        * Improved the checks of the metal_pos_opt.py N-state model system test script.
        * Modified the metal_pos_opt.py N-state model system test script to catch yet another bug.
        * Added Monte Carlo simulations to the align_fit.py N-state model system test script.  This is to increase the very low coverage of Monte Carlo simulation testing for the N-state model.
        * Modified the metal_pos_opt.py N-state model system test script to test the bootstrapping code path.  This converts the Monte Carlo simulations into bootstrapping to make sure this method also functions correctly.
        * Implemented the N-state model specific return_data() method.  This is needed for bootstrapping.
        * Fixes for the N-state model return_data() method.
        * Modified the RelaxNoRDCError and RelaxNoPCSError to accept no alignment ID.  This is then used to indicate the complete absence of data.
        * Modified the initial testing of the rdc.set_errors and pcs.set_errors user functions.  This is to better indicate to the user what the problem is and why the user function cannot operate.
        * Fixes for the align_fit.py N-state model system test script.  The recently introduced Monte Carlo simulations and associated RDC and PCS error setting was failing when RDC or PCS data was missing.  The script now checks the mode of operation and only sets errors if the corresponding data is present.
        * The N_state_model.test_align_fit system test now checks the simulation PCS values.
        * Fix for the metal_pos_opt.py N-state model system test script.  The moving interatomic data containers are now also deselected.
        * Added extensive data checks to the N_state_model.test_metal_pos_opt system test script.
        * Added new checks in the N_state_model.test_metal_pos_opt system test.  These are for structures which should not be in the deselected spins and interatomic containers
        * The N-state model _check_rdcs() method now skips deselected interatomic data containers.  A FIXME comment has also been added to highlight a possible future problem.
        * Added some consistency to the specific analysis API base class.  The return_data() method argument has been changed from 'spin' to 'data_id', as the data from the base_data_loop() methods are often not spin containers.
        * Made the chi2 value check less stringent in the N_state_model.test_metal_pos_opt system test.  For some bizarre reason, the calc() call in the GUI is less precise.
        * The N_state_model.test_populations system test has been made less stringent to allow MS Windows to pass.


    Bugfixes:
        * Scons fix for MS Windows.  A bug was introduced in the previous version which causes scons to fail on MS Windows.  This has to do with the ctypes.Structure object but strangely led to a AttributeError importing scipy when initialising scons.
        * Another attempt at fixing the scons failure in MS Windows due to scipy and ctypes killing each other.
        * Work around for a numpy bug triggered by scons and the import of Scientific.Visualization.VMD.  For details, see the thread started by Jack Howarth (howarth att bromo dot med dot uc dot edu) started at http://thread.gmane.org/gmane.science.nmr.relax.devel/3663 (Message ID:<20121019140023.GA26861@bromo.med.uc.edu>).
        * Fix for a fatal bug in the multi-processor code (https://gna.org/bugs/?20253).  The Queue module is now imported as 'queue' for Python 3 support, so the code was referring to the wrong object name.
        * Bugfix for the grid_search user function.  The elements of the list of integers can be None to indicate that no grid search in that dimension is to be performed.
        * Fix for model elimination in the modsel.py model-free sample script.  The eliminate user function should be applied to each data pipe separately.
        * Fix for the relax_io.write_data() function - it can now handle no data being sent in.
        * Bugfix for the use of pseudo-atoms for RDCs in the N-state model analysis.  If the second atom of the pair in the intermolecular data container holding the RDC data was a pseudo-atom, then the N-state model optimisation setup would fail.  Now both the first and second atoms being pseudo-atoms is supported.
        * Fix for bug #20335 (https://gna.org/bugs/?20335).  The global alignment ID data structure now has the RDC or PCS ID string correctly removed.
        * Fix for bug #20338 (https://gna.org/bugs/?20338), the new tensor name is now set.
        * Bugfix for the catching of errors in the GUI user functions - the sys module import was missing.
        * Bugfix for the GUI combo_list input element SetValue() method.  Values not belonging to the combo lists can now be set.  This fixes the spin.create_pseudo user function in the test suite, a bug triggered by the N_state_model.test_absolute_rdc_menthol GUI test.
        * Fixes for the align_tensor.copy user function for when the tensor_to argument is not supplied.  Now it is assumed that the new tensor will have the same name as the old.  The new tensor is also properly initialised.
        * Bugfix for the N-state model with PCSs and the temperature or spectrometer frequency are not set.  Previously the missing value was set to 0 K or 1e-10 Hz, but this was causing optimisation to fail.  Now a RelaxError is produced if the value is missing and optimisation is attempted.
        * Fixes for the calculation of RDC and PCS Q factors for when fixed alignment tensors are present.  If a tensor is fixed, then there will be no back-calculated data.  Therefore instead of returning from the function, a continue statement is used to skip just that alignment.
        * Bugfix for the RelaxNoAlignError error class - the printout statement was broken.
        * Bugfix for the rdc.copy user function - it is now functional.  The code was old and untested, and still assumed that the RDC values were held in spin containers rather than the interatomic data containers.
        * Partial fix for bug #20378 (https://gna.org/bugs/index.php?20378).  The gui_raise() function was operating differently under the command line run test suite and the GUI run test suite.  The operation of the function is now consistent, and no RelaxError is raised (unless the raise_flag argument is set).
        * Full fix for bug #20378 (https://gna.org/bugs/index.php?20378).  As no RelaxError is no longer raised in this Bruker.test_bug_20152_read_dc_file GUI test (well only in the command line operation of the GUI tests), instead the current data pipe is checked to make sure no relaxation data was loaded.
        * Fix for bug #20414 (http://gna.org/bugs/?20414).  The variable for the number of simulations in the AlignmentTensorList object is now set prior to setting the simulation parameter values.
        * Fix for bug #20417 (https://gna.org/bugs/?20417).  The backwards compatibility hook for the loading of old relax state and results files can now handle the presence of proton spins.  The data structures are now correctly converted to the current data pipe design.  This is only the case for old files containing PCS data.
        * Fix for bug #20420 (https://gna.org/bugs/?20420).  The problem was in the generic_fns.mol_res_spin.create_spin() function.  The index_molecule() and index_residue() functions where not taking alternative, non-current data pipes into account.
        * Fix for bug #20421 (https://gna.org/bugs/?20421).  The loading of relax state files was only updating the spin ID metadata structures for the current data pipe.  Now all loaded data pipes are updated.
        * RDC data fix for the _back_compat_hook() method for converting old relax state and results files.  The RDC data was not being shifted into the corresponding interatomic data container and remained in the spin containers.
        * Fix for the bug caught by the N_state_model.test_mc_sim_failure system test.  If no RDC error is present, then the returned error from the N-state model analysis specific method return_error() is None.
        * Fix for the missing PCS data in the N-state model Monte Carlo simulations.  This was caught by the N_state_model.test_mc_sim_failure system test.
        * Fix for the N_state_model.test_mc_sim_failure GUI test - the relax data store was not empty at the start.
        * Bugfix for the loading of PCS data from a file with different spin types in different columns.  This was caught by the Pcs.test_load_multi_col_data system test which now passes.
        * Bugfix for generic_fns.mol_res_spin.metadata_prune().  Non-unique molecules and residues are now removed from the spin ID lookup table.
        * Proper bugfix for the spin ID metadata lookup table pruning.  The Mol_res_spin.test_prune_metadata system test now passes.  The previous fix was not complete, and it should have been in the spin_id_variants_elim() function rather than metadata_prune().
        * Python 3 fix for the Pcs.test_grace_plot system test.
        * Fix for the N-state model _minimise_setup_atomic_pos() method for the paramagnetic centre.  The cdp.paramagnetic_centre_sim may not exist prior to Monte Carlo simulations.
        * Fix for the Monte Carlo initialisation of the paramagnetic centre position in the N-state model.  The simulation positions are now initialised to the optimised position.
        * Fix for the N-state model Monte Carlo simulations for when the paramagnetic centre is fixed.
        * Bugfix for the N-state model optimisation of populations and paramagnetic position.  The gradient from dfunc_standard() is now correctly calculated when both are optimised.
        * Fix for the assembly of the N-state model linear constraints.  These were not set up correctly when the populations and paramagnetic position are optimised together.
        * Bugfix for the N-state model Hessian d2func_standard() method.  An index variable name was incorrect causing the population model to fail with Newton optimisation.
        * Bugfixes for the _opt_uses_pcs() and _opt_uses_rdc() N-state model methods.  These now check that the populations are optimised as well.
        * Fix for a bug caught by the N_state_model.test_metal_pos_opt system test.  The problem was that uninitialised probability arrays of None from cdp.probs was always sent into the target function, whereas None should be sent in instead.
        * Big data store clean up fix for the N-state model.  The N-state model specific base_data_loop() method now skips deselected interatomic data containers and spins.  This prevents a lot of junk data being created in the data pipe, for example back calculated and Monte Carlo simulation RDC and PCS data.
        * Fixes for the relaxation curve-fitting specific return_data() method.  Strangely it appears as if this method is never used.



Version 2.1.2
(17 October 2012, from /trunk)
http://svn.gna.org/svn/relax/tags/2.1.2

    Features:
        * Python 2.3 to 3.3 support, including large changes throughout the code to be able to run on Python 3.
        * Improvements to the GUI tutorial in the model-free chapter of the relax manual.
        * A number of bugfixes.
        * Small improvements overall.


    Changes:
        * The scons 'clean' target now removes the Python 3 __pycache__ directories.
        * Small edit to the installation chapter of the user manual.
        * Decreased the Python version dependency from 2.5 to 2.3 in the installation chapter of the user manual.
        * More error checking for the associate_auto() method of the data pipe editor window.
        * Added data pipe bundle error checking for the GUI pipe editor window associate_auto() method.
        * Added some error checking for the data pipe bundle in the auto model-free analysis GUI code.
        * Added some special RelaxErrors for data pipe bundles.
        * Added some bug catching code for the observer objects.  In some rare cases a registered method's key was set to None.  This is now caught and a RelaxError thrown to prevent later indecipherable errors.
        * The setup.py application building script now complains if the Python setuptools are not installed.
        * Updated the relax prompt mode figure in the intro chapter of the user manual to the more modern prompt.
        * Improvements to the API documentation compilation.  The excluded files and directories, as well as hidden ones, are no longer included in the list of files/directories to add to the documentation.
        * Added a file with the relax user functions used for the prompt screenshots.  This is for the manual and the website.
        * Added the public domain LaTeX nth.sty style file for the user manual.  Some LaTeX distributions do not have this style file and, as it is public domain, it can be legally distributed with relax allowing the PDF manual to compile on more systems.
        * Fixes for weird print statements with double brackets generated by the 2to3 Python conversion script.
        * Removed a debugging printout.
        * Python 3 fixes for one of the test data scripts - print statement with function call replacements.
        * Python 3 fixes for non-used Python code - converted print statements to function calls.
        * Python 3 fixes for the script for generating plots of magnetic field lines.
        * Another print statement to function Python 3 fix for the user manual.
        * The Python print statements in the user manual are now function calls to be Python 3 compatible.
        * Python 3 fix for the generic_fns.structure.geometric.angles_regular() function.  Integer divisions no longer produce integers.
        * Better formatting of the test suite summary.
        * The text relax controller log is no longer cleared when a reset occurs.  This allows the test suite results to still be presented in GUI mode.
        * Even cleaner exiting of the GUI - the interpreter thread is terminated by the exit_gui() method.
        * The GUI is now cleanly exited with a call to wx.App.ExitMainLoop rather than wx.Exit.
        * Python 3 fix for the compat module - the Queue2 object needs to always be defined.
        * Added support for Python 2.2 and earlier for the compilation of the C modules.
        * Removed an unused import of the Queue module from the multi-processor.
        * Python 3 fix for the ScientificPython PDB reader unit tests.  The order of the keys returned by a dictionary's keys() method changes randomly in Python 3, so now they are sorted prior to comparison.
        * Redesigned the reset user function backend.  This now no only clears out the relax data store, but it also resets the GUI if present.  Some of the reset code comes from the tearDown() method of the GUI tests.  All windows but the main GUI window are closed and the relax controller gauges are set to zero and the log window text cleared.  These changes should allow GUI tests after an error or failure to pass, something which is currently problematic.
        * Disabled the initial relax intro printout from the GUI when running the test suite.  This prevents the intro text from appearing in the first failed test.
        * Fix for the Mf.test_read_results_1_3_v2_broken() system test for Python 3.2.  The object comparison method no longer converts dictionaries to strings for the comparison, as the string version is different in different Python versions.
        * Fix for the Mf.test_write_results() system test for the Python 3 versions.  The logic for determining Python 3 versions was broken and the incorrect files was used for Python 3.1.
        * Better Python 2.3 support.  The compat module is now imported at the very start to allow the builtins to be set before any other imports.  The sorted() builtin method is now mimicked and the os.devnull string set for Python 2.3 and earlier.
        * Fix for the Mf.test_write_results() system test for Python 3.1.  The XML version in Python 3.1 is the old style.  Therefore the old results file is being used to check this Python 3.1 result.
        * Small improvements to the multiple Python version test suite testing script.
        * Reactivated support for Python 2.3.  This mainly skips the missing 'subprocess' module.  This however decreases relax's functionality a little.
        * Created a special script for testing out relax with Python versions 1.0 all the way to 3.3.  This builds the C modules for each Python version in ~/bin and then runs the test suite, outputting everything to log files.
        * The Results system tests are no longer dependent on the relaxation curve-fitting C modules.  This allows these tests to run when the module cannot be imported.
        * Python 2.5 and lower fix for the test_write_protein_sequence() unit test.  The byte array is wrapped in an eval() statement to allow Python 2.5 and lower to parse the code without failing, and the byte array comparison is now only used for Python 3+.
        * All system and GUI tests reliant on the relax-fit C modules are deactivated if import fails.  This removes a pile of useless error messages from the test suite and presents a table of skipped tests at the end.
        * More Python 3 fixes for the use of now non-existent string module functions.
        * Python 3 fix for the model-free BMRB export - many string module methods no longer exist.
        * Mass conversion of the alignment tensor data structures to the same new design as the diffusion tensor.  This large set of changes matches all of those revisions for the diffusion tensor already committed.  The alignment tensor data structures are now read only, and can only be modified via the set() method.  This is a much simplified design which works on all Python versions.
        * Small clean ups of the diffusion tensor data structure code.
        * Deleted the now unused _update_sim_set() method of the diffusion tensor data structure.
        * Removed the now unused _update_sim_append() method from the diffusion tensor data structure.
        * Cleaned up the docstring of the diffusion tensor data object __setattr__() method.
        * Updated all of the diffusion tensor unit tests to the new design.
        * Fix for the reading of model-free results files from relax 1.2 when simulation data is missing.
        * Fix for the reading of relax 1.2 model-free results files for the diffusion tensor structure redesign.
        * Another fix for the fold_angles() diffusion tensor function - again an incomplete design conversion.
        * Fix for the setting of the diffusion tensor parameter errors in the model-free specific analysis code.
        * Fix for the setup of the model-free Monte Carlo simulations for the new diffusion tensor design.
        * Another fix for the diffusion_tensor.init user function - it was not completely converted.
        * Fix for the fixing of parameters in the model-free analyses.  The diffusion tensor set_fixed() method is now used.
        * Fix for the XML output of the diffusion tensor - only the modifiable parameters are output.  This was the previous behaviour and is needed for the test suite to pass.
        * Converted the palmer.extract user function to use the new diffusion tensor design.
        * The diffusion tensor bmrb_read() function now uses the set_fixed() method instead of fixed().
        * The fix user function now uses the diffusion tensor set_fixed() method.
        * Renamed the diffusion tensor fixed() method to set_fixed() to avoid clashing with the 'fixed' object.
        * Fix for the model-free specific analysis duplicate_data() method for the new design.  The diffusion tensor __mod_attr__ object is now called _mod_attr.
        * Fix for the diffusion tensor to_xml() method for the new design.  For some reason the methods of the Element class are no longer blacklisted.
        * Converted the diffusion tensor data structure from_xml() method to the new tensor design.
        * Fix for the Diffusion_tensor.test_copy system test - the simulation parameters are now read-only.  Instead, the diffusion tensor set() method needs to be called.
        * The setting of list values for the DiffTensorSimList object now works correctly.  The private _set() method now works correctly by calling the base class method, and the normal setting of diffusion tensor simulation values produces a RelaxError.
        * Fix for the diffusion tensor __deepcopy__() replacement method for the new design.
        * The model-free specific analysis _disassemble_param_vector() method now uses the new diffusion tensor design.
        * Modified the setUp() method for the diffusion tensor system tests to use the new design.
        * Redesigned how diffusion tensor simulation structures are handled.  The design is now much cleaner and works with all Python versions.
        * Removed all the unused imports from specific_fns.model_free.main.
        * A number of private diffusion tensor objects and methods have switched to the single leading '_' format.
        * Improvements to the diffusion tensor set() method.  The parameters, errors and simulations are now properly differentiated and stored.
        * Converted the old diffusion tensor __setattr__() method into the set() method.  This is the only way in which diffusion tensor parameters, errors and simulations can be set.
        * Renamed the diffusion tensor data structure type() method to set_type().  This is because the type is stored as the 'type' object, clashing with the method name.
        * Created the diffusion tensor data structure type() method for setting the tensor type.  This is to remove the "cdp.diff_tensor.type = 'x'" code from the core of relax, as the structure is now read only.
        * The new diffusion tensor fixed() method has been created to allow the fixed flag to be changed.
        * Fix for the initialisation of the diffusion tensor data structure, now that it is read-only.
        * The diffusion tensor data structure has been completely converted into a read-only structure.  The __setattr__() method now will always raise a RelaxError, and the diffusion tensor simulation data structure objects __setitem__() method will raise the same error.
        * Updated the relax version numbers and 'trunk' used relax user manual.  For example the information about checking out the main development line was still talking about 1.3 rather than the trunk.
        * Python 3 fix for the setting of diffusion and alignment tensor simulation values.  The previous code somehow worked in Python 2 but was not formally correct and broke in Python 3.
        * Python 3 fix for the model-free results file reading tests.  The ordering of dictionaries is different in Python 3, so now these are properly converted from strings to dictionaries before comparison.  This was not happening because of the XML changes from Python 2.7.3 onwards.
        * The relaxation curve-fitting system tests are now skipped if the module is missing or broken.  This improves the printouts from the test suite and shows a summary of skipped tests rather than a pile of traceback messages and errors.
        * The message about skipping the GUI tests due to wxPython being missing is now more specific.  This was being shown for all runs of the test suite when it only needs to appear if GUI tests have been run.
        * Added a Python 3 version of the truncated OMP model-free results file.  This was created with trunk.
        * Removed the Python 3 byte array hack which should have been removed earlier.
        * The OMP model-free results file generation script now outputs for any relax version.
        * Python 3 fix for the Mf.test_latex_table system test.  The latex_mf_table.py model-free system test script docstring contains backslashes, so the raw string format r"""Text""" is now used.
        * Python 3 support for Modelfree4 and Dasha.  The subprocess.Popen class works with byte arrays rather than strings in Python 3+.  The Python objects are now interconverted when the Python 3 encode() and decode() methods are detected.
        * Removed the pickle format information and arguments from the state user function definitions.
        * Eliminated the State.test_state_pickle() system test as pickled states are no longer supported.
        * Removed the ability to save and restore states using the pickle module.  A pickled state is of no use to relax anymore.  It's removal is needed for Python 3 support.  So now everything defaults to the XML formatted output.
        * Python 3 fix - removed the use of the string module from generic_fns.spectrum.
        * Python 3 fix for the relax_io.open_write_file() function.  This now matches the behaviour of open_read_file() in that there are three different behaviours for opening bz2 and gz files for writing to for the different Python versions (one for Python 2, one for Python 3.0 to 3.2, and one for Python 3.3+).  All byte streams have been eliminated as open_write_file() is for creating text files.
        * Python 3 fix for the Noe.test_noe_analysis() system test for the grace.write precision changes.
        * For consistency between Python 2 and 3, the grace.write user function outputs to 15 decimal places.  This increased precision will only be of use in the relax test suite.
        * Python 3 fix for the Pipes.test_pipe_bundle() system test.  The order of bundle names returned by generic_fns.pipes.bundle_names() is not guaranteed in Python 3.
        * The C module compilation testing script now accepts the Python version as a first argument.
        * The relax_io.open_read_file() now supports all Python versions over 2.4.  This required some really nasty hacks for Python 3.0, 3.1 and 3.2 with the Bzip2Fixed and GzipFixed classes overriding the incomplete and buggy bz2.BZ2File and gzip.GzipFile modules, and being wrapped around io.TextIOWrapper().
        * Added the IO module to the relax information printout and dependency checks.
        * The manual C module compilation script is now executable.
        * Renamed the 'scripts' directory to 'devel_scripts' so that users are less likely to ask about the scripts.
        * Finished off the C module compilation testing script.
        * Added a script for testing out the C module compilation on multiple Python targets.
        * The relax_fit specific analysis module now supports both Python 2 and 3.
        * The relaxation curve-fitting C module now supports compilation on both Python 2 and 3.
        * Created the simple Sequence.test_sequence_copy() system test to catch bug #20213 (https://gna.org/bugs/?20213).
        * The Mf.test_bug_20213_asn_sidechain() system test now uses a temporary directory for output.
        * Added the Mf.test_bug_20213_asn_sidechain() system test to catch bug #20213.  The data and script comes from the files 'sh3-47.2.zip' and 'run.py' attached to the bug report https://gna.org/bugs/?20213.  The PDB now only contains Asp47, the optimisation parameters have been made almost insignificant, and all models but 'tm0' have been removed from the analysis.
        * The Python 3 dictionary values() method no longer returns a list, so a list() call is needed.
        * Python 3 bug fix for the geometric structure module - another integer division to float problem.
        * The Mf.test_write_results system test can now select the correct file to compare against in Python 3.  The algorithm for determining if the 'final_results_trunc_1.3_v2' or 'final_results_trunc_1.3_pre_py2.7.3_v2' file should be used could not handle Python 3.
        * Python 3 fix for the format detection of results and save files.
        * Python 3 import fixes for the generic_fns.structure package using relative paths.
        * Python 3 fix - removed the use of the string.lower() function in the OpenDX mapping code.
        * Python 3 fix for the frame order system tests.  As float to string conversions behave differently, the %.1f formatting is used to force only a single decimal place float.
        * Python 3 fix for the frame order system tests - float to string conversions behave differently.  Now the explicit %.1f formatting is used to force only a single decimal place float.
        * Python 3 integer division to float fix for the frame order analysis.
        * Python 3 bug fix for the frame order analysis - another int division problem.
        * Python 3 fixes - eliminated all usage of the dictionary has_key() calls as they are no longer present.
        * Python 2 and 3 support in the generic_fns.relax_data module using 2to3.  One print call was fixed after running 2to3.
        * Python 3 bug fix for the Structure.test_read_pdb_mol_2_model_scientific system tests.  This is again an integer division problem returning a float.
        * Python 3 fix for the test_write_protein_sequence() unit test.  This is again a string verses byte verses unicode problem.
        * Python 3 fix for the user function docstring creation in the prompt UI mode.  Again this is the problem of a division now returning a float rather than an int.
        * Python 3 bug fix for the N-state model target function setup.  The num_tensors variable needs to be an integer, but the Python 3 division will create a float type.
        * Python 3 fix for the results.read user function matching that of state.load.
        * Python 3 bug fix for the relax_io.read_spin_data() function.  The built in max() function cannot handle the value of None, therefore the filter() function is used to remove all instances of None from the list.
        * Python 3 bug fix for the state.load user function.  The header line of pickled states (rather than the standard XML states) is of the b'' byte format.  This is now converted to a string, and the search expression is comparing it to the raw string r"<\?xml".
        * Better support for both Python 2 and 3 in the relax data store.  The 2to3 script was used on all of the files in the data package.
        * Python 3 preparation - the relax data store (the data package) now supports both Python 2 and 3.
        * Python 3 fix - the relax_errors.AllRelaxErrors object is now a proper tuple.  Due to bad coding, it was previously a nested tuple.  This nested tuple worked in Python 2, but is fatal for Python 3.
        * Python 3 fixes - the character '\' is now properly escaped as '\\' in the stereochemistry auto-analysis.
        * Fix for the test suite summary for Python 3.  The test suite now runs, but fails miserably, under Python 3.
        * Fix for the running of the test suite under Python 3.  The zip() function used in the loadTestsFromTestCase() function is now an iterator, so it needs to be passed through the list() function to generate a list.
        * Fix for the test_parse_token_multi_element_name() unit test, as parse_token() no longer sorts.
        * Python 3 fix for the generic_fns.mol_res_spin.parse_token() function.  Mixed lists for int and string can no longer be sorted.  This sort call is not needed anyway.
        * Automatically converted the generic_fns.mol_res_spin module to support both Python 2 and 3.
        * For running relax with Python 2, the __builtin__.range() function has been replaced with xrange.  This causes large speed ups (speed that was lost with the earlier xrange() to range() conversions), and memory decreases.  For example on one system, the system test time decreased from 513.029s to 487.586s.
        * The compat module now has the py_version variable specifying if this is Python 2 or 3.
        * Import fix for the OpenDX mapping package, recently broken with the relative import for Python 3 change.
        * More usage of the is_unicode() function in the generic_fns.mol_res_spin module.
        * Created the check_types.is_unicode() function for Python 2+3 compatibility.  This is used in the generic_fns.mol_res_spin module.
        * Another raise() function call to statement change for 2to3 preparations.
        * Converted some raise() function calls to raise statements in preparation for the 2to3 conversion.
        * Converted the ScientificPython PDB reader to support both Python 2 and 3.  The __repr__() method was manually modified due to the 'list' variable clashing with the 'list'type.
        * Created a new module for simultaneous Python 2 and 3 support in relax called 'compat'.
        * Python 3 fixes - the list() function is now used in combination with range() to generate the ordered list.  range() in Python 3 is an iterator object (just as xrange was), so now the list() function has to be called.
        * Python 3 preparations - mass conversion of all xrange() calls to range().
        * Created the special check_types.is_filetype() function for checking for files in all Python versions.
        * Python 3 - eliminated an unneeded xrange call.
        * Python 3 - eliminated the use of the map() function, as this behaves differently in Python 3.
        * Python 3 - removed the use of the string.lower() function as it is missing in Python 3.
        * Python 3 fix for the relax information printout.  The try blocks seem to now operate slightly differently in Python 3.
        * Python 2 fixes - the Python 3 fixes for the ScientificPython module imports broke Python 2.
        * Python 3 - the cStringIO.StringIO import switches to io.StringIO if missing.
        * Python 3 - relative module paths are now used for the test suite runner.
        * Python 3 fixes for the version module for catching empty lists.
        * Python 3 fix - ensure an integer is actually an integer (division now converts ints to floats).
        * Python 3 - fixes for the renaming of the Queue package.
        * Python 3 - converted the last of the except error catching statements to be Python 2.4+ compatible.
        * Python 3 - removal of the use of the string.atoi and string.atof functions.  These have been depreciated since Python 2.0!  They have been replace by the int and float functions.
        * Python 3 - a number of fixes for running the ScientificPython modules in relax on Python 2 and 3.  This includes relative imports, converting raise statements to function calls, removal of the use of many string module functions which do not exist in Python 3, etc.
        * Python 3 - modified some except statements to be Python 2.4+ compatible in a ScientificPython module.
        * Python 3 - converted some print statements to function calls in the ScientificPython modules.
        * Python 3 - fix for an os.chmod() call by using the stat module rather than the number 0775.  The number 0755 is no longer valid in Python 3.
        * Python 3 - a pile of relative path fixes for many relax modules.
        * Python 3 - removed the use of the types module from generic_fns.sequence.  The relax arg_check module is now being used instead.
        * Python 3 preparations - removed all of the string module functions which no longer exist in Python 3.  These functions are part of the strings themselves now.
        * Improvements for the relax test suite synopsis for when the wxPython module is missing or broken.  This is simply a printout improvement.
        * Python 3 preparations - removal of some unneeded xrange() calls.
        * Python 3 preparations - the data package now really does use the absolute path for its module imports.
        * Python 3 preparations - the data package now uses absolute imports for all its modules.
        * Python 3 preparations - eliminated the use of the types.ListType object.
        * Python 3 preparations - absolute module path fixes.
        * Python 3 preparations - support for both Python 2 __builtin__ and Python 3 builtins modules.
        * Python 3 preparations - absolute module path fix.
        * Python 3 preparations - more exception handling updates for all Python 2.4+ versions.
        * Python 3 preparation - all raising of RelaxErrors is now Python 2.4+ compatible.
        * Python 3 preparations - error handling is now Python 2 and 3 compatible in the relax_io module.
        * Python 3 preparations - converted the relax prompt/script interpreter to be Python 2 and 3 compatible.
        * Python 3 preparations - removed the use of the types.ClassType object.
        * Python 3 preparations - compatibility for both the Python 2 cPickle and Python 3 pickle modules.
        * Python 3 preparations - all usage of string.split() and string.strip() has been eliminated.
        * Removed the completely unused gui.components.conversion module.
        * Removed an unused import (which was breaking relax in Python 3).
        * Python 3 preparations - all os.popen3() instances in relax have been replaced by the subprocess module.
        * Python 3 preparations - eliminated the use of the os.popen3 function from the info module.
        * More exception handling changes to be Python 2.4+ compatible.
        * Python 3 preparations - exception handling fix to be Python 2.4+ compatible.
        * Python 3 conversions using 2to3.
        * Updated the Python 2 to 3 checklist document for the shifting of the 'relax' file to 'relax.py'.
        * Python 3 preparations - removed all usage of the xrange() in the generic_fns package as none are needed.
        * Python 3 preparation - eliminated the unneeded use of xrange().
        * Python 3 preparation - the use of an absolute module path for import.
        * Python 3 preparations - the auto_analyses package is now fully Python 2 and 3 compatible.
        * Python 3 preparation - the auto_analyses package now uses absolute paths for the module imports.
        * Python 3 preparations - the use of the queue module in the status module is now compatible with 2 and 3.
        * Python 3 preparations - the GUI tests are now fully Python 2 and 3 compatible.
        * Python 3 preparations - the queue modules for both Python versions are now supported in the GUI tests.
        * Python 3 preparations - the test_suite.gui_tests package now uses absolute module path imports.
        * Python 3 preparations - the unit tests are now fully Python 2 and 3 compatible.
        * Python 3 preparation - all of the _generic_fns unit tests now use absolute module imports.
        * Python 3 preparations - all the _prompt unit tests now use absolute module imports.
        * Python 3 preparation - removed all xrange() calls from the unit tests, these are not needed.
        * Last Python 3 compatibility update for the system tests - they are now both Python 2 and 3 compatible.
        * Python 3 preparation - the test_suite.system_tests package now uses the absolute module path for imports.
        * Python 3 preparation - changed the import of SystemTestCase to use the absolute module path.
        * Removed all of the xrange() calls from the system tests as these are not necessary.  This is in preparation for Python 3.
        * Some changes in preparation for Python 3.
        * Removed the 'force flag' text from the RelaxWarning messages output by the bruker.read user function.  The force flag arguments of the generic_fns.mol_res_spin.name_spin() and generic_fns.mol_res_spin.set_spin_isotope() functions can now be set to None to suppress the text.
        * Fixes for the checks in the Mf.test_mf_auto_analysis() GUI test for the recent test suite data changes.
        * The CSA setting in the model-free auto GUI analysis now defaults to the '@N*' spin ID.  Previously no spin ID was being used so that the protons where also having their CSA values set to that of the nitrogens.  Now the execution checking code skips the proton CSA check.
        * Added star versions of the standard spin IDs to the spin ID GUI element (e.g. '@N*', '@H*').
        * Fix for the comment on the 'Export' button in the BMRB export window.
        * Lots of editing of the model-free GUI section of the user manual.
        * Fix for the Relax_data.test_delete system test for the changes to the relax_data.read user function.
        * Fix for the Relax_data.test_read unit tests for the relax_data.read user function changes.
        * Fix to the Dasha system test needed for the changes to the relax_data.read user function.
        * Fix for the N_state_model.test_monte_carlo_sims due to the changed sphere.pdb test suite file.
        * Relaxation data is no longer loaded by relax_data.read if the values and errors are both None.
        * Modified the Mf.test_dauvergne_protocol system test to catch bug #20197 (https://gna.org/bugs/?20197).  The sphere test data NE1 and HE1 data is now being used in this system test, triggering the bug.
        * Small change to the sphere model model-free test suite data.  The trptophan indole data is now merged into the last residue (a glycine) to catch bug #20197 (https://gna.org/bugs/?20197).
        * The overfit_deselect() printouts for all specific analyses are now regularised and match the model-free printouts.
        * All overfit_deselect() methods now accept and use the verbose argument.
        * Printouts for the over-fitting deselection of spins are suppressed for the back-calculation of relaxation data.  This affects the model-free Monte Carlo simulations, improving the output.
        * More improvements to the model-free over-fitting deselection printouts.
        * Improved the model-free overfitting deselection printouts prior to optimisation.  Only a single message per spin is now given when the spin is deselected, minimising the amount of output.
        * Added a tryptophan NE1 data set to the sphere model-free model test data.  This is in preparation to catch bug #20197 (https://gna.org/bugs/?20197).  The scripts have also been updated for the newer relax designs.
        * Added the data_check Boolean argument to all of the specific analysis overfit_deselect() methods.  This allows the unit tests to pass.


    Bugfixes:
        * Fix for the State.test_load_state_no_gui() GUI test - the data pipe bundle is now given.
        * Another attempt at fixing a nasty circular import in the relax GUI.
        * Fix for the relax user manual compilation.  The full path for an icon in the graphics directory was being used.
        * API documentation fix - a circular import has been broken.  This was only a circular import when the gui package is imported from an external program like Epydoc.
        * PDB format fix for the atom numbers of zero - the atom number should be consecutive and unique.
        * Big fixes for the running of the GUI tests.  The GUI initialisation and termination, when not running in GUI mode, is now preformed outside of the Python unittest framework.  The GUI was previously initialised in the setUp() method for all GUI tests, but for some reason this caused abrupt terminations of the GUI_test_runner.run() method.  This run method, when finished, would not return to the Test_suite_runner but would cause the Python interpreter to silently die.  The result was that the test suite summary would appear not to be printed out.
        * Python 2.3 and earlier fix for the unit test module for the float module.  The 'tests' class variable was renamed so that the test suite does not think that it is a unit test.
        * Bug fix for the unit test runner - this restores functionality broken all the way back at r12100.  The TEST_SUITE_ROOT constant no longer exists, so the check for it is now skipped.  This allows tests to be run directly by the script.
        * Python 2.4 and earlier fixes for the Queuing module.  The TaskQueue class from http://code.activestate.com/recipes/475160/ which was added to Python 2.5+ has been added to the compat module.  This module is now used for all imports of the Queue class for all Python versions.
        * Test suite bug fix - the GUI tests now cleanly terminate the interpreter thread.  This allows the test suite to terminate normally.  With different Python versions on different operating systems, this could sometimes cause the test suite to freeze at the end, the final printout to be missing, or other strange behaviour.
        * Python 2.3- fixes - the Modelfree4 and Dasha system tests are now skipped if the subprocess module is missing.
        * Python 2.3 and earlier fix for the Test_relax_re.test_search() unit test.  The unittest assertTrue() and assertFalse() methods do not exist, so assertEqual() is used instead.
        * Python 2.3 and earlier fix - the subprocess module is only imported when present.  This is for the stereochem_analysis auto-analysis, but the import kills all of the auto-analyses.
        * Python 2.3 fix - eliminated the superfluous operator.itemgetter() call in the diffusion tensor code.
        * Python 2.4 and earlier fix for the GUI.  Try-except-finally statement blocks are not supported, so these have to nested in two try statements.
        * Python 2.4 fix - the unit test runner no longer uses the builtin set() method.
        * Python 2.4 and lower fix for the pipe_loop() generator method.  In these Python versions, a 'try' block with a 'finally' statement cannot contain 'yield' statements.  This work around should be compatible with all Python versions.
        * Python 2.4 fixes - the ctypes module does not exist in Python versions 2.4 and lower.  This is only used for some non-essential functionality on MS Windows, so now it is deactivated if not present.
        * Fix for bug #20213 (https://gna.org/bugs/?20213).  The problem was that the generic_fns.sequence.generate() function was searching for a spin based on its spin ID generated from the spin name and not spin number.  Hence two spins with the same name but different numbers were treated as the same spin, and only data from one was being generated via the copy() function.
        * Bug fix for wxPython 2.9.4.0 - the unsetting of the alpha mask for all bitmap images should now work.  The wx.Bitmap.SetMaskColour(None) call does not work, so instead a wx.Colour() instance is passed in instead.
        * Fix for bug #20210 (https://gna.org/bugs/?20210) - relax now runs again without having wxPython installed.
        * Bug fix for the BMRB system test initialisation for when the bmrblib module is missing.  The base __init__() method needs to be initialised first.
        * Fix for bug #20201 (https://gna.org/bugs/?20201).  The bruker.read user function can now handle the situation where multiple spins per residue are already loaded prior to the user function call.  The isotope value from the DC file is now translated to the element name and this is used as part of the spin ID string.
        * Fix for bug #20197 (https://gna.org/bugs/?20197) - the PyMOL and Molmol macro failure.  The macro creation now only operates on spins called 'N' and assumes these are the backbone nitrogens.  The sidechain tryptophan indole NH data will need to be detected and added later.
        * Fix for bug #20198 (https://gna.org/bugs/?20198) - the relaxation data back-calculation error.  The problem was that the call to the model-free overfit_deselect() method was deselecting any spins lacking relaxation data.  This should not happen, as no spins need to have relaxation data for this calculation.



Version 2.1.1
(21 September 2012, from /trunk)
http://svn.gna.org/svn/relax/tags/2.1.1

    Features:
        * Creation of extensive tutorials for both the script and GUI modes for the NOE, R1 and R2, model-free chapters with screenshots in of the GUI in operation.
        * Restored support for multiple spin types in the NOE, R1 and R2 analyses allowing, for example, tryptophan sidechain indole NE1 data to be analysed.
        * The activation and expansion of the consistency testing chapter to the user manual.
        * The completion of the reduced spectral density mapping chapter of the user manual.
        * Improvements to the user function section of the user manual with better visual separation and the inclusion of the icons used in the GUI.
        * Creation of the relax data model chapter of the user manual to explain how to set up data in relax in all UI modes (with screenshots in the GUI mode).
        * Creation of the citations chapter of the user manual to help users properly cite the parts of relax that they use.
        * A complete rewrite of the relaxation curve-fitting chapter of the relax manual.
        * General improvements and expansions throughout the user manual (the manual is now 15 Mb compared to 4.3 Mb for relax 2.1.0).


    Changes:
        * Modified the model-free optimisation final printout to be more multi-processor friendly.  The message saying that the optimised chi2 is an improvement or not now includes the spin ID string if present.  This is more informative for the multi-processor mpi4py printouts.
        * Added the use of the program 'nice' to the model-free GUI tutorial in the user manual.
        * Removed the out of date and useless README file for the HTML version of the user manual.
        * Added a BMRB section to the end of the model-free chapter of the user manual.
        * Massive expansion of the model-free chapter of the user manual including script and GUI tutorials.  The model-free chapter now has step-by-step tutorials for both the prompt/script mode and GUI mode for the new automated model-free protocol (the d'Auvergne protocol).  This includes a large set of screenshots for the GUI mode.
        * Created the User_functions.test_value_set GUI test demonstrating the failure of the value.set user function.
        * Modified the dauvergne_protocol sample script to handle tryptophan indole NE1 data.
        * The graphics.fetch_icon() function argument 'format' can now be set to None.  This will return the file path without the extension.
        * Improvements to the duplicate user manual title finding script.
        * Created a simple shell script to find duplicate titles in the relax user manual.  This is important for the HTML version of the manual as duplicated titles causes HTML pages to be overwritten.  For example all chapters, sections and subsections titled "Introduction" will load the introduction.html file which will contain the text of the last section with that title!
        * Additions to the scripting section of the relaxation curve-fitting chapter of the user manual.
        * A small edit to the intro chapter for the multi-processor operation and logging.
        * Added some labelling to the infrastructure chapter of the user manual for referencing.
        * A number of updates and edits to the intro chapter of the user manual.  The model-free GUI screenshot has been shifted to the intro chapter in preparation for a full tutorial with screenshots in the model-free chapter.
        * Updated the data model chapter of the user manual to cover the handling of protons.  This change includes the modification of the PDB reading screenshot to demonstrate the reading of a specific model and the naming of the molecule.
        * All of the GUI strings and text are now formatted with a small sans serif font in the user manual.  This is because in the GUI, a sans serif font is almost always used be default.
        * Modified the User_functions.test_structure_pdb_read() GUI test to catch another bug.  This is a bug recently introduced with the fixes to the other sequence editor GUI window problems.
        * Created the User_functions.test_structure_pdb_read GUI test for checking the sequence editor window.  This new user function GUI testing class is to be used for testing out the special GUI elements not invoked within the unit testing.  The test_structure_pdb_read() test specifically shows a number of failures of the sequence editor window.
        * Modified the operation of the sequence GUI element to have access to the sequence editor window.  This is to allow this GUI element to be blasted within the test suite.
        * Improvements to the descriptions of the structure.read_xyz user function arguments.
        * Improvements to the descriptions of the structure.read_pdb user function arguments.
        * Added @HE1 to the spin ID list of the structure.load_spins user function.  This is only seen in the GUI.
        * Created the new generic_fns.result_files for standardising the handling of results files.  This fixes the bug where results files are repetitively added to the list.  All of the code touching cdp.result_files now uses this module instead.
        * Updated the scripting section of the intro chapter of the user manual for non-technical users.
        * Expanded the spin ID list for the structure.load_spins user function.  This now includes the spins "@N", "@NE1", "@C", "@H", "@O", "@P", ":A@C2", ":A@C8", ":G@N1",":G@C8", ":C@C5", ":C@C5", ":U@N3", ":U@C5", ":U@C6".
        * Changed the RelaxError for missing relaxation times in the relaxation curve-fitting analyses.
        * Modified the test_bug_20152_read_dc_file() GUI test to catch the RelaxError.  This error is because of the old PDC format.
        * Created the test_bug_20152_read_dc_file() GUI test for catching bug #20152 (https://gna.org/bugs/?20152).  This includes truncated data taken from the bug report (with data for only the first 3 residues).
        * Set up the Bruker Dynamics Center system tests as GUI tests.  This is in preparation for catching bug #20152 (https://gna.org/bugs/?20152).
        * Re-added Dominique Marion's solvent suppression to the NMRPipe script in the curve-fitting chapter.
        * A few small edits of the relaxation curve-fitting chapter.  This is to reinforce the exact time of the relaxation time period.
        * Added some text to explain why test only J(0) is discussed whereas the script also calculated F_R2 and F_eta.  This was suggested by Edward d'Auvergne in a post at:https://mail.gna.org/public/relax-devel/2012-09/msg00044.html.
        * Big clean up of the Bibtex bibliography file for the relax user manual.
        * Small edits of the consistency testing figure caption in the relax user manual.
        * Editing and a number of fixes/cleanups for the consistency testing chapter of the user manual.
        * Editing of the "Values, gradients, and Hessians" chapter of the user manual to make it fit better.  The context of this chapter has been specified by changing the title to "Optimisation of relaxation data -- values, gradients, and Hessians" and the intro text has been updated.  As this chapter is no longer straight after the model-free chapter, this is needed.
        * Made a small correction to a reference such that a superscript is correctly displayed.
        * Added the bounding box and a centerline command to the code for the figure for consistency testing.  This follows two remarks by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00030.html and https://mail.gna.org/public/relax-devel/2012-09/msg00032.html.
        * Added more text to describe the consistency testing approach.  Also includes a very basic point by point protocol for consistency testing.  This was proposed by by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00028.html.  This also follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Added some text to describe the consistency testing example figure.  This follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Added a modified version of Figure 1 from Morin and Gagne (JBNMR, 2009 (http://dx.doi.org/10.1007/s10858-009-9381-4)).  File formats are .agr (xmgrace), eps (gzipped), and png.  This follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Added a directory for placing consistency testing graphics.  This follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Corrected the bibliography entries whih were still in plain text and not as a Latex \cite call.  Also renamed the MorinGagne09 entry to MorinGagne09a as there is now also MorinGagne09b.  This was proposed by Edward d'Auvergne in a post at https://mail.gna.org/public/relax-devel/2012-09/msg00025.html.
        * Added the DOI to reference Morin11 and fixed indentation (10.1016/j.pnmrs.2010.12.003).  This follows a comment by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00022.html.
        * Deletion of the relax version LaTeX file - this is automatically created anyway.
        * Added text to detail the usage of the consistency testing script.  This text was modified from the corresponding text for jw_mapping.  This follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Added some text and a reference to the consistency testing chapter.  This follows a discussion started by Edward d'Auvergne at https://mail.gna.org/public/relax-devel/2012-09/msg00019.html.
        * Editing of the nmrPipe script in the Rx curve-fitting chapter of the manual.
        * Some editing of the NOE chapter of the relax user manual.
        * The old R1 and R2 analysis screenshots have been shifted to the intro chapter.
        * Editing of the relax data model chapter of the user manual.
        * Large expansion and lots of editing of the relaxation curve-fitting chapter of the user manual.  The GUI section has been added which includes step-by-step instructions on how to use relax,illustrated with screenshots at each step.  There has been general editing of the whole of the chapter as well.
        * Added a tonne of GUI screenshots of an R1 analysis.  These will be used in the relaxation curve-fitting chapter of the user manual.
        * Added some Grace plots from an NOE analysis for use in the user manual.
        * Small edits of the relax data model chapter of the user manual.
        * Editing of the relaxation curve-fitting and NOE chapters of the user manual.  This is to synchronise the format of the two chapters, and includes the swapping of text between them.
        * Added trp indole NH loading into the relaxation curve-fitting sample script.
        * Large edits of the consistency testing chapter of the user manual.
        * Activated the consistency testing chapter of the user manual.
        * Added a LaTeX label to the J(w) mapping chapter.
        * Added the other consistency testing references to the citation chapter of the manual.
        * Added the Fushman et al., 1998 reference.
        * Fix for the Farrow et al., 1995 DOI number.
        * Changed the order of the Rx curve-fitting and NOE chapters in the relax manual.  This is because the NOE chapter references passages from the Rx curve-fitting chapter, so it's more logical to have the Rx curve-fitting chapter first.
        * Clean up of a paragraph of the data model chapter of the user manual.
        * Improved the consistency in the user manual by using the new LaTeX commands.  These changes are throughout the manual and affect all the text of user functions, menu items, prompt examples, GUI elements, files, directories, etc.
        * Removed some '()' text from the end of the user functions in the user function documentation.
        * Added some more LaTeX functions for formatting consistency.
        * Defined a new set of LaTeX commands for prompt/script/GUI strings and elements for the user manual.  These will be used to regularize the text throughout the manual, as this is currently quite mixed up.
        * More rearrangements of data model and NOE chapters of the relax manual.  The GUI spin deselection part of the NOE chapter has been shifted into the data model chapter.  And the GUI loading of spins from a sequence file section has been completed.
        * Added screenshots of the spin viewer spin loading wizard sequence.read page.
        * Redesign of the data model chapter of the user manual.  This includes the moving of all of the spin viewer window text and screenshots from the NOE chapter.
        * Shifted the spin viewer screenshots into their own directory.
        * Changed the "View->Spin view" menu item to "View->Spin viewer".
        * Created a directory for screenshots of the spin viewer window operation.
        * The NOE auto-analysis GUI test now checks the support for Trp indole N data as well.
        * The spectrum.read_intensities user function now prints out a list of the intensities read in.  This is for better user feedback as to what the user function has actually done.
        * Created the GUI wizard _apply() method for executing the current page's _apply() method.  This is for the GUI tests to simulate a click on the 'Apply' button.
        * Removed a debugging print out.
        * Modified the NOE system test to catch bug #20120 (https://gna.org/bugs/?20120).
        * Lots of editing of the NOE chapter of the user manual.
        * Significant update of the NOE chapter of the user manual.  The sample script used in this chapter was incredibly out of date.
        * Modified the NOE system test to test the usage of Trp indole 15N data.  This is to catch bug #20119 (https://gna.org/bugs/index.php?20119).
        * Added some Trp peak data (backbone and indole N) to the Sparky steady-state NOE peak lists.  This is in preparation for the modification of the NOE system test to catch bug #20119(https://gna.org/bugs/index.php?20119).
        * Modified the NOE sample script to include Trp indole NH data.
        * Added a step-by-step tutorial for the GUI NOE auto-analysis to the user manual.  This includes 22 screenshots of all the steps.
        * Added a section label.
        * Added some Sparky info to the Rx curve-fitting chapter of the user manual.
        * Allowed the raggedbottom LaTeX setting as this is better for the screenshot layout in the user manual.
        * Added the nth package for the user manual LaTeX compilation.
        * The NOE chapter now points to the recommendations in the Rx fitting chapter.
        * Added a new section called 'From spectra to peak intensities' to the Rx fitting chapter of the manual.  This adds a number of recommendations for high quality relaxation rates.
        * Added the Viles et al., 2001 reference.
        * Small description edit for the relax_data.temp_control user function.
        * Added a LaTeX label to the NOE chapter of the user manual.
        * Added a paragraph to the model-free chapter of the user manual explaining the J(w) equation forms.
        * Added a label to the data model chapter of the user manual.
        * Created an initial rough version of the RSDM chapter of the user manual.
        * Better figure layout in the NOE chapter of the user manual.
        * The relax data model chapter of the user manual now uses the higher quality graphics.
        * Some more high quality graphics.
        * Added more high resolution graphics for use in the relax user manual.
        * Expanded the size of the specific analysis graphics - mainly for use in the relax user manual.
        * Added the specific analysis graphics to the start of each chapter of the relax user manual.
        * Small edit of the 'Citations' chapter of the relax user manual.
        * Added EPS versions of the specific analysis graphics for use in the user manual.
        * Added the Fushman et al., 1999 reference for consistency testing to the intro chapter of the user manual.
        * More chapter cross referencing in the relax user manual.
        * Added the Horne 2007 paper to the 'Citations' chapter of the user manual.  Whitespace has also been cleaned up, and a chapter label added.
        * Added the Horne 2007 paper to the 'Supported NMR theories' subsection of the user manual intro.
        * Shortened the Literature subsection of the intro chapter to point to the citations chapter.  This part of the user manual is now redundant.
        * Small edits of the relax user manual.
        * Edits to the abbreviations chapter of the relax user manual.
        * Added another abbreviation.
        * Expansion of the abbreviations chapter of the relax user manual.
        * Added a tonne of DOI numbers to the relax user manual bibliography.  This will simplify accessing these references for the user.
        * Added and fixed DOI numbers for many bibliographic entries.
        * The LaTeX bibliography style for PhD theses now includes the DOI hyperlink.  This is for the user manual.
        * Slight modification of the DOI hyperlink formatting bibliography style for the user manual.
        * Modified the relax LaTeX bibliography style file relax.bst to convert DOI numbers to hyperlinks.  This is to add links to the references within the relax user manual.
        * Created the new 'Citations' chapter of the relax user manual.  This is to clearly outline to the user the citations required for the various components of relax.
        * Added the Fushman 1999 reference and a few formatting fixes in other references.
        * Improvements to the 'Supported NMR theories' section of the user manual introduction.  This includes the addition of the Morin and Gagne 2009 reference.
        * Added the Morin and Gagne 2009 reference for the consistency testing.
        * Added some more abbreviations to the relax user manual.
        * Created a new chapter for the relax user manual titled 'The relax data model'.
        * Fix for the pipe editor window screenshot width in the relax manual.
        * Converted some more wizard graphics to the EPS format for the user manual.
        * Updates and small expansion of the intro chapter of the relax user manual.
        * The user manual now specifies the repository revision if a non-tagged version is built.  This enables easier tracking and editing of the manual.
        * Updates to the generic_fns.mol_res_spin.id_string_doc documentation structure.
        * Updated the screenshot of the pipe editor window.
        * Created EPS versions of a number of wizard graphics for use in the user manual.
        * Removed some now useless whitespace from the top of each user function subsection of the manual.
        * Redesigned the formatting of the user function chapter of the relax manual.  The fetch_docstrings.py now forces each user function to start in a new column.  This increases the size of the manual, but makes the reading of the user function documentation much easier.  The user function class and function icons (128x128 format) are now placed between the top bar and the subsection title and are left and right justified.  This prettification simply allows the user functions to be more quickly identified.
        * Large expansion of the relax icon set.  All 128x128 versions of the icons used by the user functions have been added as both PNG and gzipped EPS files.  A few gzipped SVG and non-sized icons have been added as well.
        * Large expansion of the Oxygen icons within relax.  All 128x128 versions of the icons used by the user functions have been added as both PNG and gzipped EPS files.  A number of gzipped SVG icons has been added as well.
        * Modified the graphics.fetch_icon function to return different file formats.  This will be used for the relax manual where eps.gz files are required.
        * Improvements to the final section of the relaxation curve-fitting chapter.  The Xmgrace screenshot and page references for the user functions have been added.
        * Added screenshots of Xmgrace displaying relaxation curves.
        * The fetch_docstrings.py now adds LaTeX labels to each user function section.  This has the form of 'uf: ' followed by the user function name, and is for referencing purposes within the main text.
        * Rewrote the relaxation curve-fitting chapter of the relax manual.  This chapter was quite out of date and was of no use to modern relax versions.
        * Redesign of how the GPL license is presented to the user.  The old prompt.gpl module with the version 2 of the license has been deleted.  Now the text form the docs/COPYING file is passed through pydoc.pager for the './relax --licence' and the prompt mode GPL object, and is simply printed to STDOUT for the GUI help system.
        * Import clean ups for the N-state model specific module.
        * Added the 'unit' argument to the dipole_pair.read_dist and dipole_pair.set_dist user functions.  This is to allow distances in Angstroms to be read into relax and converted to meters.


    Bugfixes:
        * Fix for bug #20189 (https://gna.org/bugs/?20189).  The Sequence GUI element can not handle values of None.
        * The citations chapter is now included in the HTML version of the user manual.  For some reason, a file named 'cite.tex' cannot be handled by latex2html.
        * The latex2html compilation of the user manual now ignores the \bibitem{} commands.  This is needed for the HTML version of the user manual.
        * Fixed a section titled 'Introduction' clashing with the intro chapter of the user manual.
        * Fixes for the user function icons in the HTML version of the user manual.  These icons are now placed on the correct HTML page.
        * Removed the text '.eps.gz' from all of the LaTeX included graphics in the user manual.  This allows latex2html to select and use the PNG images instead, producing much better graphics for the online manual (http://www.nmr-relax.com/manual/index.html).
        * Fix for the graphics.fetch_icon() function for when no file format is specified.
        * Elimination of all duplicated chapter, section and subsection titles in the user manual.  This fixes bug #20185 (https://gna.org/bugs/?20185).
        * The HTML files for the user manual now have longer names - this is needed for removing the duplicates.
        * Fix for the duplicate title finding script - the LaTeX and HTML mode alternatives are no longer mixed up.
        * Fix for bug #20177 (https://gna.org/bugs/?20177).  This was simply a lower precision OS/Python/numpy combination causing a test suite failure - there are no practical effects and only the precision of the system/GUI test has been lowered.
        * Another bug fix for the sequence GUI editor window.  This bug was being triggered by the User_functions.test_structure_pdb_read() GUI test which now passes.
        * Small fix for the User_functions.test_structure_pdb_read() GUI test.
        * Fix for bug #20184 (https://gna.org/bugs/?20184).  The behaviour of the gui.string_conv.gui_to_int() and related functions has changed in the last few months and the Sequence_window() GUI element has not changed to match.  This has been fixed and the User_functions.test_structure_pdb_read() GUI test now passes.
        * Fixes for the User_functions.test_structure_pdb_read() GUI test.
        * Fix for bug #20183 (https://gna.org/bugs/?20183) - the failure of the sequence editor window.  The problem was that fields which could be either single values or lists (or tuples) of values were not properly handled.
        * Fix for bug #20182 (https://gna.org/bugs/?20182) - the sequence element window ordering issue.  The sequence element window now has the parent wx.Window element set.  This prevents the main relax window from being set as the parent and hence coming to the front after the sequence element window is launched from a user function window.
        * Fix for bug #20181 (https://gna.org/bugs/?20181) - the GUI sequence editor window TypeError problem.
        * Window ordering bug fix for the user function windows launched from the spin viewer window.  The spin viewer window no longer hides behind the main relax window after the launch of the user function.
        * Bug fix for the repetition of Monte Carlo simulations in the relaxation curve-fitting analyses.  This is in the specific analysis API, so will allow all analysis types to repeat Monte Carlo simulations for error analysis.
        * MS Windows fix - the NOE system and GUI tests are now less strict in checking the errors.
        * Proper bug fix for storing the execution status of wizard and user function pages.  This allows the test suite to pass again.  The execution status is now properly returned from the wizard pages run synchronously (and always set to True for asynchronous calls).
        * Fix for bug #20173 (https://gna.org/bugs/?20173).  The palmer.create user function should have been checking that the diffusion tensor had been initialised.  This is now being performed.
        * Bug fix for the execution of wizard pages - the execution status is now observed.  This fixes bug #20152 (https://gna.org/bugs/?20152).  The problem was that the execution status was being lost in the protected_exec() function.  However as relax errors are caught in the GUI interpreter anyway and the status is returned normally, the protected_exec() wrapper was removed.
        * Bug fix for the creation of the user function GUI pages - the (a)synchronous arg is now observed.  This argument was being ignored, which in some wizards was causing user function calls to be asynchronous.  This can result in racing related crashes.
        * The bruker.read user function now throws a RelaxError when old PDC files are detected.  This is a partial fix for bug #20152 (https://gna.org/bugs/?20152).
        * Fixed the newlines in the sample script in the consistency testing chapter.
        * Fixed the bounding box for the consistency testing figure and also fixed some Latex unfriendly code.  Problems were spotted by Edward d'Auvergne in a post at https://mail.gna.org/public/relax-devel/2012-09/msg00039.html.
        * Fixed a bibliography entry label problem.  This was spotted by Edward d'Auvergne in a post at:https://mail.gna.org/public/relax-devel/2012-09/msg00040.html.
        * Bug fix for the creation of 2D graphs via grace.write for when many data sets exist.  The algorithm for setting the Grace symbol number to be between 1 and 10 was broken!
        * Fix for bug #20133 (https://gna.org/bugs/?20133) - this was simply a missing import.
        * Fix for the spin.create user function documentation - the prompt examples were wrong.
        * Bug fix for the generic_fns.grace.get_data() function.  This was just recently introduced and was triggered by the Relax_fit.test_bug_12670_12679 system test.
        * Fix for bug #20120 (https://gna.org/bugs/?20120), the bad Grace plots with multiple spin types.  The grace data assembly function was not setting the correct index for when a spin type changes to a preexisting type.
        * Bug fix for the reading of Sparky peak lists.  Spin names with numbers at the end were not being correctly identified.  This fix allows Trp indole NE1-HE1 data to be loaded.
        * Bug fix for the loading of peak intensities via spectrum.read_intensities.  The user function could not be applied twice, preventing the loading of data from different spin systems such as Trp indole NH data.
        * Another fix for the relax_data.temp_control description.
        * Fix for the incomplete relax_data.temp_control user function description.
        * Spell fix for the relax_data.temp_calibration user function description.
        * Fixes for the referencing in the J(w) mapping chapter of the user manual.
        * Fixed some citations in the newly introduced model-free J(w) paragraph.
        * Fixed a bunch of links in the development chapter of the user manual.
        * Small fix for the sample script in the relaxation curve-fitting chapter of the relax manual.
        * Small fix for the sample script in the NOE chapter of the relax manual.
        * Bug fix for the RDC Q factor calculations for when the dipolar constants are not all the same.  Now instead of a RelaxError, a warning is given and the Q factor normalised by 2Da^2(4 + 3R)/5 is skipped.  This allows long range and mixed nuclear pairs to be supported.
        * Import additions to fix the epydoc import of the 'sconstruct' script for the API documentation.
        * Epydoc docstring fixes for the API documentation.
        * Import fix for the epydoc building of the API documentation.



Version 2.1.0
(12 July 2012, from /trunk)
http://svn.gna.org/svn/relax/tags/2.1.0

    Features:
        * Update of relax to the GNU General Public License version 3.
        * Introduction of the interatomic data container design for NMR data such as the magnetic dipole-dipole interaction between two spins (including relaxation and RDC data) and NOESY data.
        * Support for absolute or signless RDC values.
        * Creation of a fast molecule, residue and spin data lookup framework using private metadata.


    Changes:
        * Updated the journal reference for the published lactose conformational search scripts.
        * Shifted some of the sample scripts into the analysis specific sub-directories.
        * Increased the size of the test suite warning dialog for MS Windows.
        * Improvements to the skipped test printout from the test suite.  Now all test categories (system, unit and GUI) are printed if a module/package is missing.  This allows for better debugging.
        * Shifted all of the observer registration and unregistration to observer_setup() in the pipe editor.
        * Improved debugging print outs for the observer objects.  The method name is now stored and included in all the observer 'debug>' printouts.
        * Removed the notebook tab deletion from the GUI tests tearDown() method.  This should be performed when a relax reset happens, so it is not needed in the tearDown() method just before the reset() call.
        * Merger of the absolute RDC branch (absolute_rdc).
        * Added support for the absolute or signless RDCs to the N-state model.  This simply propagates the absolute flags into the maths_fns.rdc module functions whereby the absolute RDC values and gradients can be returned.
        * The rdc.read user function backend is now storing the absolute value flag in interatom.absolute_rdc.
        * Converted the N-state model absolute_rdcs.py system test script to the interatomic data design.
        * Created an absolute value version of the synthetic CaM RDC file for the test suite.
        * The rdc.read user function backend now accepts the 'absolute' argument.  This is used to signal that the RDCs are signless absolute values.
        * Created an initial system (and GUI) test for the absolute RDC concept.
        * Added the 'absolute' keyword arg to the rdc.read user function definition.  This will be used to mark RDCs as being unsigned.
        * Merger of the interatomic data container branch (interatomic).
        * Added a new screenshot of the GUI model-free auto-analysis, as it is now quite different.
        * Added a wizard graphic (SVG form) for the 13C-1H dipole-dipole pair.
        * A number of the generic_fns.mol_res_spin functions now accept the pipe argument.  These include name_spin(), set_spin_element(), and set_spin_isotope() and this allows the functions to operate on any data pipe.
        * The dipole_pair.define user function backend now can handle the pipe argument.  This allows it to operate on an alternative data pipe.
        * The State.test_old_state_loading() GUI test now checks the loaded data to a small extent.
        * Better backwards compatibility of old relax results and state XML files for the interatomic design.  The MoleculeContainer._back_compat_hook() method has been shifted into the Relax_data_store._back_compat_hook() method.  This allows the spin containers with attached protons to be converted (with new spin containers for the attached protons added) after loading of the XML state.
        * A small speed up for the model-free duplicate_data() function.  This is used in model selection.
        * The generic_fns.mol_res_spin.index_molecule() function now handles no molecule name given.  If no name is given and only a single molecule is in the current data pipe, then the index of 0 will be returned.
        * The sequence.attach_protons user function now ignores spins with pre-existing attached protons.
        * Improvement for the generic_fns.interatomic.return_interatom_list() function.  The spin ID matching is now through the id_match() function, allowing unique but different spin IDs to be used.  This now matches the return_interatom() behaviour.
        * The relax_io.read_spin_data() function can now handle spin IDs in quotes.
        * The Scientific Python structural object are_bonded() now uses 2.0 Angstrom as a cutoff radius.
        * Added the are_bonded() and get_molecule() methods for the Scientific Python PDB reader.  This is now needed for defining interatomic vectors in the interatomic data design.
        * Expanded the Interatomic.test_manipulation system test to demonstrate a few current failures.
        * Some changes to the Interatomic.test_manipulation system test to better test selection/deselection.
        * The interatomic test suite scripts are now GUI tests as well.
        * Created the new Interatomic system test class for testing out the interatomic data containers.
        * The rdc.read user function can now handle spin IDs in quotation marks.
        * Interatomic data containers can now be selected and deselected.  The user functions select.interatom and deselect.interatom have been created mimicking the equivalent select.spin and deselect.spin functions.  Each interatomic data container now has a select flag.
        * Modified the interatomic_loop() function so that spin IDs can be used to restrict the looping.
        * Modified InteratomContainer.id_match() to handle a single spin ID and to match to all unique IDs.  This uses the spin container _spin_ids list private metadata structure.
        * Split the return_interatom() function into two.  The new return_interatom() function is used for returning single interatomic data containers for perfect matches, whereas the return_interatom_list() function is used to return a list of containers matching a given spin.  This simplifies the behaviour of the module.
        * The RelaxNucleusError and RelaxSpinTypeError can now have the spin ID supplied.
        * Bug fix for the dipole_pair.unit_vectors user function positional checking.  The arg_check.is_float() function needs the raise_error flag turned off.
        * dipole_pair.unit_vectors now raises a RelaxNoInteratomError if not interatomic data is present.
        * The specific API base skip_function() method now returns False.  This was previously raising a RelaxImplementError, but as Monte Carlo simulations now require this function, but returning always False, all analyses will be automatically supported.
        * Eliminated all of the bond length and heteronucleus type value.set units tests.  These are no longer specific analysis parameters.
        * Removed all of the unit tests of the deleted structure.vectors user function.
        * The model-free data_init() method now sets boolean parameters to the default of False.  This excludes the selection flag which is set to True.  The data_init() method no longer uses the data_names() API method but the self.PARAMS.loop() method for returning the parameter names.
        * Improvements for the reading of old 1.2 relax results files for the attached proton spin containers.
        * Improvements and fixes for the generic_fns.relax_data.pack_data() function.  This affects all the relaxation data reading user functions.
        * The structure.get_pos user function now prints out all data and fails if nothing was extracted.  This is to prevent the user from going too far without realising that something is wrong.
        * More print outs and better data loading checks in the dipole_pair user functions.
        * The relax_data.read user function now prints out all of the data read in.  This is to better inform the user that something has happened.
        * The return_spin_from_selection() function now lists all matching spins in RelaxMultiSpinIDError.
        * The return_spin() and return_spin_from_selection() functions can now handle multiple spins.  It the 'multi' flag is supplied, then lists of spins (and associated data) will be returned, rather than a RelaxMultiSpinIDError error raised.
        * Created the list_to_text() RelaxError system function for prettifying the output of RelaxMultiSpinIDError.
        * Expanded RelaxMultiSpinIDError to be able to print out a list of all the matching spin Ids.
        * Improvements for the MoleculeContainer backwards compatibility hook for the creation of proton spins.  The proton element and isotope type is now set to 'H' and '1H' respectively.  This now means that the old XML files require less work by the user to convert to the new interatomic data design.
        * Eliminated the RelaxProtonTypeError error and changed the RelaxSpinTypeError message.
        * The sequence.attach_protons user function now sets the proton element and isotope types.  This reduces the amount of work required from the user.
        * Rearranged the spin.element user function arguments.
        * Created the sequence.attach_proton user function.  This will be useful for analyses which are missing structural data.
        * The dipole_pair user functions now fail if nothing could be done.  This is for the dipole_pair.define, dipole_pair.read_dist, and dipole_pair.set_dist user functions.
        * The Monte Carlo select_all_sims() function is now using the specific skip_function().  This is needed for recreating model-free simulations as deselected proton spin containers now exist.
        * The MoleculeContainer XML backwards compatibility hook now deletes the spin 'r_err' and 'r_sim' vars.
        * Added a backwards compatibility hook for converting old XML files to the interatomic data design.  This will convert the variable names, deleting the old, and create proton spins and interatomic data containers populating them with the old spin parameters.
        * Added a verbose flag to the generic_fns.dipole_pair.define() function.
        * Added a check to the model-free overfit_deselect() to see if a relaxation mechanism is present.
        * Expanded the functionality of the generic_fns.interatomic module.  The copy() and exists_data() functions have been added to copy all interatomic data from one data pipe to another and to check if interatomic data exists within a data pipe respectively.  The create_interatom() function now also accepts a 'pipe' argument so that non-current pipes can be used.
        * Created the RelaxInteratomError and RelaxNoInteratomError classes for interatomic data errors.
        * The interatomic data container now has the dipole_pair flag initialised to False.
        * Expanded the return_interatom() function to handle a single spin ID.  This function now returns a list of matching interatomic data containers.
        * Modified the check_args() method of the dauvergne_protocol model-free auto-analysis for the new data.  The heteronuc_type and proton_type are now in the spin's isotope variable, and the bond length 'r' is now the interatomic distance variable 'r'.  All spin containers and interatomic data containers are being checked.
        * Expanded the RelaxNoValueError to handle one or two spin IDs as arguments.  This is to better identify which spins or interatomic data containers are deficient.
        * The nuclear isotope is now defined via spin.isotope.
        * Eliminated a number of the specific API parameters relating to dipole-dipole interactions.  These are now provided by the spin.isotope user function and the dipole_pair user functions.  The eliminated parameters are: 'r' - replaced by dipole_pair.set_dist or dipole_pair.read_dist, 'xh_vect' - replaced by dipole_pair.unit_vectors, 'heteronuc_type' - replaced by spin.isotope, 'proton_type' - replaced by spin.isotope, and 'attached_proton' - replaced by dipole_pair.define.
        * Created the spin.isotope user function.  This is designed to be a permanent replacement for the specific analysis API 'heteronuc_type' and 'proton_type' parameters.
        * Added the nuclear symbol as a wizard graphic.
        * Added a set of icons for nuclear or isotope related usage.
        * Deletion of the structure.vectors user function as it has been superseded by dipole_pair.unit_vectors.  Only the user function definition has deleted - the backend code will remain so that it can be used internally.
        * Implemented the dipole_pair.unit_vectors user function backend.  This code originates from the generic_fns.structure.main.vectors() function (the structure.vectors user function backend).  The dipole_pair.unit_vectors user function is designed to replace structure.vectors.
        * Created the dipole_pair.unit_vectors user function definition.
        * Created the backend of the dipole_pair.read_dist user function.
        * Created the dipole_pair.read_dist user function definitions.  This new user function is for simplifying the loading of many different interatomic distances into relax.
        * Created a set of icons for the dipole_pair user functions.
        * Shifted the relax_data.dipole_pair user function into the new dipole_pair user function class.  This has also been split into two new user functions:  dipole_pair.define used to set up the magnetic dipole-dipole interactions, and dipole_pair.set_dist used to set up the r^-3 averaged interatomic distances.
        * The relax_data.dipole_pair backend now uses the direct_bond flag.
        * Added CONECT records to the sphere.pdb file to allow connectivities to be more easily determined.  This is for the internal reader, as the current algorithm for finding attached atoms is distance based, and as all N atoms of all residues are at [0, 0, 0], this algorithm fails.
        * Implemented the are_bonded() structural API method for the internal structural object.
        * Created the structural API base are_bonded() method - this is for determining if 2 atoms are bonded.  This is a method stub which raises a RelaxImplementError.
        * Started to add the backend of the relax_data.dipole_pair user function.
        * Shifted the dipole-dipole graphics to the Wizard directory, as this is a wizard graphic.
        * Created graphics for the magnetic dipole-dipole interaction.
        * Removed the bond length from the model-free parameter list.
        * The bond length setting via value.set has no been merged into relax_data.dipole_pair.  This averaged length is dipole-dipole distance and does not need to be a model-free parameter.
        * Added the definition for the new relax_data.dipole_pair user function.
        * Started to change the structure.vectors backend to handle two spin IDs.
        * Expanded the description of the negative gyromagnetic ratio flag for the rdc.read user function.
        * Created the generic_fns.interatomic.interatomic_loop() generator function.
        * The generic_fns.interatomic.create_interatom() function now returns the created container.  This comes from the InteratomicContainer.add_item() method which now also returns the container.
        * Renamed the interatomic function return_container() to return_interatom().  This is to make the name more unique.
        * Shifted some code from InteratomList.add_item() to generic_fns.interatomic.create_interatom().  This is to break a circular import problem.
        * The rdc.read user function backend is now adding the RDCs to the interatomic data containers.
        * Created the generic_fns.interatomic.create_interatom() function for creating interatomic data containers.
        * Added checks to the InteratomList.add_item() method to make sure that the spin IDs already exist.
        * Created the generic_fns.interatomic module and added the return_container() method.
        * Created the InteratomContainer.id_match() method for checking the spin IDs in both directions for a match.
        * Created the interatomic data list and containers, and added these to the data pipe structures.  This is modelled on the molecule/residue/spin structures.  The new containers have is_empty(), from_xml() and to_xml() methods and should be fully functional with the relax infrastructure.
        * Improvement for the RelaxNoVectorsError class - the data pipe name is now optional.  The print outs have been improved as well.
        * The spin container hidden objects are now replicated when the object is copied.  The old Prototype.__deepcopy__() method was skipping all hidden objects, but now only objects starting with '__' are skipped.
        * Created a system test to replicate Romel Bobby's bug #19887.  This is the bug report at https://gna.org/bugs/?19887.
        * Modified the working of the n_state_model.elim_no_prob backend.  This user function is not functional anyway and is not tested by the relax test suite, but will remain as it might be useful in the future.
        * Added the consistency testing documentation to the grace.write and value.* user functions.
        * Converted the consistency testing documentation strings to the Uf_tables and Desc_container design.  This is needed to use the consistency testing documentation within the user function help system.
        * The sequence.read user function now fails with a RelaxError if no sequence data was loaded.  This is for better user feedback.
        * Creation of a fast molecule, residue and spin data lookup framework using private metadata.  This consists of two elements:  The already existing private lookup table now at cdp.mol._spin_id_lookup which is a dictionary with spin IDs as keys and a list of molecule, residue and spin indices as values;  and a set of private variables within the molecule, residue and spin containers which identify the parent container names, numbers and indices.  As all data is private,it will not be visible to the user or be saved in the XML results and save files and should be considered volatile.  All this private metadata is kept up to date via the two new generic_fns.mol_res_spin functions metadata_prune() and metadata_update().  For fast operation, these methods can update specific container subsets via the mol_index, res_index and spin_index arguments.  All parts of relax which modify the data pipe's molecule, residue and spin data structure (the generic_fns.mol_res_spin functions and test suite) call these two functions as needed.  Two auxiliary functions spin_id_variants() and spin_id_variants_elim() have been added to create all possible matching spin ID strings for a given spin (the second created IDs strings which should no longer exist).  The speed ups from this change are significant.  On one system, the system and unit tests decrease from 492.8s/26.4s to 434.3s/25.1s.  On another the decrease is from 330.7s/17.4s to 258.9s/15.4s.  In addition, the pipe argument has been added to the generic_fns.mol_res_spin functions create_molecule(), create_residue(), create_pseudo_spin() and create_spin().  Also, the molecule name will now always be a string.  Previously this was allowed to be an integer.  This is needed for the private metadata functions to operate correctly.   A number of unit tests have been updated for the changes.
        * Removed a hack from the generic_fns.relax_data.pack_data() function for the BMRB support.  This calls the generic_fns.bmrb.generate_sequence() function.  As non-BMRB code paths access the pack_data() function, this is a nasty hack which would have caused problems in the future.
        * Removal of a hack from the generic_fns.bmrb.generate_sequence() function.  This hack was for naming unnamed spins.  But this is not needed as the generic_fns.mol_res_spin.create_spin() function already does this but with many more safety checks.
        * The spin ID lookup table has been made private so that it is not included in the save files.
        * Update and clean up of the model-free LaTeX table generation script.
        * Created the generic_fns.mol_res_spin.return_spin_indices() function to return the index triplet.  This allows a spin ID to be converted into the molecule, residue and spin indices.
        * The generate_spin_id() function now choses to use the spin name instead of number by default.
        * Renamed return_spin_from_id() to return_spin(), and return_spin() to return_spin_from_selection().  This shaves off a number of seconds from the system test - the look up table speed ups will come with support in the other mol_res_spin module functions.
        * return_spin_from_id() now defaults to return_spin() when the spin ID is not in the lookup table.  The slower return_spin() method will allow return_spin_from_id() to always be functional.
        * Added the 'pipe' argument to generic_fns.mol_res_spin.return_spin_from_id().  This is to mimic the return_spin() function.
        * Created generic_fns.mol_res_spin.return_spin_from_id() for returning spin containers from spin IDs.
        * generic_fns.mol_res_spin.create_pseudo_spin() is now adding data to the spin ID look up table.  To support this, the return_residue() method now takes the 'indices' argument and returns the molecule and residue indices.
        * Started to fill up the spin ID look up table.  The index_molecule() and index_residue() functions have been added to determine the MoleculeList and ResidueList indices of given molecules and residues.  These are used by the create_spin for efficiency and to allow the indices (together with the spin index and spin ID string) to be assembled into the look up table.  This table is not used anywhere yet.
        * Initialised a look up table in the cdp.mol structure for faster spin access.  This look up table will be slowly transitioned to, and should significantly speed up certain operations.
        * Created the gui.misc.bitmap_setup() function for handling bitmap alpha correctly on operating systems.  This function is required to handle alpha in bitmap on MS Windows so that regions with partial transparency are not blended into the default dark grey colour of Windows' windows.
        * Added the status/weather-snow-scattered-night Oxygen icon as a wizard graphic for the temperature uf.
        * The about model-free dialog no longer has grey at the bottom in MS Windows.  The wx.ScrolledWindow.GetScrollPixelsPerUnit() function is now used to determine how many pixels the y scrolling is, and rounds up the virtual size based on that.
        * Improved the debugging drawing for the about GUI elements.
        * Hack for the relax_fit C module compilation to detect supported CPUs for Mac OS X cross compilation.


    Bugfixes:
        * Bug fix for the model-free GUI auto-analysis GUI test on MS Windows - the wizards for the CSA value and nuclear isotopes were experiencing racing conditions on MS Windows.
        * Bug fix for MS Windows for the deletion of temporary files in the system tests.  For certain Windows/Python combinations, a WindowsError was being raised saying that the file cannot be deleted as it is being used by another process.
        * Fix for the reporting of skipped GUI tests.  The Frame_order tests skipped because of the missing Scipy module were been labelled as system rather than GUI tests.
        * The GUI show_pipe_editor() method is now the place where the methods are registered with the observers.  This is a partial bug fix for the GUI tests.  The hiding mechanism of the window with unregistration requires this.
        * Bug fix for the pipe editor window hiding and restoring.  All of the Pipe_editor.Show() method has been shifted into the GUI show_pipe_editor() method.  This is needed for the technique of unregistering with the observer objects when the window is closed via a Hide() call.
        * Fix for the State.test_load_state_no_gui() GUI test for handling pipe bundles.
        * Redesign of the setUp() and tearDown() methods of the GUI tests.  This is needed as the current design does not work under MS Windows.  Instead of created a new wx app for each test (this dies in Windows as it looks like only a limited number of toolbars can be created), only one app is created and is recycled.  This design better mimics GUI usage anyway.  This change uncovers a few GUI bugs not caught by the previous design.
        * Bug fix for the GUI test suite setUp() method.  The observer objects are reset at the start to get around a bug when the setUp() method fails for a previous test.
        * Bug fix for the running of the GUI tests on Mac OS X - the relax GUI 'app' needs to be deleted after each test.
        * Bug fix for the Dead_uf_pages.test_mol_create() GUI test for MS Windows.  The _execute_uf() method is now used instead of simulating _ok() calls.
        * Bug fix for the GUI tests on MS Windows.  The GuiTestCase._execute_uf() method now prevents the wizard from running when calling the GUI user function by setting the wx_wizard_run argument to False.  This allows the wizard _ok() call to function on Windows.
        * Bug fix for the Palmer system tests for the changed spin ID syntax.  The spin Gly 2 can no longer be selected with ':2&:Gly', the '&' symbol is not allowed here.
        * Bug fix for the Value GUI input element for integer values.  This is only uncovered when remotely running the GUI - e.g. through the test suite - and an integer value is set.
        * A final fix for bug #19887 (https://gna.org/bugs/?19887).  Now a RelaxError is raised if the number of peak intensities is not the same for all spins.  This occurs in the relaxation curve-fitting overfit_deselect() method.
        * Partial fix for bug #19887 (https://gna.org/bugs/?19887).  The problem is that the number of peak height values was not the same for all spins.  The error message was being caused by the math_fns.relax_fit C object 'setup' function being feed in incorrect values, causing relax to fail directly after the setup() call in specific_fns.relax_fit.minimise().  The number of points was being taken from cdp.relax_times, but in the Relax_fit.test_bug_19887_curvefit_fail system test, one of the 3 spins has 4 points rather than 5.  Now the correct number is sent into setup().
        * Fix for reading of BMRB CSA saveframe data - spin IDs generated from the data now have molecule info.  This is problematic only in certain edge cases, for example a multi-molecule entry.
        * Bug fox for the generic_fns.mol_res_spin.return_spin_indices() function.  The selection object was using the wrong variable name, and the look up table fallback was always on.
        * Bug fix for the relax_data.copy user function - it can now handle spins without relaxation data.
        * Bug fix for the grey about windows on MS Windows.  All the about windows were grey.  The temporary wxPython 2.9.3.1 fix was breaking the Windows GUI.
        * Bug fix for the model-free analysis tab about window - sometimes a grey region would appear at the bottom.  This is a problem in at least GTK+ as scrolling is in increments of 20.
        * Bug fix for sizing of the GUI about dialogs - the virtual sizes are now accurately calculated.  To do this, the window contents (a wx.BufferedDC instance) is created twice, with the virtual window size exactly calculated in the first pass, and then used to set up the device context in the second.  A space is also now added to the end to ensure the border is there.
        * Fixes for the spin.create user function for GUI usage.
        * Fixes for the J(w) mapping and consistency testings scripts so they can run as GUI tests.
        * Fix for the spin.copy user function for GUI use.
        * Bug fix for the return_spin_from_selection() function for the 'multi' flag.  This function needs to handle the case of no spins matching the selection!
        * Bug fix - the spin_id arg for the relax_data.read user function now actually does something.  This argument is passed into the pack_data() function, where it is used to match against the spins matching each file line.  Only if there is a match, is the relaxation data loaded for that spin.
        * Fixes for the reading of relax 1.2 results files.  The new 'H' spin containers are now deselected, and the simulation structure creation has been reverted.



Version 2.0.0
(12 June 2012, from /trunk)
http://svn.gna.org/svn/relax/tags/2.0.0

    Features:
        * A complete restructuring of the user functions - all user functions are automatically generated within all user interfaces (UIs) including the prompt and script UI, and the graphical UI (GUI).
        * The user functions now have special definitions in the 'user_functions' directory making it very simple to add or modify user functions.
        * Big improvements to the help system in the prompt UI mode.  This is now automatically generated when accessed by the user.  Bold font is now used for section titles and keyword arguments, the user function class documentation has been expanded and is now related to the functionality, the user function representation printout is cleaner, and the text is now wrapped for better display on all operating systems.
        * Automatic creation of the "Alphabetical listing of user functions" chapter of the relax manual from the user function definitions.
        * The analysis specific API of the specific_fns directory has been redesigned to extensively use the parameter list objects.  Many API base methods will now automatically work with the parameter list object, removing the need for a analysis specific implementation.
        * The GUI test suite has been significantly expanded.  The system test relax scripts can now be used as GUI tests - the user functions are executed through the self._execute_uf() method which allows execution within all UIs, testing out the different code paths.
        * The specific and GUI tests can now be executed by group.  For example all the model-free system tests can be run with '$ relax -s Mf'.  This is very useful for relax development.
        * The XML formatted results and save files has been redesigned (it has improved, is more accurate, is easier to read in Python version 2.7.3 and above, and contains more metadata) and is now at version 2.
        * The printouts of spin specific data has improved with the addition of an automatic column width algorithm.
        * The addition of a new concept called data pipe bundles - related data pipes can now be grouped together into bundles.  For example in the dauvergne_protocol model-free auto-analysis, all internally generated data pipes are grouped together in the same bundle.
        * Each GUI analysis tab is now associated with a unique data pipe bundle rather than a dedicated data pipe.  This allows for better data pipe handling.
        * Improved BMRB support.  The 'File->Export for BMRB deposition' menu has been added to the GUI which opens a special BMRB export window.
        * More metadata is now read from the NMR-STAR files into the relax data store.
        * The bmrb.display user function is now operational.
        * Big redesign of the Spectral_error_type_page wizard page used in the auto NOE and Rx analyses - this now includes the full description of the spectrum.error_analysis user function, so that the user has easy access to a description of how peak intensity errors and handled.
        * Mac OS X font size and text layout improvements in the GUI.
        * Improvements to the spacing at the top and bottom of the list GUI elements - this includes a spacing before the bottom buttons.
        * The relaxation data 'Add' button in the model-free GUI analysis tab is now a multi-page wizard which allows all of the relaxation data metadata to be input.
        * The model-free GUI analysis tab now has a 'View metadata' button for opening a window displaying all metadata associated with the relaxation data.
        * The model-free GUI analysis tab now has a button for loading relaxation data from Bruker Dynamics Centre files.


    Changes:
        * Spun out the automatic column width formatting code from relax_io.write_spin_data() to write_data().
        * Used some colour for the relax GUI terminating print out asking for citations.
        * The completion of the test suite in the GUI mode now sets the controller main gauge to 100%.
        * Added checks to the BMRB export to make sure all necessary data has been input.  If not, then the Missing_data dialog will be presented to the user to explain what is required.
        * The Missing_data dialog can now have the parent wx element specified.  This is needed when launched from a child window such as the BMRB export window.
        * Improved the robustness of the bmrb.write user function for missing data - this is in the generic_fns.diffusion_tensor.bmrb_write() function, and is for missing atomic information required for the Tensor_list saveframe.
        * The bmrb.read user function is now reading in all of the relaxation data metadata into the data store.
        * Improved the robustness of the bmrb.write user function for missing data - this is in the generic_fns.relax_data.bmrb_write() function, and is for missing atomic information related to relaxation data.
        * The bmrb.read user function is now extracting the thiol state of the molecule.
        * BMRB improvements - the molecule type is now read from the entity record and stored in relax.
        * Added more display tests for the BMRB system test script.
        * BMRB output improvements - deselected spins are no longer skipped and the model-free BMRB output is also more robust to missing data.
        * More extensive testing of the bmrb user functions.
        * Added a call to the bmrb.display user function in the bmrb_rw.py test suite script.
        * Shifted the GUI user function page _format_table() and _table_line() methods into the misc module.  These are now the gui.misc.format_table() and gui.misc.table_line() functions, allowing the code to be used in other parts of the GUI.
        * Decreased the size of all the GUI auto-analysis wizards to fit in a 1024x768 screen.
        * Created a small molecule wizard graphic for the structure.read_xyz user function.
        * Refinement of all of the GUI user function wizard sizes.
        * The default GUI user function description minimum height has been increased to 300 px - removing a lot of scrolled descriptions automatically.
        * Increased the default size of the GUI user functions.
        * Spacing and layout improvements for the GUI user function descriptions.
        * The dauvergne_protocol sample script initial pipe name has been modified to include the pipe bundle.
        * The GUI now sends the pipe bundle name into the relax_fit and noe auto-analyses.
        * The relax_fit and noe auto-analyses now centre around the pipe bundle rather than data pipe name.
        * The about dialog now used the gui.fonts module - this allows the fonts to scale to a decent size on Mac OS X, so that the text is readable.
        * Added a set of roman fonts to the gui.fonts module - this will be used by the about dialogs.
        * Font size improvements for Mac OS X - the fonts are now roughly the same size as on GNU/Linux and MS Windows.  An operating system specific font scaling is now used, with the Mac OS X fonts each being increased by 2 pixels.
        * The dauvergne_protocol auto-analysis now adds the pipe bundle name to all created pipes as a suffix.  This is to uniquely identify the data pipes, and to allow more than one model-free analysis to be executed per relax instance (useful for the GUI).
        * The analysis wizard now suggests the starting data pipe to be named 'origin - ' + pipe_bundle - this allows unique data pipe names for each analysis.
        * Temporarily disabled the Mac OS X task bar icon as it is currently horribly broken in wxPython 2.8 and 2.9.
        * Renamed the GUI toolbar() method to build_toolbar(), as the toolbar object is also called 'toolbar'!
        * Updated the relaxGUI splash screen copyright notice.
        * Improved the button size and spacing in the list GUI elements.
        * The bmrb.write user function now adds the file to the cdp.result_files list and notifies observers.
        * Converted all of the list GUI element 'stretch' args to 'proportion' - instead of a flag, this is now the direct window proportion parameter used in the wx.Sizer.Add() methods.  This has been changed in the BMRB export window so that the central molecule list GUI element is half the size of the others.
        * Created the BMRB export window - this includes the following elements:  A title with description and BMRB icons; the data pipe selection element; the relaxation data meta data GUI element; the molecule list GUI element; the software list GUI element; the script list GUI element; the citation list GUI element; buttons for previewing, exporting, and cancelling.
        * The action_export_bmrb() method now opens the BMRB export window.
        * The base list objects are now updated when pipe changes occur.
        * Created a 100x100 version of the BMRB logo - this will be used for the export window.
        * The spin viewer window now uses graphics.fetch_icon() and shows the button text in the toolbar.
        * Added the mimetypes/text-x-texinfo.png Oxygen icons.  This is for the relaxation data metadata button.
        * Merged the spectrum list GUI element into the base list element.
        * Merged the relaxation data list GUI element with the base list element.  The base list element now has a delete() method, though I'm not sure if it is ever used.  Now all list GUI elements are derived from the Base_list class.  This will simplify changing or improving all of these elements.
        * The base list element now has an Enable() method which simply enables or disables all buttons (as is done in the relaxation data list).  The button size is now specified as a (x, y) tuple.  And the GUI object can now be passed into the elements, as this is needed for the relaxation data metadata window.
        * Large simplifications of the relaxation data metadata list GUI element by using the Base_list class.
        * Modified the molecule list GUI element to use the Base_list base class.  The base list GUI element has also been updated to support popup menus and to change the StaticBox label upon updates.  The base is_complete() method has also been added to always return True.
        * Small updates to the base list GUI element.
        * Created a GUI element for listing and setting the citations relevant for the analysis - this will be used in the BMRB export window.
        * Created a GUI element for listing and setting the scripts used in the analysis - this will be used in the BMRB export window.
        * The GUI user functions now have a subtitle at the top stating the name of the user function - this is to reinforce the user function naming system to the user, and also to clearly identify which window belongs to which user function.
        * Split the software GUI element into the base_list base GUI listing element - this base class will be useful for abstracting many of the list GUI element methods.
        * Created a GUI element for listing and setting the software used in the analysis - this will be used in the BMRB export window.
        * Created a GUI element for listing and setting molecule attributes - this will be used in the BMRB export window.
        * The lists in the GUI user function descriptions are no longer separated by blank lines - this allows long lists to fit much better into the wizard windows.
        * More improvements for the bmrb user function definitions.
        * The GUI user function objects can now be called with the wx_wizard_sync and wx_wizard_modal args.  This is used to force the user function to operate synchronous or asynchronous mode, or to force the user function wizard to be modal.  This will allow a number of hacks to be avoided throughout the GUI.
        * Added a check to the bmrb.write user function to see if the file name has been supplied.  This results in a nicer message for the GUI.
        * The bmrb.display and bmrb.write user functions now have the version defaulting to 3.1.  The choices are now also restricted to 2.1, 3.0, and 3.1.
        * The user function wizard pages now have an on_back() method which unregisters the observer.  This is needed as going back previously did not unregister the observer the object, hence going forwards after going back would fail.
        * The wizard now has an on_back() method available to perform actions when going back.  The on_next() method has been fixed in that it is called even when the page is skipped.
        * Activated the apply and skip buttons in the relaxation data GUI element data reading wizards.
        * The relaxation data 'Add' and Bruker 'Add' buttons now launch wizards whereby the first page is the original relax_data.read or bruker.read user functions, but then this is followed by the relax_data.peak_intensity_type, relax_data.temp_calibration and relax_data.temp_control user functions.  This allows the metadata to be set up prior to the model-free calculations.
        * The relax_data.delete user function now removes all of the metadata associated with the ID.
        * Changes to the relaxation data GUI element button layout.  The buttons are now all of the same width, and the metadata button is now last.
        * The relaxation data GUI element now has a button for opening the relaxation data metadata element.  This 'View metadata' button will launch the new Metadata_window wx.Frame.  This window contains the relaxation data metadata GUI element stretched to fit the window.
        * The relaxation data metadata list GUI element now can stretch to fill the parent, if asked.  This will be used when the list is embedded within a window by itself.
        * Created a GUI element for displaying and editing the relaxation data metadata.  This is very similar to the relaxation data list GUI element, and it will be used in the BMRB export.
        * Refinement of the relax_data.peak_intensity_type user function definition.
        * Big expansion and improvements of the relax_data.temp_control user function definition.  There are also a few edits of the relax_data.temp_calibration definition.
        * Created a 200x200 pixel version of the status.weather-clear Oxygen icon.  This is for the relax_data.temp_calibration and relax_data.temp_control user function wizards.
        * Big expansion and improvements of the relax_data.temp_calibration user function definition.
        * Improvements for the Force_true object for the 'force flag' user function argument types.  This invisible GUI element can now have its value set.  The SetValue() method will internally store the value, and GetValue() will then return this value.  The initial value is True.  This allows the BMRB GUI tests to pass again.
        * The spin.name and spin.element user functions in the BMRB system and GUI tests now use the force flag set to False.  This is to try to replicate the old behaviour of the test and to allow it to pass again.
        * The BMRB icons now also have transparent backgrounds.
        * Made the background of the BMRB wizard graphic transparent - this just looks better.
        * Created a menu entry called 'File->Export for BMRB deposition'.
        * The spectrum and relaxation data list GUI elements now use graphics.fetch_icon for all icons.
        * Renamed some of the methods in the relaxation data list GUI element.
        * The spectrum and relaxation data list GUI elements now use the user function definitions for icons.
        * Changed the relax_fit.relax_time icon to the actions.chronometer Oxygen icon.
        * Added the chronometer.png Oxygen icon.
        * Large expansion of the pop up menu for the spectral list GUI element.  This now includes most of the spectrum and relax_fit user functions.
        * Added accelerator keys for all of the spin viewer window tree pop up menus.
        * Large expansion of the pop up menu for the relaxation data list GUI element.  This now includes most of the relax_data user functions.
        * Implemented the relax_data.frq and relax_data.type user function definitions and backends.
        * Created the Relax_data.test_reset() system test for testing relax_data.frq and relax_data.type.
        * Big reworking of the spin viewer window tree element.  Many new pop up menu entries have been added covering almost all of the molecule, residue, and spin user functions.  The methods bound to the pop up menu entries have all been renamed to 'action_'+type+'_'+user function name.  And the residue and spin changes checking has been fixed to include checks for the naming and numbering.
        * Set the force flag args for a few spin and residue user functions to the 'force flag' arg type.
        * The molecule.name and molecule.type user function force args are now of the 'force flag' arg type.  This hides the arg in the GUI.
        * Added support for the user function arg type 'force flag' to the GUI user functions.  This arg type will, in the GUI, always return True.  This is because a user clicking on 'Ok' or 'Apply' is essentially saying that this operation should be performed.  The special Force_true class was created for these arguments which simply ignores SetValue() calls and always returns True from GetValue() calls.
        * Formatting fixes for the molecule.create user function definition.
        * The relax save and results XML files now include subversion details in the <relax> tag.  This indicates the repository version and the URL, allowing for better debugging.
        * The 'relax --version' print out now includes the full subversion info, if it is a checked out copy.
        * Improvement for the model-free auto-analysis in the GUI.  After execution, the main data pipe of the analysis tab is now set to the 'final' data pipe generated by the dauvergne_protocol.  This means that when switching between analysis tabs, that going back to the model-free tab will make the 'final' data pipe the current one, rather than the data pipe used to initialise the analysis.
        * Better handling of the GUI wizard termination.  The _handler_close() method is now handling the close events and together with the _ok() method,both now execute the current page's on_next() method.  This means that on_next() is called for all avenues for exiting the wizard.  This allows the user function pages to unregister themselves with the observer objects.
        * The wizard window _cancel() method now calls the current page's on_next() method.  This allows the page to clean itself up.
        * The GUI analysis pipe_deletion() method now works with pipe bundles instead of pipe themselves.  This is because the analysis tabs are now associated with the bundles rather than pipes.
        * The 'bundle' arg is now functional in the model_selection user function back end.
        * Added the 'bundle_to' arg to the pipe.copy user function back end.  This arg is now functional.
        * The dauverge_protocol auto-analysis now uses the new 'bundle' user function args.  This is used in the pipe copying to place the newly created pipe and in the model selection, both so that all pipes created during the analysis are located within the pipe bundle reserved for that analysis.
        * The GUI user function window titles are now set to the 'title_short' value.  This is because the long title can be far too long for a GUI window title!
        * The long title or synopsis is now added to the GUI user function description text as italic text.
        * Added the 'bundle' arg to the model_selection user function specification.
        * Improvements to the 'bundle' arg specification of the pipe.create user function.
        * Added the new 'bundle_to' arg to the pipe.copy user function.  This will be used to associated a newly copied data pipe with a pipe bundle.
        * Added some backwards compatibility code for old GUI state files missing pipe bundles.
        * Created a GUI test for loading an old relax 1.3 save state containing GUI analyses.
        * Updated the dauvergne_protocol auto-analysis to spawn all pipes into the named bundle.
        * The generic_fns.pipes.pipe_names() function now can restrict the list of names to a specific bundle.
        * The pipe editor window now handles the pipe bundling concept.  There is a new button for the pipe.bundle user function, a new column showing the pipe bundles, and the pop up menu allows pipes to be associated with bundles if not already bundled.
        * The pipe.bundle user function back end now notifies all the pipe_alteration observers of the change.  This is required for proper GUI interaction.
        * Refinements to the pipe.create user function definitions.
        * The GUI analysis tabs now work with data pipe bundles rather than the original data pipe.  The analysis wizard now uses the unique name for the new data pipe bundle field, and the starting data pipe defaults to 'origin'.  The analysis pages show the bundle name rather than associated data pipe.
        * The pipe.delete user function is now cleaning up the data pipe bundles as needed.  The deleted data pipe name is removed from any bundle it is in, and empty bundles are eliminated.
        * Implemented the generic_fns.pipes.has_bundle() function for determining if a bundle exists.
        * Modified the pipe.display user function backend to show the pipe bundles.  This required the addition of the generic_fns.pipes.get_bundle() function.
        * Implemented the pipe.bundle user function, including the full description and the back end.
        * The data store is_empty() method works again - the pipe_bundles structure is now blacklisted.
        * Shifted the pipe bundle graphic and created a wizard PNG file for the GUI user function.
        * Created icons for the pipe bundle concept.
        * Implemented the generic_fns.pipes.bundle_names() function for returning a list of all pipe bundles.
        * The pipe.create user function now creates pipe bundles in the back end.  The new ds.pipe_bundles dictionary is used to hold lists of pipes associated with the pipe bundle name as the dictionary keys.  The 'bundle' arg is passed into the ds.add() method for storage.
        * Added the 'bundle' keyword arg to the pipe.create user function definition.
        * Preparation for the implementation of pipe bundle concept - addition of system and GUI tests.  This new pipe bundling concept is simply a way of grouping data pipes together.  This will be useful for:  grouping and categorisation of data pipes when multiple analyses are performed, the model-free dauvergne_protocol auto-analysis will place all the data pipes it creates into one bundle, for the GUI mode analyses will be linked to pipe bundles rather than data pipes.  This will allow switching data pipes to activate the correct analysis.
        * The 'verbatim' user function description elements are now properly formatted in the GUI.  These elements now use the font.modern_small formatting to have fixed-width characters.
        * Table formatting improvements for the GUI user function descriptions.
        * Improved the whitespace formatting of the spin data write out of relax_io.write_spin_data().  Now the column sizes are dynamically changed to match the data being written out.  This is to fix the ugly write outs for when the name of the molecule is very long.
        * Replaced all mention of 'arguments' from the user function docstrings with human readable text.
        * The state.load user function will now recreate the GUI tabs.  For this, the new state_load observer object has been created.  The GUI analysis load_from_store() is registered with this object.  And to prevent fatal racing in the GUI, the state.load user function operation is now synchronous.  The state.load and state.save file arg defaults are now also set to 'state.bz2'.
        * Removed a printout in the API documentation compilation.
        * All of the user_function.object.Table instances in the specific code descriptions are now private.  This hides them from the specific API, and allows the unit tests to pass.
        * Removed the vertical lines in the tables of the prompt UI help strings.  The tables now look much more professional.
        * The GUI user functions now use the new Desc_container and Table user function classes.  The descriptions for the user function wizard pages are now being taken from the new user_functions.objects.Desc_container objects, lists of which are the user function definition 'desc' objects.  The tables via the user_functions.objects.Table object is being formatted as in the prompt user function help text, though without vertical lines.  The lists and itemised lists are currently formatted the same as in the prompt UI.
        * The Desc_container.element_loop() method can now yield the title too, if asked.
        * Better spacing in the list of tables section of the PDF user manual.
        * Complete rewrite of the docs.latex.fetch_docstrings module.  This is a significant simplification for the creating of the user function documentation within the user manual.  Some of the long list of changes include:  The file docs/latex/fetch_docstrings.py is no longer an executable script and now operates solely as a Python module; all of the original docstring section parsing code has been eliminated; the searching for user functions in the prompt UI namespace has been replaced; the new user function definitions are directly used and the documentation for each user function section generated via the self.build_*() methods; the complicated ascii table parsing and rebuilding into a LaTeX table has been eliminated; the self.write_*() methods have been created for building the various sections of the user function documentation (paragraphs, verbatim text, prompt examples, lists, itemised lists, and tables); tables are no longer duplicated, triplicated, etc. and instead a reference to the first instance of  the table is inserted - this is a significant space saver as one of the copies of the multi-page X11 colour table is removed.
        * Renamed the Uf_tables.add_table() 'title' arg to 'caption', and added the new 'caption_short' arg.  The name change is fairly logical, as this is a caption.  The 'caption_short' arg will be used for the list of tables in the LaTeX user manual.
        * The Molmol colour table is no longer a LaTeX longtable in the user manual.
        * The prompt UI table creation is now using the Table.spacing variable for adding empty lines between rows.
        * The Monte Carlo description now uses an itemised list for the listing of the steps involved.
        * The prompt UI help string construction code is now handling the new Uf_tables singleton.
        * Added a check to Uf_tables.get_table() to make sure that the table corresponding to the label exists.
        * Added a check to Desc_container.add_table() to make sure the label is a string.
        * All of the user function documentation tables now use the new Uf_tables singleton structure.  The special properties for the colour module tables (longtables and now spacing) have been added as well.
        * Created a new way of defining and inputting tables into the user function descriptions.  This introduces the user_functions.objects.Table for holding all the table data and metadata, and the user_functions.data.Uf_tables singleton object for holding all the tables.  This design will allow more metadata (for example using longtables in the LaTeX user manual) to be specified.  The singleton collection of tables with unique labels will also allow the elimination of duplicated tables in the PDF and HTML user manuals.  The new table title metadata will also be used for the table headings in the user manuals.
        * Converted a number of add_verbatim() calls to add_item_list_element() with items of None.  This allows for proper formatting and indentation of equations.  In the future, a possible add_equation() method might be added to provide text and LaTeX representations of equations in the user function documentation.
        * Itemised lists without items are now supported in the prompt help strings.  This is to mimic the LaTeX behaviour to allow lists with no 'bullets'.
        * Shifted the prompt examples to the end of the description for the value.display user function.
        * Converted all of the user functions to use the Desc_container class design.  All of the user function descriptions, prompt examples, and additional documentation scattered around the relax sources have been merged into the Uf_info.desc list of Desc_container objects.
        * The 'prompt_examples' and 'additional' user function structures are no longer passed into the prompt objects.
        * Removed the 'prompt_examples' and 'additional' variables from the Uf_info containers.  These have been superseded by the Desc_container objects.
        * Prompt examples are now followed by 2 newlines in the prompt help strings.  This restores much of the original formatting for these examples.
        * Added support for no spacing in tables for the prompt help strings.  The Desc_container.add_table_titles() method now accepts and stores the 'spacing' arg.  This is passed all the way into the prompt help system to format the tables with.
        * Added a check in the prompt help _build_doc() method for the user function description.  This should, together with the _build_doc() unit tests, help to uncover all unconverted user function 'desc' variables.
        * Created an algorithm for wrapping table columns to fit within status.text_width.  This is for the prompt user function docstring tables.  The columns are now dynamically wrapped so that the table will not be wider than the given width.  For example the value.set user function description table would normally have a total width of 238 characters, but this now fits within one screen of text under all operating systems.
        * Created two unit tests for the _build_doc() methods of the prompt user function objects.  This is for the prompt user function class objects and the user function objects themselves.  The _build_doc() methods are used to generate the prompt help strings.
        * Converted all of the OpenDX user functions to the new Desc_container design.  This tests out the use of 'additional' outside documentation.
        * Improved the user function class prompt help string.  The user function list now uses bold text, and the user function title is also now given.
        * The prompt help string for user function classes now includes info about the member user functions.
        * The Uf_info.uf_loop() method can now restrict the looping over a given user function class.
        * Large improvements to the prompt help strings for the user function classes.  These are now formatted with section using bold text.
        * The user function default args prompt help string text is now wrapped.
        * Removed the starting newline from the user function prompt help string.
        * Converted the calc, grid_search and minimise user function descriptions to use Desc_container.
        * Tables in the user function descriptions are now formatted for the prompt help strings.  This is for the Desc_container objects.  The list of lists are now converted to the text format originally used for the user function docstrings.
        * Converted all of the alignment tensor user functions to the new Desc_container design.
        * Itemised lists and verbatim text are now formatted properly for the prompt help strings.
        * Converted align_tensor.init to the Desc_container object design to test itemised lists.
        * The Desc_container object now supports itemised lists.
        * Lists are now formatted for the prompt user function help strings from the Desc_container objects.
        * Converted the align_tensor.display user function to the new Desc_container design.  This is to test out the list generation.
        * The Desc_container.add_list_element() method now groups list elements together.
        * Converted the prompt user function objects to use the new Desc_container objects for the help strings.
        * Started to redesign the user function definition descriptions.  The desc object has been converted into a list which will contain instances of the new Desc_container class.  This class will hold the description information as blocks of text, including unformatted paragraphs, verbatim text, lists, tables, and relax prompt examples.  The object has a number of methods used for inputting all of the information, as well as extracting it.  The information in the Desc_container object is not formatted, for example tables will be stored as lists of lists.  This will remove the need for parsing list, tables, verbatim text, etc. by the docs.latex.fetch_docstrings module.  But these will need to be recreated for the prompt help strings, for the GUI user function descriptions, and for the user manual.
        * Converted the align_tensor.copy user function description to the new design.  This is a test for the implementation of the description abstraction through the Desc_container objects.  The 'desc', 'additional', and 'prompt examples' will all be merged into one 'desc'structure.
        * Converted a few user functions to use the special "spin ID" arg type.
        * Converted the structure.vectors spin_id arg to the special "spin ID" type.  This is to improve vector loading in the GUI.
        * Increased the size of the unit vector loading wizard in the model-free analysis.  This now matches the structure.read_pdb user function size and allows it to fit.
        * The min length is now handled much better in the Combo_list GUI input element.
        * The GUI user function object create_wizard() method now returns True upon success.  This is needed for calls to these objects.
        * The GUI user functions now called by the results viewer window now have the parent set to this window.
        * The GUI user function page update_args() method now has a docstring and returns True when successful.
        * Rearranged the spin.name args and converted the spin ID to the special spin ID type.
        * Prevention of multiple RelaxErrors from the user functions.  The update_args() method returns False if an error occurred on updating the list of choices for an arg.  This is now caught by all parts of the code where it is called, preventing further execution.
        * Improvements to the structure.load_spins user function definition.  The spin_id arg now uses the special 'spin ID' arg type for the spin ID GUI input element.
        * A number of improvements for the spin ID GUI input element.  This includes:  the use of SetValue() for strings not in the list of choices; defaulting the choices to ['@N', '@C', '@H', '@O', '@P'] if not supplied; a tooltip white space fix; and removal of the None element in the list of choices, as this is not a read only box.
        * Increased the size of the spin loading wizard to match that of structure.read_pdb.
        * The Value GUI input element UpdateChoices() method now handles non-selection strings in the ComboBox.  The SetStringSelection() method is now only used when the combo default is one of the choices, and SetValue() when not in the list of choices.
        * Decreased the amount of waiting time in the GUI interpreter flush() method.  This will allow speed ups in certain parts of relax (for example some GUI tests).
        * The GUI test _execute_uf() base method now allows the wizard run() method to be executed.  This gives a better work out of the user functions and matches more closely to what a user will experience.
        * Deleted a ton of now unused and useless code from gui.analyses.results_analysis.
        * Print statement conversions to function calls for Python 3.x.  All non-debugging print statements are now function calls.  The debugging printouts have been deleted.
        * Complete redesign and creation of the 2nd version of the relax XML format for save and results files.  This is a BIG set of changes!  It includes the following:  the XML files now have the new 'file_version' attribute within the 'relax' XML element, this is now set to '2', and if unset it is assumed that the file version should be 1; the file_version integer value is now propagated through all of the from_xml() methods so it can be passed into the data.relax_xml.xml_to_object() function - this prevents a mixture of v1 and v2being assumed for different parts of the XML; an XML namespace fix - the xmlns="http://www.nmr-relax.com" attribute is now finally visible; the data.relax_xml.object_to_xml() function has been added for creating the new relax XML syntax - this will handle and convert many more basic Python object types into IEEE-754 byte arrays, for example lists and dictionaries of floats, or numpy vectors and matrices, and this function is now used throughout the code base for converting Python objects to XML; the data.relax_xml.xml_to_object() function has been expanded to match the functionality of data.relax_xml.object_to_xml(); the Python object XML elements now have the 'type' attribute indicating the Python object type - this is important for the processing of the file, especially for handling all types of numpy structures; the Python object value is now stored in a sub XML element called '<value>' - if it is a float, or is a simple type which contains floats, then the sub XML element <ieee_754_byte_array> is created for storing a full precision version of the floats; the v1 and v2 of the format together with the pre- and post-Python 2.7.3 XML toprettyxml() changes are now represented as test_suite/shared_data/model_free/OMP/final_results_trunc_1.3*.bz2 files, and a 5th file is added to test the IEEE-754 conversions by corrupting many of the floats.
        * The arg_check.is_float_matrix() function can now handle empty lists.
        * Deleted the NOE data_names() specific analysis method.  This should operate through the base methods now.
        * Spelling fix - converted the noun 'print out' to 'printout'.
        * Added minimisation parameters to the N-state model specific analysis parameter list.
        * Updated the OMP model-free results file in the test suite shared data directories for recent changes.  The ordering of model-free parameters is slightly different now.
        * The 'select' global param can have a corresponding MC simulation structure.
        * The specific API data_names() method now accepts the 'scope' argument.  This is used to differentiate global verses spin parameters.
        * Lots of improvements for the specification of the model-free global and spin parameters.
        * The specific API param list base_loop() and loop() methods now match against the parameter scope.  This allows for the differentiation of global from spin parameters.
        * Improvements and fixes for the minimisation parameters in the specific API param list object.
        * The specific API param list get_desc() method now skips the error and sim structures.
        * Removed a number of specific API methods from the model-free analysis.  These are now provided by the base class.
        * Large reworking of the specific analysis API.  Many specific methods relating to parameters have been shifted into the API base class.  These include: data_names(), data_type(), default_value(), return_conversion_factor(), return_data_desc(), return_data_name(), return_grace_string(), return_units().  These are now essentially provided by the parameter list object.  All of the global and spin parameter lists have now also been merged into the single 'self.PARAMS' structure.
        * The py_type is now set for the minimisation parameters.
        * Renamed 'param_set' to 'set' in the specific API param list object.
        * Split the specific API parameter object loop() method into two.  The new base_loop() method loops over the parameter names according to set, whereas the loop() method now supports and returns the error and simulation parameter names as well, if set.
        * The specific API param list object now sets up a number of spin params and min params.  The spin 'select' and 'fixed' parameters are set up in the __init__() method, whereas the add_min_data() method will be used to add minimisation parameters.
        * Added the 'scope' arg to the specific API param list add() method.  This will be used to merge the GLOBAL_PARAMS and SPIN_PARAMS lists into one.
        * Created the specific API param list loop() method for looping over parameter names.
        * All the get_*() methods of the specific API parameter list objects now call self.check_param().  This new check_param() method raises a RelaxError if the parameter is unknown.
        * The parameter set 'params' or 'generic' can now be specified in the specific API parameter lists.
        * The GUI tests _execute_uf() base method now simulates a click on the 'ok' button.  This gives the user function wizards a much deeper work out.
        * Renamed the Python type arg from 'type' to 'py_type'.
        * Added the 'min_stats' flag to the specific API parameter list objects.  This indicates if the minimisation statistics are part of the parameter set.  This is a flag to the __init__() method, as it applies to the entire parameter list.
        * Expanded the specific API parameter list object to include the Python type and error and sim flags.  This includes the addition of the get_err(), get_sim(), and get_type() methods.
        * Created the Dead_uf_pages.test_mol_create() GUI test demonstrating a failure in the user functions.  This mimics a click on the 'ok' buttons, showing a problem with running a GUI user function twice.
        * The relax GUI state_load() method now checks if the data store is empty.  Previously a warning was only giving is analysis tabs are loaded.  Now the warning occurs whenever there is data in the relax data store.
        * Eliminated all of the wizard GUI input methods.  These are now all covered by the gui.input_elements package, so are no longer needed.  The analysis wizard had to be converted to using the package, but the methods are now no longer used.
        * Converted the spin_id_element() wizard method into the gui.input_elements.spin_id.Spin_id GUI element.
        * The gui.string_conv.list_to_gui() function can now handle numpy arrays.
        * The structure.rotate R arg now defaults to the identity matrix.  This is simply for the GUI.
        * The frame order system tests are now being run as GUI tests as well.
        * Converted all of the frame order system test scripts to be executable as GUI tests.
        * GUI test scripts are now executed via prompt.interpreter.exec_script().  This allows the preservation of imports within the scripts.  The old execfile() method was causing the 'globals' to be overwritten, hence imports in the scripts are not visible inside methods or classes.
        * The GUI auto-generated user function SetValue() method now skips function and function arg arguments.  These are not supported in the GUI.
        * Loosened the checking conditions for the test_set_value() J(w) mapping system (and GUI) test.  Just like the consistency testing, the GUI string conversions to and from floats introduces a slight truncation.
        * The consistency testing test_set_value() system (and GUI) test has been made less strict.  The conversion of the bond length and CSA values to GUI strings and back to floats causes a slight numerical truncation.
        * The specific analysis API base return_data_desc() now has a basic implementation.  This will search through the global and then spin parameters objects, returning whatever is found.
        * The specific analysis API base method calls to RelaxImplementError now send in the function name.  This allows for better identification of what needs to be implemented.
        * The specific analysis base API default_value() method is now functional.  Rather than raising a RelaxImplementError, this method now searches in the global parameters then the spin parameters for a default value.
        * Shifted out the interpreter components of the J(w) mapping tests into scripts.  This allows the tests to work in the GUI test framework.
        * Converted the consistency tests script to the new _execute_uf() design.  This allows it to work with the GUI for the GUI tests.
        * The jw_mapping system tests are now run as GUI tests.
        * The user function intro string echoing has been turned back on for the GUI.  The removal of the need for the prompt UI interface for the GUI user functions removed the intro print outs.  These have been reimplemented within the GUI code now.
        * Renamed the status.prompt_intro flag to status.uf_intro.  This is because the flag will be used in all UIs.
        * The sequence.write user function back end now defaults to True for all sequence columns.
        * The grid_search user function inc argument cannot be None.
        * Converted all of the prompt unit tests to the new auto-generated user function design.
        * Updated the model-free auto-analysis GUI test to pass.  Changes include opening and closing the about dialog, loading the sequence via the spin viewer window - testing this GUI element for the first time and the use of the methods behind the specific value.set buttons.
        * The model-free GUI auto-analysis 'About' dialog is now stored as a class instance variable.  This allows it to be manipulated remotely, for example by the GUI tests.
        * The GUI user functions are now going straight to the back end rather than through the prompt.  The GUI user functions were previously passing through the prompt UI user functions for argument checking, which then passed on to the back end.  Now the prompt is bypassed, and the back end is being directly called.  This should speed up the user functions, and specifically the GUI tests.
        * The prompt UI versions of the auto-generated user functions are now stored in self._uf_dict.  This is a dictionary whereby the keys are the full user function names as text.  This is designed for speed, so that the user function object can be retrieved much faster.
        * All the wizard method 'event' arguments have been converted to keyword arguments.  This is for better remote control, for example by the GUI tests.
        * All the model-free GUI auto-analysis method 'event' arguments have been converted to keyword arguments.  This is for better remote control, for example by the GUI tests.
        * Converted many GUI functions expecting a wx.Event to have the event as an optional argument.  These are now keyword arguments defaulting to None.  This allows remote control of GUI elements, which is needed for the GUI tests.
        * Removed the reinitialisation of the relax data store GUI object in the GUI test tearDown() method.  This is not needed as it is done by the data store reset anyway.
        * Removed a time.sleep() call which slows down the GUI tests by a significant amount.  This adds 0.5 seconds per user function which display info.  For example this is 8 seconds for just the Bmrb GUI tests!  This delay is not necessary, so has been eliminated.
        * The user function docstrings are now created when the help system is invoked.  This prevents all user function docstrings from being built at the start, or any time the interpreter class is instantiated.  Instead the docstrings are created on demand.  Therefore for most relax usage, the docstrings for most user functions will be rarely built.  This decreases start times of ~6 seconds down to ~0.06 seconds!
        * The GUI tests are now recycling the GUI user function wizards and pages as well.  This required a number of modifications; the user function object wizard creation has been shifted into the create_wizard() method; the status.gui_uf_force_sync flag has been introduced to force synchronous operation of the GUI user functions; the wx_wizard_run keyword arg has been added to the user function object to prevent the automatic running of the wizard; the GUI test tearDown() base method no longer destroys the GUI or wizards, as they are needed in subsequent tests.
        * Removed the useless GUI interpreter flush() call in the GUI tests base _execute_uf() call.  This is not needed as the GUI user function calls are synchronous.  This cuts the GUI test running time down by about 1/4!
        * The wizards for the individual user function pages are now recycled.  This should speed up the GUI (and the GUI tests massively).  Closing the wizard calls the Close() rather than Destroy() method, so the wizards are still in memory.  A new call to an old GUI user function object will simply call SetValue() for all keyword arg GUI elements, hence reset the element.  The Wizard GUI object has been modified to only add the buttons if they do not currently exist.  Without this, a new set of buttons is added each time the user function wizard appears.
        * The GUI base class now has access to math.pi.  This is necessary as the system test scripts are run in this namespace rather than the interpreter namespace in which pi is defined.
        * The Combo_list GUI input element can now handle values typed out by the user.  This affects both the GetValue() and SetValue() methods.
        * The value.set user function 'param' argument can now be manually set by the user rather than selected.  A number of N-state model parameters require this.
        * Better handling of empty data in the Sequence.GetValue() method.
        * The non-supplied user function arguments in the GUI tests are now set to the default.  This is for the _execute_uf() base method, and is essential for the free file format where the column arguments must, in many cases, be set to None.
        * Updates to the N-state model specific code.  The default_value() and return_data_desc() methods are now defined, and the data_names() method returns a few parameter names.
        * The Sequence.GetValue() method now properly handles the Combo_list and single values.
        * The Combo_list.GetValue() method now returns a proper list of values rather than the string representation.
        * The Value GUI input element UpdateChoices() method now restores the current selection.  This matches the Combo_list GUI element changes.
        * Renamed all of the ResetChoices() GUI methods to UpdateChoices().  This is because they are for updating a list while retaining the current selection.
        * The Combo_list GUI input element ResetChoices() method now remembers the current selection.  This allows the selection to be restored when the element is updated, rather than resetting to the default value.
        * The GUI test _execute_uf() base method now handles non-keyword arguments, by converting them to keyword arguments.
        * All system test scripts are now executed through the base script_exec() method.  This allows them to be run in the GUI tests as well.
        * The execute_uf() method is now private.
        * Added all of the N-state model system tests as GUI tests.
        * Modified the GUI tests so that they can operate in the same way as the system tests.  Now entire test suite classes can be executed in isolation by typing, for example: "$ relax --gui-test N_state_model".
        * Converted all of the N-state model scripts to use the new self._execute_uf() interface.
        * Added some error checking for the system test class execution.  This is for better user feedback for when the user supplied class does not exist.
        * Entire classes of system tests can now executed.  Rather than running the entire system test suite or individual tests, the system tests can now be run by class.  For example to execute all of the N-state model system tests, just type: "$ relax -s N_state_model".
        * Eliminated the self._test_dir test class variable.  The system and GUI tests will now use the same script path.
        * Modified and renamed the self._execute_uf() method so that it will work with the system test scripts.  The file and directory arguments are now merged, as required by the GUI user function pages.
        * Converted the bmrb_rw.py system test script to use the new prompt self._execute_uf() method.  The GUI test framework will need slight modification to use this script directly still.
        * Created a special private method for the prompt/script UIs for executing user functions.  This self._execute_uf() method will be used for the sharing of scripts in the system and GUI tests.
        * Re-factored the system and GUI tests for code sharing.  The GUI tests now can inherit tests from the system tests.  This is done for the BMRB system tests,both of which now run as GUI tests.  For this, a test class specific script_exec() method has been added.  For the system tests, it passes the system tests script into the interpreter.  For the GUI tests, it executes the script using the function locals so that the GUI test execute_uf() method is accessible.
        * Created a pair of Python object to GUI string and reverse conversion functions.
        * Spun out the GUI sting conversion functions from the gui.misc module into the new string_conv module.  This set of functions is now large and diverse enough to justify a separate module, as the remaining three functions of gui.misc have nothing to do with GUI strings.
        * The Sequence GUI element now better handles single values in the GetValue() method.
        * The specific_fns get_specific_fn() function now determines the data pipe type, if not supplied.
        * Improved the value.set user function definitions.
        * The model-free GUI auto-analysis now sets the default value for the parameter buttons.  The CSA, bond length, proton and heteronucleus type buttons now launch the GUI user function with the default value set.
        * The Sequence GUI input element can now handle single values passed into SetValue().
        * The user function page is now updated prior to setting any argument values.  This is necessary for when a value from a pre-defined list is to be selected.  Without the update,the list will be blank and the selection will not work.
        * The user function GUI objects can now be called with their argument values.  This allows the argument to be set upon page creation.
        * The auto-generated file and dir selection dialogs now have wildcards and styles.  This is provided through the new 'wiz_filesel_wildcard', 'wiz_filesel_style' and 'wiz_dirsel_style' user function argument arguments which are then passed on to the file and dir selection GUI elements.  All user functions dealing with files and directories have been updated.
        * Updated the model-free auto-analysis GUI test for the new user function design.
        * The Value GUI element as a ComboBox can now handle input values which are not in the list.  This allows user functions with the 'wiz_combo_choices' argument argument set and the 'wiz_read_only' arg arg of False to function.  This is for the user to select from a list of pre-defined defaults, or input their own value.
        * The GUI tests base execute_uf() method now runs all user functions in synchronous mode.  In combination with the previous gui_raise() change, this allows the GUI tests to actually fail when a RelaxError occurs.
        * The gui_raise() function now simply re-raises the RelaxError when in test mode.  This allows the GUI test to properly fail.
        * Removed all of the dir user function arguments in the BMRB GUI test.  These need to be part of the file argument, as the file and dir arguments are merged into one GUI file selection element.
        * The Combo_list GUI input element SetValue() method now handles single values and lists.  This is required for the GUI tests.
        * The ComboBox data values are now set to the choices in the __init__() method if not given.  This is required by the GUI tests, as the ResetChoices() method which does the same thing has not been called.
        * Shifted the combo_list GUI element into the gui.input_elements package.
        * The NOE auto-analysis GUI test has been converted to the new auto-generated user function design.
        * The NOE auto-analysis peak loading wizard has been converted to the new auto-generated user function design.
        * The prompt-based interpreter no longer sets the status.prompt_intro flag in the __init__() method.  This flag is now set by the instantiation of the singleton status object.  This prevents multiple calls to the Interpreter.__init__() method overwriting this flag.  This fixes problems in the GUI tests.
        * The GUI tests base class execute_uf() method will now try to set all keyword arguments.  This allows the user functions with free file format keyword arguments to be operational.
        * The Combo_list GUI element now handles the wiz_combo_list_min user function argument argument.  If not enough elements are set, Combo_list.GetValue() will return None.  This is caught by the auto-generated GUI user functions on_execute() method, preventing the execution of the user function.
        * The spectrum.replicated user function back end now checks for lists of None or of 1 element.
        * Renamed the user function argument argument wiz_combo_list_size to wiz_combo_list_min.  This will be used by the Combo_list object to ensure a minimum length.
        * The Rx auto-analysis peak loading wizard has been converted to the new auto-generated user function design.
        * Individual elements of the Sequence and Combo_list GUI element can now be set via the SetValue() method.  The Sequence.SetValue() method now accepts the index arg, and this is passed onto the Combo_list.SetValue() method.  The individual elements of the Sequence element still cannot be set via the index.
        * The free file format object can now be remotely controlled in the auto-generated user functions.  This allows the test suite to set these values.  For this, a special Free_file_format.SetValue()method was created, and the user function SetValue() method will call this when needed.
        * Removed the desc_short arguments to the Sequence* GUI input element classes.  These do not exist.
        * The GUI test base execute_uf() method now only sets an argument if the argument has a corresponding GUI element.
        * Missing import causing all GUI tests to fail.
        * Edited all the module docstrings in the user_functions package.
        * Split up the gui.wizard_elements into a number of modules in the new gui.input_elements package.
        * The user function GUI page arguments are now updated after execution of the user function.  This allows ComboBox lists to be dynamically updated, and is useful for when the user clicks on 'Apply'.
        * Created the Free_file_format.GetValue() method for returning a dictionary of arguments.  This abstracts the GUI element's input fields.
        * Redesigned the set up of the user function arguments in the GUI pages.  The wizard element_*() methods have been removed as these were pointless wrappers.  The Uf_page add_contents() method now builds the argument GUI elements and stores them in the self.uf_args dictionary.  The wizard methods Clear(), GetValue(), ResetChoices() and SetValue() have been shifted into the Uf_page class as these are only for the auto-generated user functions.
        * More independence for the wizard_elements - the height of the element must now be passed in as an argument.
        * Started to make the wizard_elements module classes independent of the wizard.  The references to parent._div_left have been eliminated, this is now expected to be passed in by the parent which has that variable as the divider argument.
        * Converted the Interpreter.script() method into a proper user function.  This pseudo user function was no longer functional after the auto-generation changes.
        * Redesigned the prompt help system for the auto-generated user functions.  The documentation is closer to the style in the relax manual, including 'Synopsis' and 'Default' sections (i.e. see http://www.nmr-relax.com/manual/value_set.html).
        * The _build_doc() method now returns the documentation.
        * Eliminated the build_doc() function as this is no longer used.  The new auto-generated user functions use a variant of this function as the _build_doc() method.
        * The uf_docstring functions are no longer private.
        * Renamed the 'base_class' module to 'uf_docstring'.  This module now only contains functions relating to the auto-generated user function docstrings.
        * Shifted the prompt.base_class._strip_lead() function to relax_string.strip_lead().
        * Renamed the 'doc_builder' module to 'relax_string'.  This will be used to hold more string related functions used throughout relax.
        * The status.text_width variable is now used to wrap the user function docstrings.  This is for the prompt help system.
        * Shifted the prompt ps1, ps2 and ps3 variables into the 'interpreter' module.  This is the only place they are used, so they are better there.
        * Eliminated the defunct User_fn_class base class.
        * The Sequence GUI elements now default to not being read-only.
        * The frq user function class submenu mnemonic is now 'f', conforming to the other user function classes.
        * Improved the keyboard mnemonics for the user function sub-menus.  There are no longer any clashing letters.
        * The user function menu has been split in half as it was far too long.
        * The spin viewer window is now using the new build_uf_menu() function for its menus.
        * Shifted the user function menu creation into gui.uf_objects.build_uf_menus().  This will allow the code to be reused by the spin viewer window.
        * The GUI user function storage object now populated itself.  This singleton object is no longer populated from the main GUI object, shifting the auto_generate()method code into the singleton instantiation.  The user function __call__() method not extracts the main window GUI object for use as the parent of the wizards, if a parent is not supplied.
        * Removed the dependence on the old GUI user function system.  Now the GUI user function storage object is used throughout.
        * The user function GUI objects can now be called with the 'parent' keyword argument.  This allows a window other than the main relax window to be the parent, preventing the main window from always coming to the front.
        * Converted all of the GUI code to use the auto-generated user function design and storage object.
        * The Uf_page.create_page() method now accepts the 'sync' argument for deciding user function operation.
        * Shifted the user function page creation into the Uf_object.create_page() method.  This will be useful for the creation of the special wizards which are composed of many user function pages strung together.  In this case, the __call__() method which creates and packs the page into a Wiz_window instance can be bypassed.
        * The Spectral_error_type_page class now inherits from Wiz_page as UF_page has been eliminated.
        * Eliminated the gui.uf_pages package.  This removes a lot of code and many modules!  This has all been rendered useless by the auto-generated user functions.
        * Eliminated the old user function menu system.  The auto-generated menu system is now complete, so the old system is now of no use.
        * Improved the argument description by making it more readable.
        * Renamed the 'user_functions' module to 'uf_objects'.  This is due to a name clash with the 'user_functions' package.
        * Renamed the auto-generation user function module from 'objects' to 'user_functions'.
        * Clean up of the prompt.interpreter module.  This includes the merging of the _auto_generate() method into _setup() and  the clean up of the imports.
        * Created RelaxValListValError and RelaxNoneValListValError for the arg_check.is_val_or_list() function.
        * The prompt UI can now handle the user function argument type of 'val_or_list'.
        * Eliminated the try logic in the arg_check is_*() functions as the raise_error flag can now be used instead.
        * Created the arg_check.is_val_or_list() function for the value.set user function.  The value argument of this user function is now classified as a 'val_or_list' object, hence this is_val_or_list() replaces the use of is_str_or_num_or_str_num_list().
        * Clean up of the prompt package __init__ module.
        * Converted the vmd user functions to the auto-generation design.
        * Eliminated the view user function as this is ancient dead code.  This user function has essentially remained the same as when it was introduced at r788 back in the 0.3 relax line in October 2003!  It has never actually performed any function and has somehow managed to survive in the source tree unnoticed.
        * Converted the value user functions to the auto-generation design.
        * The auto-generated GUI user functions can now handle the 'val_list' argument type.  This is needed for the value.set user function whereby the 'value' argument can be almost anything,either as a single float, int, str, None, etc or as a list.
        * Converted the temperature user function to the auto-generation design.
        * Converted the sys_info user function to the auto-generation design.
        * Converted the structure user functions to the auto-generation design.
        * Float and int numpy arrays and matrices are now supported for GUI user function arguments.
        * Converted the spin user functions to the auto-generation design.
        * The can_be_none value is now propagated into the Combo_list GUI element.
        * The can_be_none argument is now propagated and stored in the Sequence and Sequence_2D GUI elements.  Some debugging print outs have also been removed.
        * Converted the spectrum user functions to the auto-generation design.
        * Added the spectrum.integration_points user function back end so that the auto-generated class can work.  This raises a RelaxImplementError as this is not implemented, but allows the front end to be accessible.
        * Renamed the results.read and results.write user function 'directory' argument to 'dir'.  This in both the front and back ends.
        * Shifted the free_file_format GUI element into its own class.  The wizard page free_file_format() method for generating the GUI element has been shifted into the components.free_file_format.Free_file_format class.
        * Redesigned the free file format window.  The settings module has been renamed to components.free_file_format, as it simply contains the free file format window.  This renaming is in preparation for shifting all of the free file format code into this module to create a special GUI element object for it, rather than being part of the wizard page code base.  The Base_window code has been merged into the Free_file_format_window code, as no other windows use it any more.
        * Eliminated the ancient unused load_sequence() GUI element.  This was part of the settings menu in the original version of the GUI, but now has no purpose.
        * Converted the sequence user functions to the auto-generation design.
        * The model_selection user function now defaults to AIC.
        * Converted the results user functions to the auto-generation design.
        * The reset user function is now called in synchronous mode in the GUI.
        * The user function 'gui_sync' attribute is now passed all the way into the GUI user function objects.
        * The Uf_container now has the 'gui_sync' variable for switching between asynchronous and synchronous operation.
        * Converted the reset user function to the auto-generation design.  A fast and dirty wizard graphic was also added for the user function.
        * Converted the residue user functions to the auto-generation design.
        * Created an icon for the relax_fit user function class.
        * Converted the relax_fit user functions to the auto-generation design.
        * Converted the rdc user functions to the auto-generation design.
        * Removed the old __docformat__ module variable.
        * Converted the pcs user functions to the auto-generation design.
        * Read only arguments as combo boxes can now be set to None, if allowed, in the GUI user functions.  The empty string and None are prepended to the combo box choices and data respectively.
        * Improved the titles of the Sequence and Sequence_2D GUI element for the user functions.  The 'desc_short' user function argument property is now used to create the title rather than the 'name' value.
        * The Sequence and Sequence_2D GUI elements can now handle fixed sized sequences.  When the 'dim' Uf_container.add_keyarg() argument is set, then the 'Add' and 'Delete all' buttons are turned off, the ListCtrl sizes are pre-made, and their SetValue() methods no longer append to the list.  This will allow for better user editing of points, vectors, and matrices.
        * Converted the 'size' user function argument argument to 'dim'.  The name 'dim' better reflects what this is.
        * Absorbed the user function argument argument 'dim' into 'size'.  This is only used by one user function, structure.rotate, which has not been converted to the auto-generation design yet.  The size argument is perfectly suitable for specifying the matrix dimensions.
        * The Sequence and Sequence_2D wizard page GUI element buttons now have a tooltip.
        * The paramag user functions are now using the align_tensor icons and wizard graphics.
        * Converted the paramag.centre user function to the auto-generation design.
        * The n_state_model user function menus now use icons.
        * Created a set of basic icons for the N-state model user functions.
        * Improved the PyMOL ray-traced n_state_model wizard graphic by ray-tracing to 1000x1400 and shrinking.
        * Created a wizard graphic for the n_state_model user functions.
        * Converted the n_state_model user functions to the auto-generation design.  Some of the documentation was updated as it was incorrect.
        * The integer user function GUI elements which can be None now are simply set to a wx.TextCtrl.  The wx.SpinCtrl used previously was incorrect, as a wx.SpinCtrl only handles integers, always defaulting to the minimum of the control.  Therefore the can_be_none user function argument argument is now propagated into the wizard page Value, Sequence and Sequence_2D elements (though they are not functional in the Sequence* classes yet).
        * The wx.SpinCtrl used in the Value wizard page element is now fail-safe.  The code now catches min and max values of None, and does not set the initial value so that a default value of None does not break the wx element.
        * The min and max arguments now default to 0 and 1000 for the Uf_container.add_keyarg() method.
        * Improved the frame_order relax icons.
        * Increased the content of icons in the auto-generated user function menus.
        * Improved the relax noe icons by modifying the wizard SVG file.
        * Converted the noe user functions to the auto-generation design.  The noe wizard graphic has been converted into icons for the menus.
        * Created the generic_fns.spectrum.get_ids() function for returning all current spectrum IDs.  This will be used by the noe.read_intensities user function.
        * Increased the icon content in the auto-generated user function menu.
        * Added the archive-extract Oxygen icon.
        * Added the document-edit Oxygen icons.
        * Added all sizes of the dialog-ok and dialog-ok-apply Oxygen icons.
        * The user function arguments can now have minimum and maximum values for integers specified.  The min and max arguments can now be given,and these are then propagated all the way to the GUI elements.  For the Sequence and Sequence_2D elements this has no effect yet as they do not implement wx.SpinCtrl elements.
        * Eliminated the 'prune' argument to the monte_carlo.error_analysis user function.  This will never be used again, and might tempt some users into changing the value and damaging their analysis!
        * Created a wizard graphic for the monte_carlo user functions from the oxygen 'actions/roll' icon.
        * Converted the monte_carlo user functions to the auto-generation design.
        * Added the 'roll' Oxygen icon and a blue coloured version for use in the monte_carlo menus.
        * Created an icon representing frequency.  This is being used by a number of user functions and classes.
        * Created an icons for the jw_mapping user function class.
        * The model-free user function class now has a menu icon.
        * Converted the molecule user functions to the auto-generation design.
        * Created a basic icon set for the model-free theory.
        * The failure of the user function page on_display() method now prevents the wizard from being displayed.
        * The Uf_page.on_display() method now gracefully handles RelaxErrors from the user function argument iterators.  This now catches the error and uses gui_raise to report to the user.
        * The Uf_container object can now have the 'desc' variable set multiple times.  This allows for molecule user functions where the generic_fns.mol_res_spin.ALLOWED_MOL_TYPES list values are appended to the description.
        * Big improvements for the Combo_list GUI element.  The client data is now set and returned instead of the string values, allowing for more descriptive choices.  The SetValue() method has been implemented.  And floats and ints are now supported as data types.
        * Converted the model_free user functions to the auto-generation design.
        * The consistency_tests.set_frq and jw_mapping.set_frq have been synchronised.  These perform exactly the same purpose, and have been made almost identical.
        * Improved the jw_mapping.set_frq wizard page size.
        * Refinement of the jw_mapping.set_frq user function.  The wizard page now shows a read only ComboBox of the allowed spectrometer frequencies, so that the user does not need to input the exact value.  The descriptions have also been improved.
        * Created the generic_fns.frq.get_values() function for returning a list of unique spectrometer frqs.
        * Improved the relax_data.read user function docs to stress the importance of frequency.
        * Converted the jw_mapping user functions to the auto-generation design.
        * Improvements for the consistency_tests.set_frq user function descriptions.
        * The select.spin and deselect.spin user function arguments spin_id can be None.
        * Removed the leading whitespace from the colour module documentation variables.
        * All leading whitespace is stripped from the docs before creating the auto-generated user function description.  The detection of the end of the table has also been simplified, as stripping the whitespace broke the logic.
        * The simple Value wizard page element default for an integer is now a wx.SpinCtrl.  If the element_type argument is set to 'default' and the data type is integer, then a wx.SpinCtrl will be used.
        * The align_tensor.init param_types argument is now a ComboBox with the choices in the GUI.
        * The generic_fns.grace.get_data_types() function is even more fail proof.  The return_data_desc() call was sometimes raising a RelaxError when not implemented for certain analyses.
        * Converted the grace user functions to the auto-generation design.  This required created the generic_fns.grace.get_data_types() function for returning the data type descriptions and values for the current data pipe.  This is to replace the code in the old grace user function update_parameters() method so that the data type fields are updated according to the analysis.
        * The Value.SetValue() method can handle default values when the list is empty.
        * For the Value wizard page element, the default can be the string or data for a ComboBox now.  If the default is a data value, then this is translated to the string.  This allows the default in the user function data objects to be either the string or data value, removing a source of coding errors.
        * Converted the frq user functions to the auto-generation design.
        * Created icons and wizard graphics for the frame_order user functions.
        * Converted the frame_order user functions to the auto-generation design.
        * Added error checking to the Uf_container to eliminate typo coding mistakes.  This checks that a variable is not set twice (copy and paste error).
        * Converted the fix user function to the auto-generation design.  The object-locked and object-unlocked Oxygen icons have been combined to create a wizard graphic for this user function.
        * Created wizard graphics for the eliminate user function.
        * Converted the eliminate user function to the auto-generation design.
        * Function arguments are now ignored as well in the auto-generated GUI user functions.
        * Created icons and wizard graphics for the auto-generated dx user functions.
        * Converted the dx user functions to the auto-generation design.  Some of the checks at the prompt level had to be shifted into the back end, where they belong.
        * The Value wizard page GUI element can now be set to a wx.SpinCtrl.  This is only allowed for integers.
        * The default file name is now passed all the way into the RelaxFileDialog.  This is for the auto-generated GUI user functions.
        * Improvements to the Selector_dir wizard page GUI element.  The icon is now for a directory open and not file open, the tooltip is also fixed, and the default value is now passed all the way through.
        * The auto-generated user functions and classes are now always alphabetically sorted.  The Uf_object.add_class() and Uf_object.add_uf() method now sort the lists at the end.  The data objects are stored in dictionaries to avoid sorting issues.
        * Created wizard graphics for the select and deselect user function classes.  The spin and spin_grey icons are used for the menus.
        * Converted the select and deselect user functions to the auto-generation design.  The boolean_doc variable has been shifted from the deleted prompt.select module into the generic_fns.selection module, where it belongs.
        * The new icon fetching system is now being used for the relax icons in the menus.
        * The relax Ulysses butterfly icons are now in the icon directory and in all sizes.  The 16x16 icon has also been improved.
        * Shifted all the gui/images graphics into the graphics/misc directory.  This finally brings in all of the graphics into one place.
        * Set the state user function class menu icon to the relax icon.
        * Converted the molmol user function to the auto-generation design.  For this process, the molmol.macro_apply and molmol.macro_write user function colour_start and colour_end arguments had to be split, just as in the pymol user functions.  They previously accepted both a Molmol or X11 colour name or an RGB colour array but are now separate arguments.
        * Converted the pymol_control user function to the auto-generation design.  For this process, the pymol.macro_apply and pymol.macro_write user function colour_start and colour_end arguments had to be split.  They previously accepted both a Molmol or X11 colour name or an RGB colour array.  Now there are separate arguments for the colour name and RGB colour array.
        * The Sequence based wizard page GUI elements now return None if the field is empty.  This was previously returning [] or () to the auto-generated user functions when they were expecting None.
        * The auto-generated user function menu is now correctly sorted.
        * Converted the model_selection user function to the auto-generation design.
        * Added graphics for the model_selection user function.
        * Created icons and wizard graphics for the calc and minimise user functions.
        * Created icons for the grid_search user function.
        * Eliminated the wiz_combo_default and combo_default arguments from the GUI auto-generated user functions.  These are now provided by the 'default' argument.
        * Eliminated the 'wiz_combo_default' user function argument argument.  This argument is duplicative of the 'default' argument.
        * The default value of the user function arguments is now set in the wizard page elements.  This is for the auto-generated user functions.
        * Converted the calc, grid_search and minimise user functions to the auto-generation design.  The minimise user function required a lot of work, as the minimise(*args, *kargs) construct is incompatible with the auto-generation design.  As this is hardly used in the field, everything has been converted to specific keyword arguments.  This will have a side benefit of being easier to understand for a user.  The back end was modified accordingly.
        * The 'additional' sections are now shown before the 'examples' section in the prompt help system.
        * The user functions without a base class are now supported in the prompt, script, and GUI modes.  This is for the auto-generated user functions not stored in a user function class object.
        * The 'num_or_num_list' and 'num_or_num_tuple' argument types are now supported in the GUI.  These are for the auto-generated GUI user functions.  The 'num_or_num_tuple' argument type is used for the diffusion_tensor.init user function, for example.
        * Improvements for the diffusion_tensor.init user function data setup.
        * Converted the diffusion_tensor user functions to the auto-generation design.  The icons and wizard graphics for these user functions has also been created.
        * Created icons and wizard graphics for the palmer user functions.
        * Converted the palmer user functions to the auto-generation design.
        * The auto-generated user function additional documentation is now used by the prompt UI.  The data was not being passed into the prompt user function objects.
        * The additional documentation for the auto-generated user functions is now properly processed in the GUI.
        * Converted the dasha user functions to the auto-generation design.
        * Added support for the directory selection wizard page element for the auto-generated user functions.  This uses the new Selector_dir GUI element.
        * Converted the consistency_tests user functions to the auto-generation design.
        * Converted the angles user functions to the auto-generation design.
        * Converted the bruker user functions to the auto-generation design.
        * Converted all of the state user functions to the auto-generation design.
        * List of lists types are now properly handed by the auto-generated user function in prompt/scripts.
        * Significantly increased the number of icons used in the auto-generated user function menus.
        * Added icons and wizard graphics for the align_tensor user functions.
        * Converted all of the relax_data user functions to the auto-generation design.
        * The buttons of the Selector_file wizard page element now have better tooltips.  The open button now has a tooltip related to opening.  The preview button has the "Preview" tooltip rather than the element_file_sel tooltip, so that the user knows what the button does.
        * The wizard description height is now functional in the auto-generated user functions.  The height_desc argument was being overwritten by the base class Wiz_page.__init__() method.
        * Added support for the free format file settings GUI element to the auto-generated user functions.  The normal argument elements are suppressed if the arg_type arg is set to 'free format', and the free format element will then be added to the end.  The 'data_col' argument is searched for to see if the data elements should be activated.
        * Created the generic_fns.relax_data.get_ids() function for returning all relaxation data IDs.  This is needed for the auto-generated user functions in the GUI.
        * The user function argument type of 'num' is now handled as a float in the auto-generated GUI elements.
        * The wizard height_desc variable can now be set in the auto-generated user functions.  This is via the wizard_height_desc variable.
        * The user function data object add_class() and add_uf() methods now check for uniqueness.  This is to catch coding errors whereby the user function class or name has been duplicated.
        * Removed the now useless 'user_functions.functions' module.
        * The Bmrb.test_bmrb_rw GUI test is now complete and fully uses the new auto-generated user functions.  This test will only pass once all the relevant user functions are converted to the auto-generation design.
        * The 2D sequence arguments of the auto-generated GUI user functions now matches the normal sequence elements.  The String_list_of_lists_window has been converted to Sequence_window_2D which inherits from Sequence_window.  All Python types and sequences supported by the Sequence GUI element are now supported by the Sequence_2D element (which is the old String_list_of_lists).
        * Converted all of the align_tensor user functions to the auto-generation design.
        * Merged all of the sequence wizard page GUI elements into one.  This is to significantly simplify the code.
        * Added GUI conversion functions for tuples.
        * Better checking of the contents of the GUI element by Value.GetValue().
        * Merged the Base_value, Float, Integer, and String wizard elements together into the single Value class.  This simplifies the code, as the differences between them was very minor.
        * Floats and tuples of numbers are now supported by the user function GUI argument elements.
        * The align_tensor.display user function backend argument is now a keyword argument.  This is for supporting the auto-generated user functions.
        * Created the align_tensor.get_ids() method for use in the GUI wizards.  This will be required for the auto-generated user function GUI front ends.
        * The pipe.copy pipe_from wizard element is now read only.
        * The user function intro is now printed out before the argument checking.  This is for better user feedback.
        * The pipe editor window now uses the auto-generated pipe user function GUI objects.
        * The user function backend and title values are now enforced.  If these are not set, a RelaxError is thrown.  This should avoid fatal coding accidents.
        * Converted all of the brmb user functions to the new user function design.
        * All of the exp_info user functions now check for the presence of the cdp.  This allows for better user feedback.
        * The default list element now defaults to read only, whereas the Combo_list object defaults to not read only.
        * The List objects can now handle bad user input.
        * The wiz_read_only flag now defaults to None, to allow the GUI elements to decide the best option.
        * The read_only flag now is fully functional in the String_list wizard page element.
        * The wiz_read_only user function flag is now propagated into the String_list GUI elements.
        * The Combo_list GUI element can now handle an initial size of None, converting this to 1.
        * The list wizard GUI elements no longer show empty lists.
        * The Base_value class can now accept the element_type argument value of 'default'.  This will then use the TextCtrl.
        * The add_keyarg() wiz_element_type argument default is now 'default' to be able to handle all element types.  The previous default of 'text' for a TextCtrl was causing failures with certain wizard GUI elements.
        * The relax controller is now shown for the auto-generated GUI user functions if 'display' is set.  This is the 'display' variable in the user function data store.  This allows all the user functions which print to STDOUT to pop up the controller in front of the user, so they see the result.
        * The user function data structure now accepts the 'display' boolean variable.  This is used to indicate that a user function would like to display some output to STDOUT.
        * All of the user function argument arguments are now handled by the add_keyarg() method.
        * All of the argument checking types are now supported for the auto-generated user functions.  This covers every type of arg_check.is_*() function used in relax.
        * Boolean argument types are now supported by the auto-generated GUI user functions.  The Selector_bool object and element_bool() wizard page method have been written for this.
        * The can_be_none user function argument argument is now used.  This is needed for proper argument checking in the auto-generated user functions.
        * The wizard page GetValue() method now returns None if the corresponding key is missing.  This is needed for the directory arguments as these are not shown in the GUI.
        * Improvements to the element_file_sel() wizard page method.
        * Created the special Selector_file wizard element object.  This is modelled on the file_selector() wizard page method.
        * Created the element_dir_sel() and element_file_sel() wizard page methods.  This will require the selector objects to be written.
        * The auto-generated GUI user functions objects now support the special UI types.  This includes the file and dir selection dialogs, and skipping the dir arguments.
        * The arg_type argument for the auto-generated user functions is now accepted.  This will be used to allow special UI elements to be used for the argument, for example a file selection dialog.
        * Integers and string list of lists are now accepted by the auto-generated GUI user functions.
        * Expanded the wizard page element_int() method to accept all the arguments of element_string().  All these arguments will be handled properly by the Integer class as this derives from Base_value.
        * The list_titles argument is now accepted for the auto-generated user functions.  This is for a list of lists, and are the titles for the lists.
        * The auto-generated Uf_page.add_contents() method now raises a RelaxError if the Python type is unknown.
        * The menu_text variable now defaults to '' so that the GUI does not die if this is not set.
        * Removed the wiz_desc arguments from the pipe user functions.
        * Eliminated the wiz_desc argument in the auto-generated user functions.  Now the desc_short argument will be used instead for the GUI user function elements.
        * The desc_short rather than wiz_desc argument is now used for the GUI elements.  This is for the auto-generated user functions.
        * The wiz_desc argument is no longer compulsory for the auto-generated user functions.  This will eventually be merged with the desc_short argument anyway.
        * The GUI test execute_uf() base method now operates with the auto-generated user functions.
        * Advancements for the auto-generated GUI user functions.  String list GUI elements are now supported.  The wizard element are now updated on display, allowing for example the current set of data pipes to be displayed in the ComboBoxes of the pipe user functions.
        * The List and Combo_list class now have ResetChoices() methods.  This allows these elements to fit with the auto-generated GUI user functions.
        * Big set of changes enabling the auto-generation of the GUI user function front ends.  This will create user function objects which are bound to the menu items, and the user function page objects automatically from the user_function data object.  The pipe user functions have been updated to supply the needed data, and additional arguments have been added to the Uf_container.add_keyarg() method.  The Uf_container object can now accept additional wizard related variables.
        * The graphics package image variables are now imported into the paths module.  This is for backwards compatibility with the old user function pages.
        * Shifted a number of the image path variables from the gui.paths module to the graphics package.
        * The user function GUI menu item is now being auto-generated.  This will require future work to support user functions not within a user function class.
        * The graphics.fetch_icon() function now returns None if no icon is specified.
        * Created the graphics.fetch_icon() function for a better API for the icon paths.  This will eventually replace the gui.paths module.
        * The graphics directory has been converted into a Python package.  This will be used to store special functions related to graphics manipulation, retrieval, etc.
        * Renamed the gui.user_functions package to gui.uf_pages to avoid import clashes.  This package was clashing with the base user_functions package, breaking imports everywhere.
        * Started to write the auto-generated user function GUI menu.
        * Created methods for returning user function and class data objects from the user function data object.  These are called get_class() and get_uf().
        * The auto-generated prompt user function front end objects are now executable.  The uf.backend variable is now the executable Python object.  The pipe user function class has been updated for the uf.backend change.
        * Implemented the missing back end of the pipe.current user function!
        * Expanded and fixed the argument checking for the prompt auto-generated user function front ends.
        * The auto-generated prompt user function front ends now convert arguments to keyword arguments.  This is important as a keyword argument can be supplied without the keyword in Python.
        * Removed the last reference to the eliminated Exec_info prompt object.
        * Clean up of the prompt intro strings for the auto-generated user functions.
        * The prompt intro strings are now created for the auto-generated user functions.
        * Absorbed the Exec_info prompt object into the relax status singleton and eliminated it.  The prompt strings are now prompt.base_class module variables, and the current ones are stored in the status object.  The user function intro flag is now stored in status.prompt_intro.  The prompt_colour_on() and prompt_colour_off() methods are now methods of the interpreter class.  Now that the Exec_info class no longer exists, the Basic_class class has also no purpose and has been eliminated.
        * The prompt help system now uses bold text for the title line and all subtitles.  The subtitle underlines are now not used, but the ability to underline is retained.
        * The relax prompt help system is now being passed through pydoc.pager to page the text.  This system will be used by the auto-generated user functions.
        * The documentation for the auto-generated user functions is now being created.  This is stored in the __relax_help__ string, and mimics the old system, reusing many of the base functions.  All the user function data required for the prompt interface is now being passed in to the object.
        * Renamed the private _args variable to the non-private kargs.
        * The user function object now has a __repr__ method to give better feedback to the user.
        * Primitive auto-generation of the user functions.  This simply creates an object for the user function, but it is not callable yet or uses any of the user function data.
        * Modified the pipe user function class description.
        * The __description__ attribute from the old help system is now supported in the auto-generated classes.
        * The new auto-generated user function classes now fit into the prompt help system.
        * Documented the prompt-based help system _Helper.__call__() method.
        * The auto-generated user class object now accepts the desc argument and stores it for use in the help system.
        * Added a __repr__ method to the user function class objects for presenting a better message to users.
        * Added the prompt.objects module which contains the user function auto-generation objects.
        * The interpreter now auto-generates the user function classes.
        * Modified the Class_container class to be more like the Uf_container class.
        * Added two iterator methods for looping over the user functions and classes.  These are class_loop() and uf_loop().
        * The user function container arguments variable is now private and modifiable.  It needs to be modifiable so the __init__ method can initialise it.
        * Clean up of the pipe module (removal of useless imports and syntax fixes).
        * The pipe module is now imported in the __init__ module to set up the data structures.
        * The user function data object is now imported into the interpreter.
        * Added the desc_short argument to the add_keyarg() user function container method.  This argument is used in RelaxErrors for when incorrect parameter are supplied.
        * Converted the entire of the 'pipe' module to populate the user function data structure.
        * Big improvements to the user function data container.  The changes are:  More attributes are now accepted; now only allowed attributes can be modified, to prevent programming errors; docstring improvements; and more keyword argument data can be input.
        * Shifted a check from the pipe.create front end to the back end.  Tests do not belong in the front end!  And this is not compatible with the new user function design.
        * Removed the pipe user function class import and instantiation from the interpreter object.  This will be re-introduced later with a new auto-generation architecture, taking the info from the user_function data object.
        * Shifted the pipe module from the prompt to user_functions package.  This is in preparation for the full conversion of this user function class into the new auto-generation design.
        * Added a unit test for the contents of the user_function package.
        * The unit test _user_functions package is now actually a package.
        * Created a unit test package for the user_function package.
        * Shifted the Uf_info singleton into the new user_functions.data module.  This will avoid a lot of circular imports.
        * Created a module for setting up all of the user function data.  This is just a test, so probably will not be permanent.
        * Created the Uf_info singleton class for holding all of user function data.
        * Created a number of special objects for the user function data storage.
        * Created the user_functions package.
        * Added checks for the proton frq for the relax_data.read and relax_data.back_calc user functions - if the frequency is not exact or is less than 1 MHz, warnings are now given to the user.
        * Made the bond vector extraction print out from structure.vectors more informative.
        * Created a sample script for BMRB data deposition.
        * The relax data store is_empty() method now only prints to STDERR if the verbosity flag is set.
        * Changed the behaviour of the generate_spin_id() and generate_spin_id_data_array() functions.  This is a large change affecting many parts of the code base.  The problem that this solves is the incorrect usage of the '&' character in spin IDs, tripping up on the powerful Selection object of Chris MacRaild.  For example, the spin ID ':2&:Glu' cannot be correctly handled.  This actually matches all residues with the number 2, and all residues with the name 'Glu'.
        * The scons 'clean' target now removes *.pyo files as well.


    Bugfixes:
        * Fixes for the bmrb.write backend - the generic_fns.exp_info module should be used rather than the cdp.  The abstraction via the generic_fns.exp_info module is needed to make sure all the relevant current data pipe structures are set up.
        * Fix for the bmrb.display user function - this user function never worked as pystarlib expects a file path as a string, but a modification of pystarlib fixes this.
        * Fix for the model-free about dialog - the fonts for the different titles can now be set.  The new font.roman_font_18 has been added, and the about dialog draw_title() method now takes the alt_font arg for specifying an alternative font.
        * Bug fix for the model-free specific analysis duplicate_data() method - the cdp.exp_info should be skipped.  This was not picked up before as this structure is normally non-existent during the analysis.
        * Fix for the Bruker system tests - the NMR proton frequency is in Hz, not MHz.
        * Fix for the GUI for when a script is launched from the command line - the analysis tabs are now updated at the end of the __init__() method, and the ds.relax_gui data store object is no longer overwritten if it already exists.
        * Bug fix for running a script when launching the GUI.  This was completely failing but now the script is executed prior to the launching of the GUI.
        * Bug fix for the generic_fns.spectrum.replicated_ids() function for when no replicates exist.  This will now return an empty list instead of an error being raised.
        * Fix for the spectrum.read user function - a RelaxError is now raised if the file name is not given.  This is important for the GUI to prevent unintelligible errors to be presented to the user.
        * Fix for the experimental information in the relax data store - the information can now be reset.
        * Bug fix - the 'relax --version' print out now works from any directory.  This was only working if relax was being run from the installation directory!
        * Fix for the prompt and script UI user function intro printouts.  This text is no longer passed through the format_text() function which has problems with newline characters.
        * Fixes for the GUI tests tearDown() method.  All wx events are now flushed before the deletion of GUI elements.
        * The pipe.delete user function now operates synchronously in the GUI to avoid the GUI blowing up!
        * The user function pages are now registered and unregistered with the 'gui_uf' observer object.  This allows the ComboBox args to be properly updated with asynchronous user function calls.  The old update method suffered from racing and hence often updated before the user function had executed.  Now the on_display() method registers the GUI user function page update_args() method, and the on_next() method unregisters it, allowing the observer to update the page only when it is visible to the user.
        * Fix for the GUI tests - the ds.tmpfile string is now being created by the base setUp() method.  This is needed to stop files from being created within the relax directory tree.
        * Bug fix for the model-free specific analysis - the Dr diffusion tensor parameter is now defined.
        * Fix for the arg_check.is_float_matrix() function for rank-1 arrays.  The function failed on lists of Python values, for example a list of bools.  An additional check has been added to make sure that the list elements are also lists.
        * The delete all analysis method now does what it warns and resets relax at the end.
        * Fix for the model-free GUI auto-analysis test under certain conditions.  The spin viewer window was loading the spins asynchronously, but the subsequent relaxation data loading was synchronous.  If a previous GUI test failed this would often trigger a racing condition.
        * Mac OS X bug fix for the non-read only ComboBox GUI input elements.  This is for the Value and Combo_list GUI input elements.  The problem was two-fold.  First the convert_to_gui() call was required to convert the value to a unicode string, as a normal string will be not be set via the ComboBox.SetValue() method.  Secondly old selections need to be turned off.  On other operating systems, the SetValue() call will reset this - but not on Macs.
        * Mac OS X bug fixes for the GUI ComboBox input elements.  The ComboBox.GetClientData() method on Mac OS X fails if the ComboBox.GetSelection() method returns -1 (or wx.NOT_FOUND).
        * Bug fix for all of the specific analysis code.  The SPIN_PARAM and GLOBAL_PARAM structures are now initialised within the __init__() methods rather than being class variables.  This bug was only uncovered by the auto-generated user functions.  The problem with them being class variables of the base class is that the objects are then the same for all specific analyses.
        * Fixed the N-state model description so that it is no longer about domain motions.  This stands out in the GUI when creating data pipes!
        * The GUI user function on_execute() method no longer shows the controller in test suite mode.  The controller Raise() method was being called at the end of the method, without checking status.show_gui.
        * Fix for the pipe editor - this window is now the parent for the user functions it calls.  Therefore the pipe editor no longer disappears behind the main relax window.
        * Fix for two of the arg_check.is_*() fns - the individual elements were incorrectly checked.
        * Bug fix for the Combo_list.GetValue() method - it can now handle no user input cleanly.
        * Fix for the Analysis_controller.on_page_changed() method for reset events.  The relax data store now always has a ds.relax_gui object!
        * Fix for the post_reset() method of the Analysis_controller object.  This unregisters all the analyses from the observer objects, and calls the set_init_state() method only once all analysis pages are deleted.  This in combination with the synchronous reset user function calling prevents the GUI from blowing up!
        * Fix for the gui.misc.gui_to_tuple() function.  This was failing in many cases, especially where the value is not a tuple to start with.
        * Bug fix for the bruker.read user function for reading Bruker Dynamics Centre files - the spectrometer frequency needs to be converted from MHz to Hz.
        * Bug fix for the loading of the molecule name and type from relax state or results files.  The str() builtin function is now used to convert the string from unicode to a normal string.  This is needed as u'My mol' != 'My mol', breaking a number of tests.
        * The relax_data.delete user function is now finally properly implemented (bug #19785, https://gna.org/bugs/?19785).
        * The model-free minimisation is now checking for multiple vectors per spin, and raises a RelaxError.
        * Fix for the relax controller SplitIO() setup for logging and teeing modes.  The SplitIO() usage is now disabled for the test suite.  This prevents a doubling of the print outs in the GUI tests.  The problem was introduced at r15843 with the accommodation for the logging and teeing modes with the GUI.
        * Created a system test Mol_res_spin.test_residue_delete() demonstrating a failure of the user function - deleting the first residue removes the entire sequence.
        * Fixes for most of the structure user functions - the pipe check is now performed at the start.



Version 1.3.16
(11 May 2012, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.16

    Features:
        * The scons 'install' target now creates both *.pyc and *.pyo files during installation - this should result in faster relax startup times.
        * The test suite now passes on the Fink relax installation on Mac OS X as the ancient and very dead PyXML module is now being detected and worked around.
        * Renamed the 'pdc' user function class to 'bruker' and removed all references to 'protein' - this is due to the Bruker absorption of the Protein Dynamics Centre into the Bruker Dynamics Centre announced at https://mail.gna.org/public/relax-users/2012-04/msg00011.html (Message-id: <4F7AE13B.6010309@bruker.de>) by Dr. Klaus-Peter Neidig (peter dott neidig att bruker-biospin dott de).
        * Updates and improvements throughout the relax user manual.
        * Added a new section to the introduction chapter of the user manual for Gary Thompson's multi-processor framework.
        * Added screenshots and descriptions of the graphical user interface (GUI) to the introduction and all of the analysis chapters of the relax user manual.
        * The GUI and logging/teeing modes are now compatible with each other.
        * Expansion and completion of the model-free chapter of the relax user manual.


    Changes:
        * Improved debugging of the observers in the status singleton object.
        * Changed the behaviour of the arg_check module so that the functions can return answers.
        * The Bmrb.test_bmrb_rw GUI test now uses the base execute_uf() method for the pipe.create call - this is part of the simplification of the user function interfaces.
        * A number of the pipe GUI user function front ends now use the wizard page element_*() methods to simplify the code base.
        * The wizard page element_string_list() method can now create the special Combo_list objects.
        * Created the wizard page ResetChoices() method for resetting the list of values in a ComboBox.
        * Created a Clear() wizard page method for clearing a specific GUI element.
        * The wizard page element_string() GUI element creator read_only flag now defaults to False.
        * The read_only=True flag to wizard_elements.Base_value now sets a TextCtrl to the background colour.
        * The wizard_elements.Base_value.SetValue() method now works properly with the ComboBox.
        * The wizard_elements.Base_value class now can set the element to be read only.
        * Created generic_fns.pipes.PIPE_DESC_LIST which is the PIPE_DESC as a list, sorted by VALID_TYPES (to be used in the GUI user functions).
        * Better ComboBox support in wizard_elements.Base_value class - now strings and data are separate (if the data is supplied), and the GetValue() method now returns the client data rather than the string value.
        * Modified the wizard_elements.Base_value base GUI element class to handle combo boxes.
        * The Bmrb.test_bmrb_rw GUI test now uses the new execute_uf() method for the bmrb.citation user function.
        * Created the GUI test base method execute_uf() for executing a user function.
        * The bmrb.citation GUI user function now uses the new wizard page element_*() methods for the GUI elements.
        * Created a new wizard element for inputting integers.
        * Created a new wizard element for inputting strings.
        * Created the Bmrb.test_bmrb_rw GUI test.
        * Completed the GUI interface for the bmrb.citation user function.
        * Created a new wizard GUI element for lists of lists of strings.
        * Abstracted out most of the String_list wizard element into the List base class.
        * The bmrb.citation GUI user function now uses the new wizard page string list GUI element.
        * Completed the wizard string list GUI element.
        * Added the edit-rename Oxygen icons.
        * Created a new String_list wizard GUI element class and associated element_string_list() method.
        * Created a new infrastructure in the wizards for handling more advanced GUI elements.
        * The Mf.test_write_results system test now checks for the ancient PyXML.
        * Added the xml module import tests to the dep_check module.
        * The relax system information print out now includes information about the XML modules.
        * Added an initial but far from complete bmrb.citation user function page and menu element.
        * Added the BMRB icon in various sizes to the graphics directory and icon paths.
        * Updated all the BMRB user function front ends to the modern docstring design.
        * Created a special Bruker add icon for use in the relaxation data GUI element.
        * Added a button to the relaxation data GUI element for calling the bruker.read user function.
        * Improved the bruker.read user function docstring.
        * Created the bruker.read GUI user function page and menu entry.
        * Added the Bruker logo in various formats for use in the relax GUI.
        * Converted the bruker.read user function prompt interface to the new design.
        * Renamed the PDC to Bruker DC in the test suite.
        * Updated the development chapter of the relax user manual to be more current -  this includes removing the text saying that the GUI is yet to be coded!
        * Added mpi4py to the list of relax dependencies in the manual.
        * Added GUI sections to the end of the NOE, R1+R2 and model-free chapters of the user manual.
        * The list of figures in the relax user manual is now on a new page.
        * Updated the open source infrastructure chapter of the relax user manual.
        * Added a screenshot of the new relax 1.3.15 version in script mode.
        * Significant updates to the introduction chapter of the relax user manual:  The text has been updated to match the current relax versions.  All mention of the dead SRLS theory has been eliminated.  Screenshots of all the GUI windows and analyses have been added to prettify the chapter, and the text for the GUI has been rewritten for the new GUI design.
        * Added a number of GUI screenshots for use in the relax user manual - these were taken from http://www.nmr-relax.com/screenshots.html.
        * Added colons to all entries of the abbreviation chapter in the relax user manual.
        * Updated and completed the installation chapter of the relax user manual - a lot of the text was 4-6 years out of date.
        * Some small edits to the release checklist document.
        * Removed more maths from the HTML user manual section titles.


    Bugfixes:
        * Improved error reporting for multiple vectors in a model-free analysis (bug #18807, https://gna.org/bugs/?18807).
        * Updated the deselect.read user function call in the noe.py sample script to match relax_fit.py (bug #19717, http://gna.org/bugs/?19717).
        * The relax_fit.py sample script deselect.read user function now has all columns specified (bug #19717, http://gna.org/bugs/?19717).
        * Improved the error message system for the spin ID matching multiple spins (bug #19717, http://gna.org/bugs/?19717).
        * Fix for the test suite GUI tests - one of the state system tests was removing the frame order analysis from the generic_fns.pipes.VALID_TYPES list with a pop() call.
        * Simplified the wizard_elements.Base_value ResetChoices() method - this is an attempt to fix some racing conditions under wxGTK, triggered in the test suite.
        * Fix for the bmrb.citation user function documentation.
        * The Mf.test_write_results system test now checks for the ancient PyXML - this ancient version from 2004 which should be eliminated, if installed, causes the toprettyxml() changes in Python 2.7.3 to be overridden.
        * The alignment tensor user functions can now all handle the situation whereby no tensors exist.
        * Fix for the scons 'install' target for the byte-compilation of the *.pyc files.
        * Fix for the chi2 references in the maths chapter of the relax user manual.
        * Fix for the ANSI escape sequences for colouring text for when an isatty() method does not exist.
        * Fix for the creation of the HTML user manual http://www.nmr-relax.com/manual/index.html file.



Version 1.3.15
(25 April 2012, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.15

    Features:
        * Large improvements to the HTML user manual (http://www.nmr-relax.com/manual/index.html).
        * The full test suite, including GUI tests, can now be run successfully from the GUI.
        * The Mac OS X binary distribution file now supports Leopard, Snow Leopard and Lion as well as the PPC, i386 and x86_64 CPU architectures.
        * The prompt and script output to a terminal is now coloured.
        * Faster program startup by only importing the test suite and GUI packages if they are actually needed.
        * Files selected via the GUI user functions can now be previewed.
        * Redesign of the spin loading wizard of the spin viewer window to be more intuitive.
        * Expansion of the system information print out.
        * Advances in the multi-processor framework including the pre-sending of data to slaves.
        * Support for wxPython 2.9.


    Changes:
        * Changed all of the maths in the HTML user manual page titles, the latexonly and htmlonly environments are now being used to produce different section titles with and without maths respectively.
        * The latex2html configuration script now allows for more maths in the HTML user manual with the HTML_VERSION math extension.
        * The section numbers are now removed from the HTML user manual pages to allow for more static webpages for the user functions which do not disappear as new user functions are added.
        * The title page of the HTML user manual has been renamed to "The relax user manual".
        * Updated the ancient COMMITTERS file which has not been changed in over 4 years!
        * The pipe editor window is no longer centred, now matching the behaviour all other windows.
        * All open relax windows are now closed prior to running the test suite within the GUI.
        * Exiting the GUI now only warns about data loss only if there is data to loose.
        * The relax controller can now not be closed while the test suite is running.
        * During the GUI tests from the GUI, the relax controller is now modal preventing users from interfering with the tests.
        * The relax controller now stays on top of all windows when the GUI tests are being run improving the running of the tests on Mac OS X and MS Windows.
        * The GUI tests now work in the GUI thanks to a lot of GUI black magic.  The tests' tearDown() method now carefully deconstructs the GUI element prior to the next test being run.  In the normal 'relax --gui-test' mode, the GUI object is destroyed and recreated for each test however, when run from the GUI, the GUI object is always there and must remain intact.  The deconstruction includes deletion of each analysis tab and selective destruction of all non-main windows (excluding the controller which shows the test suite progress).  The relax data store GUI object is also reconstructed in the tearDown() method, and all wx events flushed at the very end to prevent clashes with the next GUI test.
        * The relax mode (i.e. prompt, script, GUI, test suite, etc.) is now stored in the status object - this is used to activate and deactivate certain parts of the GUI tests within the GUI and normal test suite modes.
        * The ds.relax_gui GUI data object is now a permanent feature of the relax data store.
        * The 'Tools->Test suite' menu item has been converted into a sub-menu with entries for running all tests or the individual test categories.
        * Created the _det_install_path() status singleton method for better determining the install path - this is used for the Mac OS X applications whereby the current logic of using sys.path[0] fails miserably!
        * Prepared the multi-processor package for the import mechanisms of Python 3 - this new mechanism is present in Python 2.7 now, and the code falls back to the old method when not present.
        * Complete redesign of the py2app setup.py script for building Mac OS X applications.  The script has been converted into a class called Setup which performs all the actions.  All files, source or otherwise, are now stated as data files to be included in relax.app/Contents/Resources.  All relax modules are specified by the py2app 'includes' option so that they are forced to all be included within the relax.app/Contents/Resources/lib/python2.X/site-packages.zip file as *.pyc files.
        * The py2app part of the setup.py script now throws a RelaxError if the setuptools module is missing.
        * Added the relax prompt icon to the main GUI window toolbar.
        * Added the larger sized application-x-executable-script Oxygen icons.
        * Created the 'ansi' module containing the terminal colouring ANSI escape sequences.
        * The test suite is now only imported in the test modes of operation - this should speed up program initialisation.
        * The import of the gui package now only occurs in GUI mode - this will speed up the program start up.
        * The script print out in scripting mode is now in cyan if sys.stdout is a TTY.
        * ANSI escape characters are now turned off forcibly when in GUI mode.
        * The sys.std*.isatty() methods are being used to determine if text output should be coloured.
        * All RelaxWarnings are now coloured yellow when printed to a TTY.
        * All RelaxErrors are now coloured red when printed to a TTY.
        * The relax prompts will be coloured blue when printed to a TTY.
        * The GUI analyses delete_all() method now unregisters all observer methods prior to deletion.
        * Created observer_register() for all GUI analyses for method registration and unregistration - this method allows for external calls to observer_register() to pre-remove the methods from the observer objects.
        * Added debugging printouts to the delete_all() analysis method.
        * More advanced debugging printouts for the delete_analysis() method.
        * Added some heavy debugging code to the GUI analysis delete_analysis() method.
        * Increased the size of the model-free model change warning dialog for wxPython 2.9 on GNU/Linux.
        * The file selection wizard GUI element now has the preview button turned on by default.
        * Double clicking on a file in the results view window now opens it.
        * Added a file preview button for the spectrum.read_intensities user function GUI page.
        * Added a file preview button to the file selection GUI element of the wizards.
        * Increased the size of the incomplete set up dialogs for wxPython 2.9 on GNU/Linux.
        * Added the document-preview.png Oxygen icons.
        * Increased the loading state warning dialog size - this is to accommodate for larger text on wxPython 2.9 on GNU/Linux with GTK.
        * Improved the spin data deletion messages from the spin viewer window.
        * Increased the dialog heights for the deletion of spin data via the spin viewer window.
        * Improved the user feedback during a state save by just sleeping a little to show the busy cursor.
        * Modified the spin loading wizard so that preloaded structures are the default.
        * The maths_fns.relax_fit module is now stored in the dep_check module for the info print out.
        * Added the structure.read_xyz user function to the menus.
        * Created the Tools->System Information menu entry, which is simply the sys_info user function front end.
        * Created the GUI front end to the structure.read_xyz user function.
        * The relax controller now accepts Ctrl-A to select all text.
        * The relax controller now shows the relax intro text to mimic the prompt/scripting modes.
        * Introduced the empty() method into the structure API to check if structural data is loaded - this will be used in the spin loading wizard of the spin viewer window.
        * Converted the structure.read_xyz user function front end to the new design.
        * Improved details of relax and the compiled C modules from the info print out.
        * Created a dictionary object containing wxPython version info within the status singleton object - this is being used to construct the Mac dock icon, when the Carbon and Cocoa builds and not GTK are being used.
        * Updated the multi-processor package __all__ list to allow the relax unit tests to pass.
        * Added a document describing how to build a 3-way (i386, pcc, x86_64) Mac OS X Python framework.
        * Added a script which is used to validate the binary architecture of Mac OS X Frameworks.
        * Improved the relax info print out for the installed python packages - this now shows more information for the wxPython version, and formats the output based on maximum widths to handle different situations.
        * Removed the ppc64 build target for the relax C modules on Mac OS X - this architecture is not supported by the recent Xcode frameworks, so it has been dropped.
        * The scons binary_dist target on Mac OS X can now overwrite a pre-existing DMG file.
        * Added some epydoc @attention fields to the multi-processor API.
        * Created the fetch_data_store() multi-processor API function - this simply returns the data store of the same processor as the calling code.
        * The 2nd test implementation's slave command now uses the fetch_data() API function - this is to obtain the invariant data pre-sent by the master to the slaves.
        * Renamed the multi-processor API data_fetch() function to fetch_data(), and implemented it.
        * Renamed data_upload() to send_data_to_slaves() and made it more specific.
        * The multi-processor data_fetch() API function is now used to obtain the total_length variable.
        * Shifted the self.threaded_result_processing flag into the base Processor class where it belongs.
        * Clean up and completion of the TODO for the Processor.assert_on_master() method.  The Processor.assert_on_master() method has been created and calls raise_unimplemented().  The Multi_processor.assert_on_master() method has been shifted to Mpi4py_processor.assert_on_master(), as that method's error message is MPI specific.  The empty Uni_processor.assert_on_master() method has been added to allow that fabric to work.
        * Spun out all of the results queue objects into their own module.  This completes another set of TODOs by removing these queue objects from any fabric level.  They can now be imported and used by any fabric level (Processor, Multi_processor, Mpi4py_processor, Uni_processor, etc.).
        * Shifted the run_command_queue() and run_queue() methods from the Multi_processor to Processor class.
        * The multi/test_implementation2.py script can now be run in uni-processor mode.
        * The multi/test_implementation2.py script now properly uses pre-send data in the slave calculations.
        * Partially implemented the Processor.data_update() method.
        * Created the special command object Slave_storage_command for transferring data to slaves - this command currently has two special methods:  add(), used by the master processor to add data to the command for transfer; and clear(), used by the slave (via run()) or the master to clear out all data.
        * Split the multi.commands module into two - the slave commands and result commands.
        * Removed the Mpi_processor.data_upload() method as this will be performed at the Processor level.
        * Shifted all of the processor command objects into the multi.commands module.  The other multi.api module objects have been shifted into the multi.misc module.
        * The multi-processor package now allows sys.exit() calls within the master processor.
        * Removed a number of sys.exit() calls from different relax modes.  The return call is used rather than sys.exit() to exit the main run() method.  These were not needed and it allows the 'version', 'info', and 'gui' modes to play better with the multi-processor package when using mpi4py.
        * Shifted the mpi4py processor module functions broadcast_command() and ditch_all_results() into the class - these have been turned into private methods.
        * Redesigned how the multi-processor package terminates program execution - the Processor.exit() method has been introduced to perform this action.
        * Spelling fix for a number of the processor method names.
        * Fully documented the Processor.run() method via comments.
        * Eliminated the unused Set_processor_property_command multi-processor class.
        * Eliminated the unused Get_name_command multi-processor class.
        * Shifted the Multi_processor.run() method up a level to Processor.run() - this completes one of the TODOs, and will be needed to avoid code duplication for handling the new data_upload() and data_fetch() API methods.
        * Eliminated the completely unused create_slaves() Processor method.
        * The processor instances now have a data storage container - this will be used by the data_upload() and data_fetch() API methods.
        * Implemented the mpi4py processor fabric data_upload() method.
        * Updated the second multi-processor test implementation to use the new data_upload() API function.
        * The multi.data_upload() API function now forwards the call to the Processor classes.
        * Clean up of the Multi_processor.run_command_queue() method.


    Bugfixes:
        * Fix for the about dialogs in the GUI when combined with a scrolling window (this is only a problem for the wxPython 2.9 series).
        * Fix for the fetch_docstrings.py script used for the user manual creation - the number of \linebreak[0] commands inserted was far too great.
        * In generating the HTML user manual, the ignore_commands function is now being used to force latex2html to ignore \linebreak[0] commands as these were previously putting the text '[0]' throughout all the HTML pages.
        * For the HTML user manual, the document splitting has been restored to a split depth of 5 - this had been changed to make the main chapters of the text more readable, but the user function HTML page is now far, far too long and is a massive strain on browsers.
        * The Mf.test_write_results system test now works with the newer Python 2.7.3 version, as from this version onwards the XML of the relax save and results files will be differently formatted.
        * Big bug fix for the installation path for the relax Mac OS X application.  The path to the application Resources folder, where all the relax data files are located, is now set to the install path.  The relax.py module was also overwriting the value set in the status singleton and now this no longer occurs.
        * Fix for the py2app setup.py script for Mac OS X application creation - the list of data files to include with the app is now properly formatted.
        * The relax GUI is now robust and able to withstand a call to the reset user function - this could have occurred if the user ran a script with a reset() call, or if reset() was typed at the GUI version of the relax prompt.
        * Added isatty() methods to all of the dummy file objects within relax - this fixes a number of errors caused by the recent introduction of coloured text.
        * Fix for the initialisation of the Exec_info class for the prompt/script output.
        * Fix for the residue.create user function GUI front end - the unnamed molecules are now properly handled, and the gui_to_*() methods are now used for data conversion.
        * Fix for the gui_to_int() function for when text instead of an integer is given by the user.
        * Bug fix for the spin.create user function GUI interface for when molecules or residues are not named - unnamed molecules are now properly handled in the GUI page, and the residue name of None is properly converted into a NoneType prior to executing the back end.
        * Big bug fix for the deletion of analyses tabs from the GUI - this affects wxGTK users on Macs and Linux.  Now the spectrum and relaxation data list GUI elements have observer_register() methods, allowing the analysis delete_all() method to unregister all analysis specific methods from the observer objects.
        * Multiple unregistrations of observer methods are now possible without a RelaxError - this allows multiple code paths to unregister methods to allow for pre-removal of methods to avoid queued wx events in wxGTK from occurring on dead or missing objects.
        * Bug fix for the GUI when deleting analysis tabs - the deletion of analysis tabs was previously failing in certain cases.
        * Fix for a bug triggered by wxPython 2.9 when deleting the last analysis tab - the self.notebook object is now deleted when the set_init_state() method is called, allowing it to be properly accessed and recreated.
        * Converted the pipe switching with GUI tab switching to synchronous to avoid rare races (triggered by wxPython 2.9).
        * The analysis deletion buttons now do nothing if the notebook is not created yet - this avoids problems on the new wxPython 2.9 versions.
        * Fix for the radiobutton group in the Spectral_error_type_page of the peak intensity wizard.
        * Fix for the spin loading wizard of the spin window - the RadioButtons of the first page for selecting the spin loading method are now fixed.
        * Fix for the about relax window size for wxPython 2.9.
        * Fix for the relax controller find dialog on Mac OS X with wxPython 2.9.
        * wxPython 2.9 fix for the spin viewer window (at least for Mac OS X).
        * The maximize calls for the spin viewer window are now turned off for Mac OS X systems (this is a fix for the fink versions of relax).
        * Bug fix for Mac OS X - the main window is no longer started maximised (a fix for the fink version of relax).
        * Fix for the spin viewer window for wxPython 2.9 - this is for when you right click in the tree view panel on nothing.
        * Fix for the text on the 'finish' button of the GUI wizard - this was accidentally changed to 'apply'.
        * Bug fix for the spectrum.replicated user function for when it is called twice with the same IDs.
        * Bug fix for the relax GUI spin viewer window.  When right clicking on nothing in the tree view, an error would occur.  Now, instead, a special menu pops up with a single entry for loading spins.
        * Fix for the building of the relax C modules as universal binaries on Mac OS X - the linking was not functioning correctly, and the resultant module was build only for i386.
        * The relax Mac OS X dock icon is now turned off when using the wxGTK build of wxPython from fink - this prevents a little grey frameless window appearing with the largest of the relax Ulysses butterfly icons in the centre.
        * Bug fix for Mac OS X - attempt at killing the Carbon.Evt.TickCount problem by removing argv emulation.
        * Fix for the scons binary_dist target on Mac OS X systems with multiple Python versions - now the py2app program is called with the same python version as used by scons.
        * Fix for the Processor.data_upload() method.  The self.run_command_queue() method is no longer being used.  Instead the add_to_queue() method is being used to queue up the slave commands, and the run_queue() method is being called at the end to flush the queue.
        * Fixes and clean up of the slave to master transfer mechanism for result commands.
        * Fix for the relax info print out on Python 2.5 or below.



Version 1.3.14
(19 March 2012, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.14

    Features:
        * An expanded system information printout (from 'relax -i').
        * Improvements to the multi-processor implementation, including creation of a public API and a reference implementation.
        * Overhaul of the multi-processor stream capture design - the slave IO streams are now properly redirected to the master processor and the master no longer overrides stream capture by the relax user interfaces.
        * Numpy data structures are now supported in relax save files.
        * Implemented the rdc.delete and pcs.delete user functions.
        * Speed ups of a number of user functions involved in looping over atomic or spin specific data - this can be significant if a lot of structural operations are performed, or a large number of structures are required.
        * Redesigned how spin parameters are handled in the specific analyses (which includes parameter name changes).


    Changes:
        * The MS Windows text wrapping width has been changed from 80 to 79 - this now fits the cmd prompt.
        * The program intro print out and prompt UI help system is using the new Status.text_width variable to wrap text.
        * The model-free constraint matrix A is now of numpy.int8 type - this is to decrease virtual memory usage and increase the scaling efficiency on clusters.
        * Changed all relax website links to http://www.nmr-relax.com for consistency.
        * The setup.py script can now be imported for the epydoc API documentation system.
        * The extern and minfx.scipy_subset relax packages are excluded form the API documentation.
        * Added the ability to skip scripts in the package __all__ list unit test checks.
        * Added some code to detect the bit version of MS Windows in the information print out (to better distinguish 32 vs. 64-bit versions).
        * Added some documentation about master processors on Linux 2.6 eating 100% of one CPU core (in the mpi4py multi-processor fabric).
        * Added a reference implementation to the multi-processor package - this is to demonstrate to users of the package how an implementation is created via the public API.
        * Elimination of all relax dependencies from the multi-processor package.
        * Added support for the memory size on MS Windows to the relax info print out.
        * Updated the value.set user function unknown parameter error message to list the known ones.
        * For Unix and GNU/Linux systems, the relax info printout now shows the ram and swap size.
        * Expansion and improvement of the information printed out by 'relax --info'.
        * Expansion of the multi-processor API documentation.
        * Expansion of the multi-processor package documentation with a step by step usage guide - this should increase the usability of the package by clarifying how one should use it.
        * Expansion and improvements to the multi-processor package and module docstrings.
        * The finish button in the new analysis wizard has been renamed to "Start".
        * Created a special Verbosity singleton for controlling the multi-processor package print outs.
        * Future proofed the relax codebase by replacing all ''' with """ in the docstrings.
        * Removed the unnecessary try statement in the model-free Slave_command.run() method as exception handling is correctly performed on the slave and master.
        * Shifted the Memo object into its own module (multi package).
        * Simplification and abstraction of the Slave_command.run() method to shift all exception handling into the package.  Therefore program code no longer needs to handle the multi-processor specific errors.
        * Created a new module 'multi.misc' for holding miscellaneous functions used throughout the multi package.
        * Created a public API for the multi-processor package, available via multi.__init__.
        * The load_multiprocessor() function is no longer a static method of the Processor base class.  This function loads the correct Processor class, so doesn't need to be a method of the base class and operates cleanly and more clearly as a stand alone function.
        * Clean up of the processor IO module (multi package).
        * Eliminated all usage of sys.__stdout__ and sys.__stderr__ in the multi-processor package - this returns full control of IO streams to the parent program.
        * The float arg checks now checks against all the numpy float types (float16, float32, float64, float128).
        * Added value.write user function calls to the J(w) mapping system test script.
        * Added some value.write user functions to the J(w) mapping sample script.
        * Modified the J(w) mapping test data to include relaxation values of None to trigger bug #19329.
        * Speed up for the generic_fns.relax_re.search() function.
        * More speed ups for the Selection.__contains_mol_res_spin_containers() method.
        * Reordered the checks in Selection.__contains_mol_res_spin_containers() - this cuts the number of function calls down by avoiding relax_re.search() calls if residue or spin numbers match.
        * Simplified the generic_fns.relax_re.search() function - this is to minimise the number of isinstance() calls when dealing with the relax mol-res-spin sequence data.
        * Updates for Python 3.0 using 2to3.
        * Removal of a number of debugging print out statements.
        * Significant speed ups of the return_spin() and return_residue() functions.
        * Added a print out for the diffusion_tensor.init user function to inform the user of an angle unit change - this is in response to bug #19323 to make it clearer that a parameter conversion has occurred.
        * Created a special specific API object called SPIN_PARAMS - this will be used to handle all operations to do with model parameters.  The object Param_list has methods for parameter initialisation and handling (where all info is specified such as Grace string, units, default value, etc) and for determining if a parameter exists.
        * Mass conversion to the new GLOBAL_PARAMS and SPIN_PARAMS specific API data structures.  The parameters are now all lowercase, for example ['S2', 'te', 'Rex'] is now ['s2', 'te', 'rex'].  The follow parameters are now converted throughout relax: 'bond_length' to 'r', 'CSA' to 'csa', 'heteronucleus' to 'heteronuc_type', 'proton' to 'proton_type'.
        * Created a new algorithm for finding the pivot of motion between different structural models - this is available through the structure.find_pivot user function.
        * Added the validate_models() method to the structural API - this is used to check that the models are 100% consistent.
        * Added the centroid argument to the structure.superimpose user function - this allows for the superimposition of structures assuming a pivoted motion.


    Bugfixes:
        * Fix for the title of the analysis selection wizard GUI element.
        * Fix for the MemoryError during the "final" run of d'Auvergne Protocol affecting 32-bit systems (bug #19528).
        * Epydoc docstring fixes for the API documentation.
        * Bug fix for old numpy versions missing the float16 object.
        * The relax prompt mode now prints the intro message to sys.stdout - this fixes this mode with the logging option or in the mpi4py multiprocessor mode.
        * Fix for the storage of numpy data structures in the relax save files - if special structures are created by the user, these were not correctly stored.  The precision was often too low (printed at the numpy default of a precision of 8), and if one dimension had more than 1000 elements, ellipses would be stored instead (the ellipses would cause the save file to be unreadable by relax).
        * Created the SplitIO.flush() method so that a flush() call now works with the -t and -l command line args - this simply calls the flush() methods of both streams.
        * The relax data store __repr__() method now prints out all objects within the base object.
        * Fix for a rare bug in the model-free analysis for when relaxation data of None is encountered.
        * Fixes for the Dasha system test for the bug #19332 fix.
        * Fixes for the Dasha use functions for file creation and data extraction - this should now handle relaxation data values of None, and also set the parameter values of deselected spins using the Dasha output files.
        * Big bugfix for the value.read user function - the wrong spin ID string was being used to set the parameter value so that all spins have the same value set for the parameter(bug #19332).
        * Bug fix for the consistency testing analysis for when relaxation data of None is encountered.
        * The spin is now deselected if there is really less than three data points, excluding data points of None (bug #19329).
        * Bug fix for the arg_check.is_none() function - the RelaxNoneError was not imported!
        * Fix for the numbering of the TER record and subsequence HETATM records in the PDB file creation.  The structure.write_pdb user function now creates the correct TER record after the ATOM records, and the HETATM records are renumbered if needed.
        * Bug fix for the compilation of the user manual.  The molecule user function class used the temporary variable i, which was causing the fetch_docstrings script to fail.



Version 1.3.13
(10 November 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.13

    Features:
        * The positive and negative cones from the frame order theory are now different PDB models.
        * Monte Carlo simulations are now implemented for the frame order analysis.
        * Created the structure.connect_atom user function to expose the back-end functionality.
        * Created the structure.add_atom user function to expose the back-end functionality.
        * Created the structure.translate user function to translate structural components.
        * Created the structure.superimpose user function which uses the Kabsch algorithm to implement the direct fit-to-first algorithm and the iterative fit-to-mean algorithm.
        * Created the structure.displacement user function to calculate the rotational and translational displacement between two models via the Kabsch algorithm.
        * Extended the N-state model analysis to allow a separate paramagnetic centre per state.
        * The structure.read_pdb user function can now handle bzip2 or gzip compressed PDB files.
        * The structure.write_pdb user function can now create compressed (bzip2 or gzip) PDB files.
        * Created the structure.rotate user function to allow the application of arbitrary rotations to the structures loaded into relax about a given origin.
        * Added the bc flag to the RDC and PCS display and write user functions to allow the back-calculated data to be displayed or written rather than the measured values.
        * Increased the efficiency of the relax data store spin system creation, this becomes noticeable when large numbers of structures are read into relax.
        * The N-state model can now be optimised with a subset of the alignment tensors fixed.
        * The alignment_tensor.fix user function is now tensor specific, allowing a subset of tensors to be optimised while the others are kept fixed.
        * Added the ability to specify J+D verses J+2D measured RDCs.
        * Addition of many new oxygen icons for the GUI.
        * Implemented the sys_info user function in all UI modes (prompt/script/GUI).
        * Implemented the spectrum.delete user function in all UI modes (prompt/script/GUI).
        * Addition of the pymol.macro_apply, pymol.macro_create, and pymol.macro_run user functions for the visualisation of model-free parameters mapped to a structure.  This matches the equivalent Molmol user functions and styles.
        * A complete redesign of the GUI where any number of analyses can be created and closed as needed.
        * The GUI is now fully functional on Mac OS X and MS Windows.
        * The elimination of many race conditions causing the GUI to crash.
        * Implementation within the GUI of many of the relax user functions available in the prompt and scripting UI modes.
        * Creation of the test suite GUI test category to complement the system and unit tests.
        * Added a toolbar to the main relax window with some of the most important menu entries as icons.
        * Most parts of the GUI are now deactivated when execution is in progress (via the execution lock) to prevent fatal race conditions.
        * Redesigned the dauvergne_protocol, NOE and Rx auto-analyses to use a pre-prepared data pipe for data input.  This allows greater support for the GUI and for analyses of RNA, DNA, and small molecules.


    Changes:
        * Changed the name of the model_num argument to model in the centre_of_mass() function.
        * The generic_fns.structure.mass.centre_of_mass() function now accepts the model number argument, allowing specific models to be isolated.
        * The generic_fns.structure.mass.centre_of_mass() function now accepts the atom ID argument, allowing the centre of mass of subsets of the structure to be calculated.
        * Addition of a number of frame order test data and system tests for the simpler models (Frame_order.test_cam_rigid, Frame_order.test_cam_free_rotor, Frame_order.test_cam_free_rotor2, Frame_order.test_cam_rotor, Frame_order.test_cam_rotor2, Frame_order.test_cam_iso_cone_free_rotor, Frame_order.test_cam_iso_cone_free_rotor2).
        * More use of the structural API in the create_diff_tensor_pdb() function.
        * Created the add_model() structural API method.
        * Eliminated one of the eigenframe parameters from the rotor frame order model.  In the rotor frame order model, the x and y axes of the eigenframe of the motion are not defined.  Therefore the 3 eigenframe Euler angles have been replaced by 2 spherical angles defining the rotation axis removing a lot of optimisation issues with this model.
        * The frame order torsion angle cone_sigma_max is now forced to be positive.  Optimisation sometimes comes up with the negative of the angle but, as both the negative and positive angles are the same result, the angle is always unpacked after optimisation as the absolute value.
        * Added a check to prevent the frame order grid search from being too big causing out of memory errors.
        * The internal structural object no longer requires the 'ATOM' PDB record for creating PDB files.  This affects the structure.write_pdb user function.
        * Added the translate method to the structural API.
        * Created the Structure.test_superimpose_fit_to_mean system test to test the 'fit to mean' algorithm of the structure.superimpose user function.
        * Shifted the structural API calc_displacement() method into the main module.
        * Created the arg_check.is_int_list() function for checking for lists of integers.
        * Created the Structure.test_superimpose_fit_to_first system test to test the 'fit to first' algorithm of the structure.superimpose user function.
        * Added the centroid argument to the structure.displacement user function for pivoted motions.  By specifying the centroid position for all structures, a pivoted motion is assumed.  All displacements will be zero, and the angles will be that of the pivoting motion.
        * Created the Structure.test_displacement system test for checking the structure.displacement user function.
        * Added checks for the n_state_model.cone_pdb user function in the N_state_model.test_5_state_xz system test.
        * Added a few new argument checks for arrays and matrices of floats including arg_check.is_float_array() and arg_check.is_float_matrix().
        * Added a few new RelaxError classes (RelaxNoneListFloatError, RelaxMatrixFloatError, RelaxNoneMatrixFloatError) and the BaseArgError class was also modified to handle the length argument (now the size arg) being a tuple for matrix sizes.
        * The N-state model Monte Carlo simulations can now handle fixed alignment tensors.
        * Created the alignment tensor module return_tensor() function for returning tensors.  This takes fixed tensors into account, skipping them if the skip_fixed flag is set.
        * Created the alignment tensor module num_tensors() method for counting tensors.  This excludes fixed tensors by default.
        * The RDC and PCS display and write user functions now output molecule name, residue name, residue number, spin name and spin number columns instead of the spin ID column.  This is better to read back into relax as info such as the spin number can be ignored, allowing different PDB files to be used.
        * Created a system test for loading RDCs from a file with spin ID strings at the start.
        * Created the N_state_model.test_metal_pos_opt N-state model system test.
        * The RDC and PCS Q factors for each alignment is now stored as a dictionary in the relax data store.
        * Updated the N-state model analysis code to handle the per-alignment tensor fixed flag.
        * Updated the relax data store alignment tensor objects to allow for the per-tensor fixed flag.
        * Created the generic_fns.align_tensor.all_fixed() function for determining if all tensors are fixed.
        * Created the Grace.test_cam_kkalpha_plot1 system test for checking the grace plotting of mixed data.
        * Created the N_state_model.test_monte_carlo_sims system test for checking MC sims with alignment data.
        * Updates for Python 3.0 using the Python 2to3 script.
        * Created the N_state_model.test_rdc_tensor system test for catching a strange RDC back calculation bug.
        * Created the Mf.test_bug_18790 system test for catching bug #18790.
        * Created the Relax_fit.test_bug_18789 system test for catching bug #18789.  The Grace file is written out, re-opened, and then the numbers checked.
        * The GUI test result classes are now being used by the GUI test suite code path.
        * Implemented some new classes to allow better control of the test suite from the GUI.  The GuiTestResult and GuiTestRunner classes have been added to the relax_test_runner module, and these are used rather than RelaxTestResult and RelaxTestRunner if the from_gui flag is sent to the main Test_suite_runner class.
        * The test result handling is now performed 100% in test_suite_runner.  Previously each class of test (system, unit, and GUI) were managing a separate instance of RelaxTestRunner.  Now it is all controlled from one spot.  This will allow better management of the tests from the GUI.
        * The results of the unit tests are now going to the proper sys.stdout stream.  The text was previously sent to the initial stream that sys.stderr is set to.  This is overwritten by relax though to be able to send it to the relax controller.  This allows the results to be captured.
        * Added the 'Tools->Test suite' menu entry.
        * The checks in the model-free analyses for correct relaxation data errors now prints out the spin ID string.
        * The test suite runner 'tests' argument now defaults to [] which is the proper null value.
        * Renamed the 'Settings' menu to 'Tools'.
        * The results viewer window now only executes one user function for the diffusion tensor if PyMOL is missing, preventing 3 errors (with windows) from appearing.
        * Modified the GUI interpreter apply() method to catch RelaxErrors.  Now gui_raise() is used to raise the error and show a dialog, and the method returns the execution status.
        * The diffusion tensor PDB in the results viewer is now launched by synchronous pymol user function calls.
        * The C modules are now compiled as universal binaries on Mac OS X.  This includes the targets i386, x86_64 and ppc64 by default.
        * The relax information print out now includes the version and path info for the mpi4py and wx modules.
        * The spectrum ID is no longer stored if spectrum.read_intensities fails to load any data.  A call to the delete() function has been added to remove all data loading prior to the error.
        * Redesigned the gui_raise() function so that it is more user friendly.  The relax controller window with error message is shown first, followed by the modal RelaxError message dialog on top of all other windows.
        * The spectrum.read_intensities user function now throws a RelaxError if no data was loaded.  This is to tell the user that something went wrong, and makes more sense in the GUI mode.
        * With debugging turned on, the relax test suite no longer captures the IO streams.  This will allow for better debugging of racing in the GUI tests on MS Windows.
        * Removed the brackets from the user function names in the RelaxError system as these make no sense in the GUI version of the user functions.
        * Clicking on 'Execute relax' now raises the relax controller to the front, if already shown.
        * The GUI prompt window is now also deactivated with the execution lock.  This will prevent race conditions as previously the user was able to execute any user function or manipulate any of the data in the relax data store while execution was in progress
        * More of the main menu entries have been disabled with the execution lock to prevent racing.
        * The spin loader toolbar button in the spin viewer window is now properly disabled with the execution lock.
        * The spin loader button in the spin viewer window is now deactivated with the execution lock.
        * The wizard page base method on_apply() now does nothing.  This should help eliminate Mac OS X bugs.
        * The scipy python package is now listed with the relax info (-i flag).
        * The peak list and relaxation data GUI element pop up menus are now disabled with the execution lock.  This will prevent weird bugs.
        * The spin viewer window is now properly maximised on MS Windows.
        * Improvements to the showing of the relax controller on errors and warnings.  The Show() call is no longer made if already shown, and if not shown, the LogCtrl is scrolled to the position of the error message.
        * The relax controller is now shown on all errors and warning (or raised if below other windows).
        * The View menu entries now raise the window to the front if already open, this is useful when too many windows are open.
        * The spin.name page is now added to the front of the Rx peak list wizard.
        * The spin.name GUI page is now added to the front of the NOE peak list wizard if spins are not named.
        * Expanded the spin.name user function docstring.
        * Shifted the spin ID field to the end of the spin.name user function GUI page, this is to make it easier for users as it is often assumed that the first field is the important one.
        * The proceed_on_error flag is now taken into account by the wizard's finish button.
        * The Rx peak list wizard now no longer skips to the next page when an error occurs.
        * All GUI user functions now use the base page execute() method instead of the interpreter directly.
        * Created the user function base page execute() method for running the user functions.  This will launch the interpreter in either asynchronous or synchronous mode dependent on the sync flag.
        * The sync flag is now set for all of the pages of the NOE peak list wizard.
        * The UF_page base class now accepts the 'sync' argument, this will be used to allow for asynchronous or synchronous operation.
        * The NOE peak list wizard should now stop proceeding on all errors.
        * Modified all of the gui_to_*() functions to catch a real None input value.
        * Created the gui.misc.gui_to_str_or_list() conversion function.
        * Created the gui.misc.gui_to_int_or_list() conversion function.
        * The relax controller menu now has icons.
        * The relaxation data list GUI element now has a pop up menu with a 'Delete' entry.
        * The relax data list delete button now opens with the first selected item in the list.
        * The relax_data.delete GUI user function can now have a starting ID string value.
        * The peak list GUI element ListCtrl now has a pop up menu with a 'Delete' entry.
        * The peak list GUI element now has a delete button which launches the spectrum.delete user function.
        * The spectrum.delete user function can now be started with an initial ID string.
        * Created the RelaxSpectraError and RelaxNoSpectraError error classes for spectral data.
        * Improvements to the wizard _display_page() method.
        * The user function class is no longer stored in self.gui.
        * Elimination of the self.gui class object.
        * Converted the results viewer window to handle the new user function GUI page design.
        * Better support for running a script and the GUI from the command line, the script is now run at the very end, after all of the GUI is set up, and is run with a wx.CallAfter call.
        * The spin loading wizard is now accessible from the tree's root menu in the spin viewer window.
        * Added a toolbar button to the spin viewer window to launch a wizard for loading spins.  A simple wizard has been created for the spin viewer window for loading spins which directs the user to either the sequence.read user function or the structure.read_pdb and structure.load_spins user functions.  The wizard page Load_method_page has been added at the start to allow the user to choose the method, and the last page Finish_page has been added so that the wizard can have a finish button and terminal page.
        * Converted all of the user function GUI pages to use the new create_wizard() base method.  This significantly simplifies the code.  The functions also no longer expect a wx event.
        * The deselect user function GUI pages no longer expect the user function page to be returned.
        * Added the return_page argument to create_wizard() so that the user function page can be selectively returned.
        * Complete redesign of the user function menu system, this is now more flexible and should be more compatible with window ordering under MS Windows.
        * Simplified the deselect user functions using the new GUI user function design.
        * The create_wizard() method now returns the user function page, this will be needed as sometimes the fields have to be changed.
        * Removed the now useless UF_base.__init__() method.
        * The User_functions class no longer takes any arguments.
        * The interpreter singleton is now being used by the user function GUI pages (part of the elimination of self.gui).
        * The relax GUI no longer starts maximised if debugging is on.
        * The script GUI user function is now operational again, the interpreter object is now imported and the synchronous apply() rather asynchonous queue() method is now used.  This allows the execution lock to be released by the script at the end.
        * The script user function GUI element now uses wx.GetApp() to access to the relax controller window.
        * The GUI Main instance is now stored in the wx.App as self.gui, this will allow access to the GUI class via wx.GetApp() calls, avoiding the need to pass the instance around (part of the elimination of self.gui).
        * The screen is no longer cleared prior to relax execution on MS Windows preventing the Windows PowerShell history from being wiped out.
        * Improved the RelaxError messages in validate_sequence(), the invalid data is now printed so that the user can see why it is invalid.
        * Improved the print outs of the scons 'binary_dist' target for Mac OS X.
        * Modified the 'clean' scons target to remove the py2app build and dist directories (for Mac OS X).
        * Created the 'scons binary_dist' target for Mac OS X.  Typing 'scons binary_dist' on a Mac will now create a DMG image of a universal Mac OS X application.
        * Added the Mac OS X DMG distribution file names to the scons script.
        * Modified the setup.py file so that the Mac OS X .app creation code is in the mac_setup() function.
        * Updated the hdiutil command options for the Mac OS X DMG file creation.
        * Added instructions to the setup.py file for creating a Mac OS X DMG distribution file.
        * Removed the GUI wait_for_interpreter() method as this is replaced by the interpreter flush() method.
        * Text files in the results viewer window are now opened with a text editor on Mac OS X and MS Windows.  On a Mac, the text file of NOE values was being opened up in 'Saturn', as the file ending '*.out' is associated with that software.
        * The gui_error() window caption is now simply 'RelaxError' rather than the specific relax error name, this now matches the prompt/script print outs which only have RelaxError (unless debugging is turned on).
        * The GUI tests in the test suite no longer have IO redirected to a window in Mac OS X and MS Windows.
        * Deleted the old gui.filedialog.opendir function and replaced it with a specialised RelaxDirDialog class.  This class is more advanced in that it changes the Python working directory so that the user does not have to always navigate back to the same place if relax is launched from a different directory.
        * The RelaxFileDialog object now changes the relax working directory as the user changes directories.
        * The Rx spectra list wizard now uses the on_init() wizard page method for the page updates.  This prevents the values in the pages being reset when the apply button is clicked.
        * Created the GUI wizard page method on_init(), this is executed each time a wizard page is newly displayed.
        * Removed the check for Monte Carlo simulations from the monte_carlo.setup user function allowing MC simulations to be run more than once.
        * The results viewer window no longer shows 1 warning dialog per results file.  At the end of the analysis, one warning dialog per results file was being shown as the execution lock was on.  Now a special method for the 'result_file' observer object has been added which skips this dialog.
        * The Monte Carlo simulation state is now turned off after the MC analysis is complete.  This allows the user to make slight modifications and rerun the analysis and optimisation.  The monte_carlo.error_analysis user function switches the state at the very end, just as monte_carlo.setup switches the state to on.
        * The relax execution lock now has debugging print outs.
        * The status container instance is now private in the Relax_lock objects.
        * The fake_lock variable in the status module classes is now private.
        * The spin_id_to_data_list error messages are now more informative.
        * The RelaxInvalidSeqError now prints out a more detailed message for the validate_sequence() function.
        * The flush flag is set for the first page of the Rx peak height loading wizard.
        * Added the ability to flush the GUI interpreter thread in the wizard prior to changing to the next page, this will help in solving races when a series of user functions are strung one after the other.
        * The notification of observers in status.observers.gui_uf has been modified.  The GUI user function pages no longer perform this as the calls to the interpreter are via the interpreter thread, hence the completion of the page does not signal the completion of the user function.  Instead the interpreter thread (and the synchronous apply() call as well) perform the notification once complete.
        * The GUI auto-analyses now initialise with a synchronous call to pipe.create(), this uses the GUI interpreter object apply() method to prevent race conditions.  This is important as the pipe creation needs to be completed prior to the setting up of the GUI elements.
        * Created the GUI interpreter object apply() for synchronous calls to the user functions.
        * Redesigned the GUI interpreter object so that the thread is a separate object, this is to allow both synchronous and asynchronous calls to the interpreter.
        * Added the _get_uf() method to the GUI interpreter object for abstracting the code.
        * All the model-free macro methods are no longer private, the class will not be used as a base class for the model-free specific class.
        * Abstracted the model-free 'classic' Molmol and PyMOL creation in to a base class.  As most of the code between the specific_fns.model_free.molmol and specific_fns.model_free.pymol modules is identical, significantly simplifying the code base.
        * The results viewer window can now open Molmol macro files.
        * The results viewer will now open PyMOL files in PyMOL via pymol.macro_run.
        * Modified the Molmol macro related user function front end to match those of PyMOL, there are: molmol.macro_exec is now molmol.macro_apply; molmol.write is now molmol.macro_write; molmol.macro.run has been added to execute macros from text files.
        * The GUI interpreter thread is now flushed prior to execution of the auto-analyses.
        * Created the GUI interpreter thread flush() method for blocking until the queue is empty.
        * Added a join() wrapper method for the GUI interpreter thread internal queue.
        * Added the empty() method to the GUI interpreter thread to determine if the internal queue is empty.
        * Some cleaning up of the mpi4py processor module.
        * Removed a pile of unused code from the mpi4py processor module.
        * Removed the _sys_exit module variable from the mpi4py processor as it is unnecessary.
        * Eliminated the restore_stdio() method from the multi package, the redirection of IO streams is totally incompatible with an IO redirection performed by the underlying Python program.
        * Removed the IO redirection from the uni-processor return_object() method.  The IO redirection in the 'multi' package overwrites all IO redirection any Python program is attempting to perform.
        * The uni-processor call to capture_stdio() has been removed, no IO redirection will be performed in uni-processor mode.
        * Deleted the STDOUT and STDERR capture in MF_minimise_command multi-processor class as it was breaking both the GUI and the test suite.
        * Removed the multi_processor module as this is now called multi_processor_base.  This was deleted a long time ago but somehow survived in one of the branches and was merged back in.
        * Renamed the PrependOut class to IO_filter in multi/processor_io.py.
        * Renamed the prependStringIO module to processor_io in preparation for a redesign.
        * Clean up of the multi-processor IO module.  The Multiplex_stdout class has been deleted as this is the wrong way of handling the IO streams and is unused anyway.  The PrependStringIO class has had the getvalue() and truncate() methods removed as these need not be implemented as it is provided by StringIO.
        * Created Redirect_text.flush() for the relax controller for compatibility with the multi-processor code.
        * All calls to user functions in self.gui.interpreter now pass through the queue() method.
        * The 'relax_gui_mode' module is blacklisted from the epydoc documentation generation.  Without this, the relax GUI launches when executing 'scons api_manual_html'.
        * The dauvergne_protocol auto-analysis now creates the PyMOL macros for the model-free data.
        * The molmol.write and pymol.write now add the macro files to the result files list.
        * The dauvergne_protocol auto-analysis now generates MOLMOL macros and text files with the parameters.
        * The interpreter thread no longer dies when an error occurs.  This has been redesigned so that the error catching occurs within the infinite loop.  Without this the user functions are completely useless after an error and do nothing.
        * RelaxErrors are handled as in the auto-analyses and prompt/scripting mode in the GUI user functions.  The traceback is now suppressed and a dialog with the error is show.
        * The print outs for catching exceptions in threads is now going to STDERR rather than STDOUT.
        * sys.__stdout__ and sys.__stderr__ are no longer being written to.
        * Saving the relax state from the GUI now shows the busy cursor for user feedback.  After MC sims saving the state can take a few seconds with the GUI frozen, so this feedback is necessary.
        * Errors are now handled properly in the interpreter thread for GUI user functions.
        * The GUI analysis execution threads are now daemonic to allow relax to exit.
        * Redesigned how user functions are executed in the GUI so they are queued and launched in a thread.  This allows the GUI to be responsive while the user functions execute.  This is only at the level of the GUI and not the relax interpreter.  The execution lock is also acquired to lock up the GUI while the user function executes.  A special daemon thread called self.gui.interpreter has a queue object so that a series of user functions can be queued up if needed.  The program now also exists with wx.Exit() call to prevent unhandled exceptions occurring in this daemon thread.
        * The pipe.create user function page is now using PIPE_DESC to present a list of pipe types for the user.  This gives the descriptive name of the data pipe type rather than the keyword argument values.
        * Created the PIPE_DESC dictionary to provide descriptions of the data pipes.
        * The consistency testing and hybrid data pipes are now listed in the pipe.create user function docstring.
        * The GUI now returns to normal when opening an invalid or incompatible save file.
        * Molmol is now properly launched from relax to read commands from STDIN.
        * Synchronised the code for handling Molmol and PyMOL.  The Molmol code is now very similar to that of PyMOL, using subprocess.Popen rather than os.popen.  There is now a Molmol execution object that is used by the molmol user functions.
        * The GUI tests are now skipped when the wx module is not present (or is broken).  This allows relax to operate without having wx installed.
        * Modified the dauvergne_protocol auto-analysis to be able to loop over all the global models.  The diff_model argument can now be a list of global model names, allowing the protocol to loop over each diffusion model.
        * The results viewer window also updates via the result_file observer.
        * The result_file observer object has been created and is being used throughout relax.
        * PyMOL is now always launched as an external program as the pymol module loading method was causing huge problems for the GUI.
        * Diffusion tensor PDB files are now opened in PyMOL from the results viewer window.
        * The cdp.result_file structure has been modified to include a type, a label, and the file path.
        * The results viewer window presents the results files in a wx.TextCtrl.
        * The results viewer window is deactivated with the execution lock.
        * Modified the results viewer to operate like the spin viewer with respect to pipe changing.
        * The results viewing code (the viewer window) has now been separated from the analysis GUI code.
        * A diffusion tensor representation of the final results is created for dauvergne_protocol.
        * Grace plots of the final model-free results are now produced by the dauvergne_protocol auto-analysis.
        * Deleted the status_reset() method from the dauvergne_protocol auto-analysis as it served no purpose.
        * All the data pipes are cleared out in the final stage of the dauvergne_protocol.  This is to remove many of the temporary data pipes from view of the user in the GUI.
        * Removal of the unused gui.execution.calc_modelfree module.  This was a direct copy of the auto_analyses.dauvergne_protocol module, but is unmaintainable and of no use in the GUI anymore.
        * Modified the pipe editor window design to be closer to that of the spin viewer.  The observer methods are now unregistered on closing the window, which should speed up relax.
        * The data pipe and spin viewer window Show() methods are now only called if IsShown() is False.
        * Warning dialogs are shown if the pipe editor or spin viewer windows are opened during the execution lock.
        * Improvements to the user warning dialog about closing windows, the dialog is now only shown once at the start and it blocks the auto-analysis.
        * Added a message dialog to warn the user to close the spin viewer and pipe editor windows to speed up calculations.
        * Deleted the unused dir_message(), exec_relax() and relax_run_ok() message functions.
        * The pipe_lock and spin_lock (via Relax_lock) locks are now reentrant locks.  This allows nested locking via one thread, which is necessary as the functions of generic_fns.pipes and generic_fns.mol_res_spin often call functions of the same module in a nested way.
        * Created an object called Relax_lock to help debug locking issues in relax.  The status.spin_lock lock is now using Relax_lock.
        * All of the generic_fns.mol_res_spin fns which modify the data structure are now using the new lock.
        * Created the status.reset() method to resetting the status object.
        * Created a lock object for the molecule, residue and spin data structures.  This will be used to prevent races when spin data is being accessed and changed at the same time.  This affects the spin viewer window which is very sensitive to races.
        * The relax controller window is calling Layout() after updating to show all panels properly.  This is needed when showing the model-free or Rx panels.
        * Clean up of the showing and hiding of spin viewer window, all observers and registered now in the Show() method and unregistered in handler_close().
        * The R1 and R2 curve-fitting tabs are completely deactivated by the execution lock.
        * The NOE auto-analysis tab is completely deactivated with the execution lock.
        * The execute relax button is now turned off by the execution lock in the model-free auto-analysis tab.
        * The GUI analysis base class add_execute_relax() method now returns the button.
        * The add_spin_systems() base class method now returns the Text_ctrl instance it creates.
        * Converted the analysis base class add_text_sel_element() method to the object Text_ctrl.  This has the Enable(), SetValue(), and GetValue() methods implemented as a wx object.
        * Renamed the 'spin_ctrl' module to 'elements' to store all of the special GUI analysis elements.
        * More enabling/disabling of the model-free auto-analysis GUI element.
        * The spectrum list GUI element can also now be enabled/disabled via Enable().
        * The relaxation data list GUI element can now be enabled/disabled via Enable().
        * All the model-free auto-analysis activation and deactivation calls now pass through wx.CallAfter.
        * The model-free model fields are now activated/deactivated with the execution lock.
        * Created the Spin_control object for the analysis GUI elements from the base add_spin_element() method.  This class implements the Enable(), GetValue(), and SetValue() methods to mimic a wx control.
        * Tooltips are now given for the relax controller gauges and text fields.
        * The spin viewer tree pop up menus are now disabled when the execution lock is on.
        * All the spin viewer tree pop up menus now have IDs as class variables via wx.NewId().
        * The spin viewer menus and pipe switching elements are now disabled when the execution lock is on.
        * Many of the 'File' menu entries are now disabled when the execution lock is on.
        * The main menu IDs are now all class variables called self.MENU_* and are given by wx.NewId().
        * The pipe editor window is starting inactive if the execution lock is on.
        * Most of the data pipe functions are now using the data pipe locking object status.pipe_lock.  The functions which acquire the lock object and which modify the pipe state include: copy(), create(), delete(), switch().  The functions which acquire the lock object to prevent changes while they execute include: display(), pipe_loop().
        * Created a lock object for the relax data pipes.  This will be used to prevent races in the GUI when data pipe info is accessed, but when a thread is changing the data pipes at the same time.
        * The pipe editor window methods are now deactivated when the execution lock is on.
        * The original zoom level is available in the relax controller log control pop up menu.
        * Zooming can now be changed with Ctrl-+, Ctrl-- and Ctrl-0 in the relax controller, enabling zoom in, zoom out, and the original zoom to be accessed by the keyboard.
        * Created a replacement pop up menu for the relax controller log control.  This has functions for finding text, copying text, selecting all, and zooming in or out.
        * The relax controller log control can no longer have text inserted.  This was happening with the middle mouse button click on GNU/Linux.
        * A find dialog is now available for the relax controller log control to find text in the messages, this is available with Ctrl-F.
        * Deleted the now unused gui.execution.calc_rx module.
        * The GUI dauvergne_protocol test now uses the same optimisation settings as the system test.
        * The diff_tensor_grid_inc dauvergne_protocol argument is now available in the auto-analysis GUI tab.  This is not exposed to the user though.
        * The dauvergne_protocol GUI test is now checking the same data as the equivalent system test.
        * The solution for the dauvergne_protocol system test is reached after 1 iteration, so the test is shortened.
        * Better testing of the new diff_tensor_grid_inc argument to the dauvergne_protocol auto-analysis.
        * The dauvergne_protocol system test script can now run stand-alone.
        * Re-activated and redesigned the system test of the dauvergne_protocol.
        * The unit vector loading wizard is now stored in the base model-free auto-analysis class.  This is for access to the GUI element from the test-suite.
        * Fix for the unit vector check in the model-free auto-analysis GUI tab.
        * Added a button and created a wizard for loading unit vectors from PDB files.  This has been added to the model-free GUI auto-analysis tab.
        * Unit vectors are now only checked for in the model-free GUI auto-analysis when needed.
        * Full errors are raised in the protected_exec() function if in debugging mode.
        * Improvements to the structure.vector user function docstring.
        * Created the wizard page spin_control() method for adding a spin control.
        * The results file viewer is now executing the grace.view user function to display Grace files.
        * Fix for the protected_exec() method - the error is no longer raised so it can return False.
        * Implemented the NOE data_names() and return_data_desc() specific API methods.
        * The gui_raise() method now turns off the busy cursor if needed.
        * Added the 'Help->Licence' menu entry (this is a simple copy of 'User functions->gpl').
        * The results viewer window now uses cdp.result_files.  This decouples the files and their creation from the GUI.
        * The grid search increments default to 21 now in the Rx fitting auto-analysis GUI tab, the MC simulation tooltip now also recommends a min of 500 sims.
        * In debugging and test mode, the relax controller now writes back to the original IO streams instead of sys.__stdout__ and sys.__stderr__.
        * The relax controller log control styles are now set to the 'modern_small' fonts.
        * Expanded and renamed the 'modern' fonts.
        * RelaxWarnings are now coloured 'orange red' in the log control of the relax controller.
        * The Monte Carlo simulation number is now stored in the auto-analysis part of the status object.  This is only when an auto-analysis is running.
        * The relax prompt is now coloured blue in the relax controller log element.
        * The STDOUT and STDERR streams are segregated in the relax controller LogCtrl and STDERR messages coloured red.
        * The relax controller log window can now distinguish between STDOUT and STDERR messages.  STDOUT and STDERR are now being sent to separate instances of Redirect_text, and added to the log queue with a flag specifying which is which.
        * The relax controller and auto-analysis threads are now active in debugging mode.
        * The relax controller Redirect_text object is now placing all messages onto a log queue and the LogCtrl is reading from this queue.  The log_queue Queue object is now used to store messages so that not every write() event to STDOUT and STDERR results in the relax controller log window updating.  This allows the controller and the GUI to remain responsive as masses of messages are produced.
        * The new relax controller now appears to be thread safe.
        * The relax controller window now can move behind the other windows.
        * Key events are now controlled in the relax controller log element, this prevents text insertion and deletion.
        * Scrolling now follows the end, if at the end, in the relax controller log window.
        * Implemented limited scroll back on the LogCtrl relax controller log element.  This will prevent the computer from running out of memory.  The maximum number of lines is now stored in the status singleton.
        * Created a custom control for the relax controller log element.  This is derived from wx.stc.StyledTextCtrl and will allow much greater control.
        * Renamed the relax controller IO redirection append_text() method to add_text().
        * The gui_raise() function now only shows the dialog if the status.show_gui flag is set.
        * Shifted the exception_queue object into the base of the status object.
        * The spectrum.error_analysis can now be repetitively performed, this allows changes such as addition of new spectra to occur.
        * A timer is now being used to update the gauges of the relax controller, the gauges were previously not pulsing correctly.
        * The Question message dialog answer is now set to 'No' if the window close icon is clicked.
        * The Missing_data and Question message dialogs are now always on top, this prevents them from being hidden by other windows.
        * The gui_to_float() and gui_to_int() functions can now handle float or int inputs.
        * All of the gui_to_*() functions now check for empty unicode strings u'' as well.
        * Modified the gui_to_float() and gui_to_int() functions to handle expressions, this means that the float '1.23 * 1e-6' or '1.234 * 4 - 0.06' can input by the user.
        * The font is now set on the text of the Question message box.
        * Added checks for sequence and spectral data for the Rx curve-fitting and NOE auto-analysis GUI tabs.
        * All buttons in the GUI now have their fonts set.  This is for GUI consistency between GNU/Linux, Mac OS X and MS Windows.
        * The about relax dialog is now resized dependent on the extent of the text, fixing the dialog on MS Windows.
        * The wx.lib.wordwrap module is now used for wrapping the text in the about GUI dialogs.
        * Shifted the font initialisation to the very start of the GUI launching.
        * The results files lists are only updated if the files are not already there.
        * Complete redesign of the relax controller.  The new features include: A dynamically updated analysis specific status update; Analysis specific GUI elements, dynamically hidden or shown; A display of the current analysis and current data pipe; Correct updating of the gauges in all analyses; Separation of the text redirection and the progress updating; Text scroll back limited by default to 100000 lines; Text scroll back cleared as a user would expect with removal of lines from the start; Cleaner layout of all elements.
        * The dauvergne_protocol auto-analysis now stores the maximum number of iterations value.
        * Created the GUI analysis current_data() method for returning the data store container.
        * The auto-analysis status objects are now set up for all auto-analyses.
        * The auto-analyses status objects now have a completion flag 'fin' to indicate if the analysis is complete.
        * Added a new analysis method current_analysis_type() for determining the current analysis type.
        * The opening of the results viewer window after an analysis is now thread safe.
        * There is now an observer object for the execution lock.
        * The text redirection to the relax controller is set up in the controller removing repetition.  The redirection was happening in the controller first and then again in each analysis.
        * Modified how the auto_analysis status object behaves so setting values causes an observer to be notified.
        * The fonts are now set for all parts of the wizard pages for OS consistency.
        * The results display window is now shown at the end of the auto-analysis execution.
        * A busy cursor is now shown while waiting for the new analysis wizard.
        * The save_state flag has been added to the NOE auto-analysis so that the save state can be turned off.
        * Removed the no longer used GUI NOE calculation module (gui.execution.calc_noe).
        * The status bar is properly updated to show nothing if all data pipes have been deleted.
        * The setting up of a new analysis tab now uses freezing and thawing and the busy cursor.
        * The new_analysis method now checks that the C modules are compiled, and returns cleanly if not and an R1 or R2 analysis is selected.
        * The save state dialog now only shows *.bz2 files to save as.
        * The spin viewer now starts maximised on GNU/Linux and MS Windows, and at a smaller size on Mac OS X.
        * Polishing of the Question message dialog.  The buttons are now of fixed width and aligned to the right, and the relax-blue version of the dialog-warning oxygen icon is being used.
        * Created a relax blue version of the dialog-warning oxygen icon.
        * Layout improvements in a number of user function and other wizard pages, the description heights are now used (the variable had been renamed), and the free file format GUI element containing user function pages now use the space better and have been shortened.
        * The free file format resetting now properly updates the GUI element.
        * Polishing of the free file format GUI element.  The internal buttons are now placed to the right hand side rather than below to save large amounts of space.  A lot of unnecessary outside padding has also been removed, and the divider position is now properly calculated.
        * Updates to the GUI fonts, and the addition of normal_italic.
        * Improvements to the wildcards for the relax save state file dialogs.  There is now a separation between the compressed *.bz2 *.gz files and the 'All files' entry for selecting an uncompressed version.
        * The protected_exec() function now uses gui_raise() to handle errors.
        * The gui_raise() function now prints the error message to STDERR if the raise flag is not set.
        * Redesign of all the file dialogs in the GUI.  All file dialogs are now instances of gui.filedialog.RelaxFileDialog.  This fixes many inconsistencies throughout the GUI, includes presenting an wx.FD_OPEN style file dialog when a wx.FD_SAVE style should have been shown.
        * The PDB file selector of the structure.load_pdb GUI user function now only shows *.pdb files.
        * Removed combine_models from the structure.load_spins GUI user function page as that argument no longer exists.
        * Improvements to the free file format GUI elements (window and element).  This includes specifying fonts, button sizes, and a fix for the button sizer in the GUI element.
        * The GUI is now frozen while opening a relax state and then finally thawed, removing visual artifacts on Mac OS X.
        * Removed the 'Settings->Reset all settings' menu and added a reset button to the free file format settings.
        * The Question class can now have the parent specified to allow for sub-windows to have the dialog focus.
        * The missing data and question dialogs are now centred.
        * Converted the question() dialog launching function into a class derived from wx.Dialog.  This implements a custom yes/no dialog that is consistent between different operating systems.
        * Layout improvements for the wizard pages on Mac OS X.
        * Fix for the split/double help menu entry on Mac OS X, the SetMenuBar() call happens after all the menus are created.
        * Created a script for forcing relax's GUI mode (relax_gui_mode.py).
        * Added a script for building application packages of relax.  This currently supports the building of a stand alone Mac OS X app (i.e. no python needed).
        * The exit relax dialog now has a title.
        * The Mac OS X build and dist app directories have been added to the scons clean_all target.
        * Created a Mac OS X .icns version of the relax icon.
        * Created a task bar icon for Mac OS X.
        * The about windows now have titles (this makes the windows identifiable).
        * The relax icons are now used for all of relax's windows.
        * Better icon support in the GUI.  The ulysses.ico file is now being used as it is an bundle of images, and the icon bundle is now set for the main window.
        * Created transparent background images of the diffusion tensors for the model-free auto-analysis tab.
        * Added a series of 4 buttons for calling value.set in the model-free auto-analysis tab.  This is to make it obvious that the CSA, bond length, heteronucleus type, and proton type need to be set.
        * A number of improvements to the value.set GUI user function.  The on_display() method has been renamed to update_parameters() so the parameter list can be updated only when needed.  The set_param() method has been added to set a starting parameter and its default value.
        * The GUI user functions now show a busy cursor when loading so that the user isn't confused, wondering why relax is not responding.
        * The value.set GUI user function now sets the value to the default when parameters are selected.
        * Expressions can now be used in the value.set GUI user function for the number types.
        * Modified the gui_raise() function to have the raise_flag argument allowing the raising of the error to be skipped.
        * Created the analysis tab base class variable width_main_separator, this increases the space between the left hand side graphic and the right hand side elements.
        * relax is now started maximised in GUI mode.
        * The value.set user function GUI page now properly converts the value to the correct type.
        * The relax controller is now colouring the status module lock and observer print outs.
        * Improvements and fixes for the debugging print outs from the status module, and the text now goes to sys.stdout.
        * The observer objects are now printing out execution information when in debugging mode.
        * All acquire() and release() calls for the spin_lock and pipe_lock objects now are named, the name argument is now supplied to these methods.
        * The Relax_lock object now has much better debugging facilities, and responds to the debug flag.
        * Renamed the Relax_lock debug argument to fake_lock, again this is used to fake the locking mechanism, whereas debugging could be more fine grained.
        * The Relax_lock object now has a 'name' argument which will be used in debugging.
        * The pipe_lock locking object is now the special Relax_lock, this will allow for fine grained debugging.
        * All pages of the Rx peak list wizard now cannot proceed on an error, this will trigger the user function flushing.
        * A copy of the GUI interpreter singleton is now initialised in the wizard, this is used for the flushing of user functions prior to proceeding.
        * The GUI interpreter object has been converted into a singleton.

        * Changed the missing spin parameter messages to indicated that the value.set user function is needed.
        * Converted the missing data dialog into its own wx.Dialog derived class.  The dialog is now completely constructed by relax and will be constant across different operating systems.
        * Added data checks for the dauvergne_protocol GUI auto-analysis tab.  This allows for a dialog telling the user what is missing.
        * Redesigned the dauvergne_protocol mode selection in the GUI.  A special GUI element has been added to the analysis tab with a button that launches a new window for mode selection.  Therefore clicking on 'Execute relax' instantly starts the analysis.
        * Redesigned how the auto-analyses are handled by the status singleton.  The init_auto_analysis() has been created, and each analysis has its own status container within the status.auto_analysis dictionary.
        * Modified the dauvergne_protocol.py sample script to use the new design of accepting a filled data pipe.
        * Removed the 'exclude' file name from the model-free data assembly in the GUI.
        * Changing the model-free model selection in the dauvergne_protocol of the GUI now sets a red flag on the button.
        * The add_button_open() analysis base class method now returns the button.
        * Converted the relaxation data list GUI element to a wx.ListCtrl to match the spectra list element.
        * Converted the spectra list GUI element from a wx.Grid element to a wx.ListCtrl element.  This is visually more appealing, and is easier to control.
        * The question() dialog now only appears when the status.show_gui flag is set.
        * The SetValue() call for the model-free model list GUI element now updates the element with the new values.
        * A strong warning is now given to the user if they try to modify the model-free model list.
        * Implemented the model-free model selector window.
        * Created the gui.misc.list_to_gui() function for converting Python lists to GUI strings.
        * Removed the GUI README file as it is very much out of date.
        * Shifted all of the font definitions into the new fonts module.
        * Shifted the model-free model selection GUI element into the new Model_list class.
        * Expanded the docs for the relax_data.read user function to include the Varian and Bruker frequency parameters.
        * The spectrum and relaxation data lists now post EVT_SIZE events when modified.  This forces the parent scrolled panel to properly layout out its contents and refresh.
        * Removed visual artifacts in the wx.grid.Grid elements used in the spectrum and relax data lists.  All cells are now set to the background panel colour, and then individual cells are set back to white.  This removes the visual artifact of white outside of the wx grids.
        * Spacing improvements in all the auto-analysis GUI elements.
        * The virtual width of the analysis GUI elements now matches the real width.  The horizontal scrollbar has also been disabled.
        * Converted all of the GUI analysis objects into instances of wx.lib.scrolledpanel.ScrolledPanel.
        * The ds.relax_gui data structure is initialised if absent when associating a pipe with a new tab.
        * The popup menu is not shown if the status.show_gui flag is not set.
        * The auto-analysis initialisation can now associate with a pre-existing data pipe.
        * The data pipe editor now has a new 'Associate with a new auto-analysis' menu entry.
        * Added a hybridise button to the data pipe editor.
        * The data pipe editor is now registered with the gui_analysis observer.
        * The observer status.observers.gui_analysis is now notified of all changes to the analysis tabs.
        * Created an observer object (status.observers.gui_analysis) for changes to the GUI analysis tabs.
        * The execution of the callback functions in the observer objects is now ordered based on the registration order.
        * The data pipe editor can now be opened with Ctrl+D.
        * Changed the pipe_switch observer object to pipe_alteration and all pipe changes are now signalled.
        * Implemented the data pipe editor window, this will be used to manipulate data pipes including how they interact with the GUI.
        * Converted the menu build_menu_item() method into a function of gui.components.menu to allow it to be used more easily by other parts of the GUI.


    Bugfixes:
        * Fix for the pymol.cone_pdb user function for frame order models with no alpha average position angle.  This is specifically for the isotropic cone and free rotor model, although other models might also be affected by this fix.
        * Fixes for the add_molecule() structural API method.
        * Fix for the internal structural object add_molecule() method for when no models exist, now a model is created if none currently exist.
        * A lot of fixes for the internal structural object for handling multiple models.
        * The internal structural reader can now create PDB files if atom numbers are missing, fixing the structure.write_pdb user function in certain edge cases.
        * Bug fix for the pymol.cone_pdb user function for when there is no average domain position.  This is necessary for the old 2-domain N-state model analysis type.
        * Bug fixes for the n_state_model.cone_pdb user function, the code was old and not functional any more.
        * Fix for the frame_order.cone_pdb user function, the create_cone_pdb() function was referencing a non-existent variable.
        * Fix for the set up of Monte Carlo data for fixed alignment tensors in the N-state model.  The _minimise_setup_fixed_tensors() method has been fixed to return the actual tensor rather than simulation for the fixed tensors, as there is no simulation tensor in that case.
        * Bug fix for the relax_io.read_spin_data() function for spin IDs - spin IDs can now be handled if they are the first column in the data file.
        * Bug fix allowing relax to be run in profiling mode.  This has been broken since the merger of the multi-processor branch.
        * Fix for the paramag.centre user function when a numpy array is used.
        * Fixes for the N-state model optimisation setup if PCS or RDC data is not loaded.
        * Bug fix for the setup of the N-state model target function, triggered by missing data.
        * Fix for a divide by zero error in the PCS Q factor function.
        * The RDC and PCS Q factor functions are now more robust when data is missing.
        * Bug fix for the grace.write user function for when the spin ID is specified, the spin ID was previously unused.
        * Bug fix for the Monte Carlo simulation data generation for the N-state model.  The create_mc_data() method was always skipping RDC and PCS data due to an incorrect check for the presence of that data.
        * Bug fix for the logging and teeing command line options.
        * Bug fix for missing RDC back-calculated data (rdc_bc).  If a sequence is read from a PDB file, but the N-H bond vector cannot be extracted due to a missing proton, the alignment tensor fit to RDC data (specifically the Monte Carlo simulations) would fail.
        * Bug fix for a newly introduced dependency on the wxPython module.  This wx module is now optional, and only required for the GUI mode.  This allows relax to run without this module installed.
        * Bug fix for IO capture in the test suite with Python 2.6 or below.  The RelaxTestRunner._makeResult() replacement method has been reinstated.  Replacing the class variable resultclass does not work with earlier versions of the unittest site-package.
        * Fix for bug #18790 - the negative relaxation data errors.
        * Fix for bug #18789 - the zero errors in Grace files.  The problem was that the errors were being taken as the X-axis error values, which in the case of spin specific data is zero.  Now the Y-axis errors are taken rather than the unused X-axis errors.
        * The status.test_mode and status.show_gui flags are now initialised only once in the singleton to prevent them from being overwritten when a reset() call is made.
        * Mac OS X bug fix for changing pipes in the spin viewer window.  The pipe selector element event GetString() method was returning None as this is a read only ComboBox (in wxPython 2.9).
        * Fixes for Mac OS X with wxPython 2.9 for the spin viewer window activation/deactivation, this is now via wx.CallAfter() calls to prevent memory leaks.
        * Bug fix for Mac OS X when using wxPython 2.9.2.4 whereby wx.SafeYield() is causing 'Bus errors'.  The wx.SafeYield(None, True) calls have been replaced by wx.GetApp().Yield(True) calls, which should do the same thing but do not cause bus errors on this developmental version of wxPython.  This fix is important as the future Mac OS X relax app will use this version of wxPython for 64-bit and Cocoa support.
        * Bug fix for the reporting of non-matching lines in the spectrum.read_intensities user function.  The file data printed did not match the actual intensity data currently being processed, hence the wrong data was being printed as non-matching.
        * Fix for running the test suite in debugging mode.  The self.capt StringIO structure is always necessary for the final print out.
        * Fix for the results viewer window on MS Windows - it is no longer hidden after switching pipes.  For some reason MS Windows always brings the main GUI window to the front when pipe switches occur (probably the notebook switching).
        * Bug fixes for racing in the results viewer window on MS Windows, wx.CallAfter() calls are required for this to work.
        * MS Windows bug fix for pipe switching in the data pipe editor window, the pipe window would be hidden after the switch.
        * MS Windows bug fix for the pipe editor window, the wx.Yield() call has been removed from the update_grid() method as it causes a wx._core.PyAssertionError on Windows.
        * Bug fix for racing in the GUI on MS Windows when the relax prompt window is open.  This was caught in the test suite, and only affects MS Windows.  Now a wx.CallAfter() call is used to enable the GUI element.
        * Bug fix for the GUI interpreter thread flushing on MS Windows.  The Python Queue.empty() method is documented as being unreliable - and that is indeed the case on MS Windows (not on GNU/Linux or Mac OS X though).  It sometimes returns false, continually, when the queue is completely empty.
        * A lot of bug fixes for MS Windows with the handling of the busy cursor.  All calls to wx.EndBusyCursor() are preceded by a check via wx.IsBusy().  For some reason, in contrast to other operating systems, MS Windows will sometimes turn off the busy cursor by itself.  A subsequence call to wx.EndBusyCursor() results in an error.
        * Bug fix for the main window status bar on MS Windows, the text is now being set with wx.CallAfter calls.
        * Fixed a bug on MS Windows for the 'Close all analyses' menu entry and toolbar button.  The sequence of internal events is very different on Windows compared to Mac OS X and GNU/Linux, and not everything had been processed before everything was deleted resulting in updates to dead GUI elements.
        * Bug fix for the new analysis wizard cancelling on Mac OS X.
        * Bug fix for the closure of the new analysis wizard window.
        * Bug fix for MS Windows - the spin viewer window was being hidden by the main window when switching pipes.
        * Bug fix for racing in the spin viewer window when switching pipes.
        * Fixes for the peak list wizards for the NOE and Rx auto-analyses for Mac OS X.
        * Bug fix for many unit tests on MS Windows.  The os.tmpfile() call has been replaced by tempfile.mkstemp() in the data types passed into the unit tests of the prompt interface.  The os.tmpfile() call on Windows results in a "OSError: [Errno 13] Permission denied" error.
        * Bug fix for the scons clean target on MS Windows.  The build and dist directories from the Mac OS X py2app program are now only deleted by the clean_all target which checks for the paths.
        * Bug fix for a race condition on MS Windows blocking the test suite.  The analyses update_spin_count() call sets the value of the spin systems GUI element.  This is now via a wx.CallAfter() call to prevent the race in the GUI.
        * Bug fix for MS Windows - the user function menus are now fully deactivated during execution lock.  The submenus were strangely not all being deactivated, so now all submenu items are also deactivated.
        * Bug fix for the switching between analysis tabs on MS Windows.  The tab had not been changed when on_page_change() was being called (in contrast to GNU/Linux and Mac OS X).  Now wx.EVT_NOTEBOOK_PAGE_CHANGED is being used to bind the page change event rather than wx.EVT_NOTEBOOK_PAGE_CHANGING.
        * Bug fix for the structure.vectors user function back end, the check for already existing vector info now should work.
        * Fix for the results viewer window on MS Windows, the user functions now have the results viewer window set as the parent so that the window is not hidden by the main GUI window coming to the front.
        * Fix for the pipe editor window on MS Windows, the user functions now have the pipe editor window set as the parent so that the window is not hidden by the main GUI window coming to the front.
        * Fixes for the residue.create and spin.create user function GUI pages on MS Windows.  The default values are now correctly set.  This affects the pop up menu in the tree part of the spin viewer window.
        * Fixes for the user functions launched from the tree part of the spin viewer window on MS Windows.  The spin viewer window is now set as the parent, so that the main GUI window does not come to the front.
        * The user functions in the spin viewer window now have the parent window correctly set.  This is to help with an MS Windows window ordering bug.
        * Analysis tabs are now removed if the associated data pipe is deleted, avoiding nasty GUI crashing.
        * Fixes and improvements for the peak list wizards in the NOE and Rx auto-analyses.  The integration points page is now correctly set up.  And the spectrum ID is now only set if the field is blank, preventing a reversion of the user selected value.
        * The parent of the Question dialog in the pipe editor window is set so the window doesn't disappear.  Without this, the main GUI window comes to the front after the dialog is shown.
        * Fixes for the main GUI window moving in front of the spin viewer window.  The spin viewer window is now set as the parent for the Question dialogs, so that this window remains at the front.
        * Fixes for the residue user function GUI pages for when default values are sent to the page.  This fixes the user functions in the spin viewer window.
        * Fix for the new gui_to_str_or_list() function.
        * Bug fix for the structure.read_pdb GUI user function, the values from the GUI are now converted to the correct form.
        * Fix for the Help->Licence menu entry for the new GUI user function design, this additionally opens the relax controller window so the user will see the text.
        * Fixes for the pipe editor window to handle the new GUI user function design.
        * Fixes for the relaxation data reading GUI element for the new GUI user function design.
        * Fixes for some of the GUI user function calls from the tree part of the spin viewer window.
        * Fixes for the GUI user function launching in the model-free auto-analysis tab.
        * The spin viewer window now uses the full user function menu of the Uf_menus class, this should now remove the MS Windows bug whereby the spin viewer window would disappear to the back after closing of the user function wizard dialogs.
        * Fixes for the auto-analysis wizards for the new user function GUI page design.
        * Fixes for the GUI tests for the new design of the user function GUI pages.
        * Fix for the script user function GUI element for opening the file dialog.
        * Fixes for the relax controller, pipe editor and results viewer windows under MS Windows.  These windows were all dark grey, the default frame colour under MS Windows.  Now all elements are packed into a wx.Panel which sits inside the wx.Frame.
        * Added checks for a current data pipe to a number of GUI user function pages, this prevents relax errors when trying to launch the user functions but when no data pipes exist.
        * Fix for the MS Windows BAT file so that relax can be launched from the Windows PowerShell.
        * Fix for the dauvergne_protocol model-free auto-analysis with the deletion of data pipes.  Now only the data pipes created by dauvergne_protocol are deleted.  This fixes the problem whereby data pipes from other analyses are deleted by dauvergne_protocol, breaking the GUI.
        * Fix for the spin viewer window for MS Windows, the get_info() method now catches if no item is selected in the tree before trying to get the Python data from it.  Asking for Python data from a missing TreeCtrl item ID works on GNU/Linux and Mac OS X, but not on MS Windows.
        * Bug fix for MS Windows - the main relax window is now maximized upon start up.
        * Mac OS X fix for the relaxation data list element - the height algorithm is now more robust.  The ListCtrl.GetSize() method appears not to work on Mac OS X.  Therefore a different algorithm has been designed to get around this Mac specific problem.
        * Fix for the relax_fit.relax_time GUI user function.  The combobox GetValue() call has been replaced by GetStringSelection() for the spectrum ID.
        * Removed the wx.Yield() call from the spin viewer window refresh() method, this is to prevent recursive wx.Yield calls on Mac OS X from killing relax.
        * Fix for the Rx peak list wizard for Mac OS X, the combobox SetValue() call has been replaced with SetStringSelection().
        * Fix for the NOE spectrum loading wizard - the comboboxes need SetStringSelection rather than SetValue calls.  SetValue and GetValue on the read only combo boxes seems to fail on Mac OS X.
        * Mac OS X bug fix - the busy cursor is only turned off in the gui_raise window code if the busy cursor is on.
        * Mac OS X bug fix for racing in the GUI interpreter thread.  The flush() method was not working properly on Mac OS X, so hopefully now it is thread-safe.
        * Bug fix for Mac OS X for the spectrum.replicated GUI user function.  A GetValue() call fails on Mac OS X for a read only wx.ComboBox if no value is set.
        * Fix for the Rx auto-analysis GUI test for the changes to the spectrum.replicated user function GUI page.
        * Another Mac OS X test suite fix - the spin viewer window menu bar is now no longer set in the gui tests.
        * Bug fix for the test suite under Mac OS X - the GUI's SetMenuBar method is only called if status.show_gui is set.  This prevents the menu bar from starting when running the GUI tests.
        * Bug fix for Mac OS X - the timer in the relax controller is started with a wx.CallAfter() call.  This is to ensure that it will start from the main thread, which is essential.
        * All wx calls to Show(), ShowModal() and PopupMenu() are now suppressed if the status.show_gui flag is not set.  This is to eliminate problems of GUI elements starting up in the test-suite under Mac OS X.
        * Fixes for many user function GUI pages for when the apply button is clicked.  The combo box GUI elements were having data appended each time on_display() is called (this happens with a click on the apply button), but the previous values were not cleared out.  This results in very long repetitive lists.
        * Removed a recursive call to wx.Yield in the spin viewer window as this is fatal on Mac OS X.
        * Fixes for the spectrum.replicated user function GUI page for when the apply button is hit.  The spectrum IDs were continually appended to the ID boxes, so the lists could get quite long.
        * Fix for the model-free model changing question dialog in the dauvergne_protocol analysis.  The dialog is now larger to see all text, and the answer is no longer back to front.
        * Bug fixes for all of the specific analyses for running Monte Carlo simulations multiple times.  Many of the specific analyses were raising RelaxErrors if simulations had previously been run.  Now this no longer occurs, so that the analysis can be re-run which is important in GUI mode.
        * All of the major GUI and X freeze fixes have been ported to the relax data list.  The fixes for the spectrum list GUI element are now present in the relaxation data list GUI element as well, as the same problems occur in both code paths.
        * Fix for the size_cols() method of the spectrum list GUI element.  With the asynchronous updating of the element, sometimes the columns are not setup prior to a size_cols() call.
        * Bug fix for the freezing of X windows!  The spectrum list GUI element is now updated with a CallAfter() call so that the element is updated in a thread safe way.  Without this, the entire X windows system would sometimes freeze!
        * Bug fix for the freezing of the GUI.  The spectrum list GUI element was trying to update itself during execution lock, causing races if the spectrum data structures in the relax data store are being modified as the GUI element update is occurring.  This would result in a hard lock of the GUI.
        * Fix for the validate_sequence() function - the eval() calls raise all sorts of errors.
        * Fix for the reading of the sequence from generic formatted files with None in some of the columns.  This second problem is for the non-integer columns as the text 'None' was being interpreted as the name.
        * Fix for the reading of the sequence from generic formatted files with None in some of the columns.  The generic_fns.mol_res_spin.generate_spin_id_data_array() function now checks for when the data list contains 'None'.
        * Fix for the Rx peak height wizard, the user function flush flag was incorrectly named.
        * Fix for the wizard page _ok() method for the uf_flush flag.
        * Fix for the results viewer window file opening.
        * Fix for the results viewer window in testing mode - it is now not shown.
        * Fix for the pipe editor window - it is now updated when initially created to show all loaded pipes.
        * Fixes for all the calls to the GUI interpreter instance in the spin viewer window.  This is now a special thread object, and user function calls are now queued.
        * The auto-analysis GUI pages are now waiting for the data pipe to be created, fixing race conditions.
        * Some more fixes for the relax 'mode' class variable, these problems were due to the multi-processor code merger.
        * Fix for the GUI test mode - the mode variable should be a class variable.
        * Fix for the multi-processor code as the PrependOut class has been renamed to IO_filter.
        * Fixes for some of the file dialog wildcards.
        * Fix for the opening of Grace files via the results viewer.  It was being launched in both Grace and a text editor!
        * The spin viewer tree update() method now acquires both the pipe and spin locks, preventing a major source of race conditions.
        * The File menu entires for new or closing analyses or opening a state are blocked with the execution lock.  This is needed because the accelerator keys are still active, even if the menu entry is disabled (possibly a GTK bug).
        * The pipe editor window is now acquiring the pipe lock prior to updating its contents.  This removes a lot of race conditions, as the pipes can often change which the update occurs.
        * The execution lock is properly locked or released before notifying the observers.  This will remove some race conditions where the locked() method is called before the acquire() or release() methods terminate.
        * All wx object Append() calls now have their data passed through str_to_gui() first as well, this prevents GUI failures due to the wrong data type being encountered.
        * All data passed into wxPython SetValue() calls now go through gui.misc.*_to_gui() functions, this ensures that the correct data type is sent into the GUI elements.
        * Fix for the stereochemistry auto-analysis - the pipe_name argument does not exist in this auto-analysis.
        * Fix for the dauvergne_protocol - the maximum number of optimisation iterations is now an int.
        * The observers of pipe alterations should now all be thread safe, pipe changes in relax were causing segfaults in the GUI.
        * Fix for the dauvergne_protocol auto-analysis 'final' model.  The final stage of the dauvergne_protocol was broken.  The data pipes here need to be created rather than copied from the initial data pipe as results are being read into these pipes.
        * Fix for the dauvergne_protocol sample script - the mc_num argument is now called mc_sim_num.
        * Fix for the assemble_data() method of the NOE auto-analysis - the number of spectra can be less than 3.
        * Fix for the gui_to_float() for when an integer is given, it is now converted to a float.
        * Fix for the spectral list GUI element on Mac OS X, the ListCtrl.DeleteColumn() method is faulty on Mac OS X.  So instead all columns are deleted in one go, and then the entire thing is created on update.
        * Fixes for the results viewer window updating on Mac OS X.  The EVT_SHOW event was not being triggered by the frame's Show() method.
        * Bug fix for the dauvergne_protocol - the pipe.copy() calls are now followed by pipe.switch().  This is needed as previously the pipe.create() user function call automatically switched pipes, but pipe.copy() does not.
        * The results viewer window no longer fails if relax is still in the initial state.
        * Bug fix for the value.set user function page - the parameter rather than description is now used.  The description rather than parameter was being sent to the back-end.
        * Fix for the spin data check in the dauvergne_protocol auto-analysis - deselected spins are skipped.
        * Fix for the relaxation data check in the dauvergne_protocol auto-analysis.
        * Fix for Mac OS X - the wizard buttons are now all of the same size.  SetMinSize() rather than SetSize() needs to be used with wx.ADJUST_MINSIZE.
        * The dialog Close() rather than Destroy() method is being used to terminate the wizard, this is necessary for Mac OS X.
        * Mac OS X bug fit - removed the Destroy() call after ShowModal() in the wizard.  The Destroy() method was actually being called twice, the first time either by the _ok() or the _cancel() methods, and the second time directly after the ShowModal().  This is fatal on a Mac.



Version 1.3.12
(22 August 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.12

    Features:
        * The multi-processor capabilities of Gary Thompson's multi package including both uniprocessor and mpi4py modes.

    Changes:
        N/A

    Bugfixes:
        N/A



Version 1.3.11
(12 August 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.11

    Features:
        * Integration of relax and the BioMagResBank (BMRB, http://www.bmrb.wisc.edu).
        * Support for the creation of NMR-STAR version 3.1 files for BMRB deposition of model-free analysis results.
        * Support for the reading of all versions of NMR-STAR files containing model-free or relaxation data from the BMRB.
        * Use of the new bmrblib library for BMRB integration support (http://gna.org/projects/bmrblib).
        * Activated the PDC peak intensity type reading.
        * Added the Bruker PDC to the exp_info.software_select user function back end.
        * Implemented the value.set user function in the GUI.
        * Redesign of how relaxation data is handled within relax so that the data is identified via ID strings rather than relaxation type and frequency strings.
        * Added two sample scripts for determining the populations of an ensemble of small molecules.  This uses RDCs and PCSs with the N-state model to study the dynamics of small organic molecules (http://dx.doi.org/10.1002/chem.201100854).
        * The GUI can now be resized.
        * Big clean up and simplification of the GUI code resulting in a more regularised GUI on all operating systems.
        * Added initial support for determining protein connectivities in the internal structural reader.  This is currently only for intra-residue connectivities in the protein backbone.
        * Support for the reading of the organic chemistry XYZ 3D structure file format.

    Changes:
        * Removed the Numeric module from the --info print out as it is completely unused now.
        * Added the Bruker PDC software info to the exp_info module.
        * The pdc.read user function back end is now reading the PDC version information.
        * Added a catch for the "worst case per peak scenario" option in the PDC.  This will now throw a RelaxError, telling the user to go back to the PDC and use the other option.
        * Converted the pdc.read user function back-end to use the \t delimitation of the PDC file for parsing.
        * The R1 value and error are now being read directly from the PDC file.
        * Added wrapper methods to the relaxation curve-fitting specific code for the new C modules.  These allow the parameter numpy array from minfx to be converted into a Python list prior to sending it into the C module.
        * Added a check for the runpy Python module.
        * Scripts can now be run again under Python versions 2.4 or lower (by avoiding the runpy module).
        * The auto_analyses package modules are now imported by __init__ to force their existence.
        * The relax_data.back_calc user function arguments no longer need to be supplied.
        * Shifted all of the model-free sample scripts into the new subdirectory sample_scripts/model_free.
        * Added copyright headers to all of the sample scripts, and updated the introduction text.  This allows users to determine the age of the scripts.
        * Updated the OpenDX mapping sample scripts from the relax 1.2 to the 1.3 design.
        * Added a sample script for creating plots of experimental verses back calculated relaxation data.
        * Deleted the incomplete and useless N_state_model.py sample script.
        * Created a sample script subdirectory called n_state_model.
        * Added a sample script for the unsuccessful two domain N-state model optimisation.
        * Deleted the ancient TODO file, as it is no longer relevant.
        * Deleted the SRLS analysis type - there is no incentive to develop this part of relax.
        * Removed 'relax_disp' from the VALID_TYPES data pipe type array.  This is supported in the relaxation dispersion 'relax_disp' branch and not in the main line.
        * The RDC and PCS Q factor user functions now do nothing when data is missing rather than failing.  A warning is given and the function now simply returns rather than raising an error.
        * The grace file created by the pcs.corr_plot user function now separates each element into its own graph.
        * Converted the summary from the final_data_extraction.py sample script into comma separated file (.csv).
        * Added the PDB reading parts of Scientific python to relax so that Scientific python is no longer a relax dependency.
        * The Scientific python PDB reading tests are no longer skipped if the module is not installed.
        * Removed Scientific python and Numeric from the blacklisted modules.  This is for the docstring fetching script to generate the user function section of the user manual.
        * relax icon is not shown in window title if running on a Mac.
        * Included the relax development team to copyright statement in the main window of the GUI.
        * Peak lists and relaxation times are collected in data grids within the GUI.
        * Updated the Bieri et al., 2011 reference as the relax GUI paper is now published (http://dx.doi.org/10.1007/s10858-011-9509-1).
        * Changed the "Help->Contact relaxGUI" to "Help->Mailing list contact".
        * Renamed the "Relaxation time [s]" column to "Relaxation delay [s]" in the GUI as this is a more correct description.
        * Deleted Edward's ancient Melbourne Uni email address from the MEDLINE info.
        * Normalisation of the text in the auto model-free analysis GUI tab.  The font sizes are now all the same, the text is not right aligned (not seen under Linux but very ugly in Windows), and semicolon usage and capitalisation is normalised.
        * Regularisation of the font formatting in the steady-state NOE GUI tab.
        * Shifted the title and subtitle creation for the NOE frame into a base class for all frames to use.
        * Regularisation of the fonts, titles, and subtitles in the Rx auto-analysis frames.
        * Created the add_subsubtitle() base class method for creating a sub-sub-title in the GUI.
        * Regularised the text in the results tab.
        * Regularised the "Single delay cycle time [s]" text in the model-free frame.
        * Attempt to regularise the text in the text controls.
        * Regularised all the stead-state NOE frame text controls.
        * Created the add_static_text() base class method for all the GUI frames to use.
        * Added the add_button_open() base class method for regularising the buttons across GUI frames.
        * Regularised all of the auto NOE analysis frame buttons.
        * Added the add_text_sel_element() base class method for creating one of the basic frame elements.
        * Better layout for the base class static text, text control and button addition (for the GUI).
        * Added a stretchable spacer to the NOE window so the execute relax button is always at the bottom right.
        * Completely refactored the model-free model buttons code.
        * Shifted the model-free add_execute_relax() method into the base class for all analysis tabs to use.
        * The peak intensity GUI element is now enclosed within a StaticBox.
        * Shifted the main GUI window layout to the start of the __init__() method.
        * Created the function gui.misc.add_border() for adding borders to generic GUI elements.
        * Added an internal border to the relaxation peak list selection GUI element.
        * Created the analysis tab base class methods add_spin_control() and add_spin_element().  These are similar to the text control and text selection elements respectively, but use a SpinCtrl instead.
        * The model-free analysis tab now uses the base class add_spin_element() method for the max iterations.
        * Shifted the model-free list box in the results tab into the new add_list_box() method.
        * Shifted the 'Execute relax' text to be inside the button.
        * Added an icon to the 'Change' buttons throughout the GUI.
        * Added the oxygen icons for opening folders.
        * The open folder icons are now used for the 'Results directory' change buttons.
        * The settings windows are now derived from wx.Dialog rather than wx.Frame.  This is for better operation under MS Windows.
        * Added the document-close Oxygen icons.
        * Added support for old save files in the Peak_intensity.sync_ds() method (for the GUI).
        * Argument change_all for deselecting residues in the d'Auvergne protocol has to be boolean.
        * The relax_fit overfit_deselect() method now skips deselected spins.  This prevents unnecessary warnings about missing data for deselected spins.
        * All of the overfit_deselect() methods now skip deselected spins, avoiding confusing warnings.
        * Created a script for byte compiling the Python source files.
        * Added the data_type() method to the specific functions API.  This will be used to determine the type that a given parameter from data_names() should be.
        * Implemented the model-free version of the data_type() API method.
        * The heteronucleus and proton type parameters can now be specified by their parameter names as well.
        * The create_molecule, create_residue, and create_spin functions now return the created container.
        * Modified the create_spin() function to overwrite the first spin if empty.
        * Redesign of the structure.load_spins user function back end for XYZ file reading support.
        * Redesign of the main relax module.  The module has been renamed to 'relax.py', and the original file 'relax' is now a very basic python script which simply loads the module and runs the new start() function for launching relax.
        * The relax mode normally specified by the command line can now be overridden.
        * Removed the executable svn property on the info module.
        * Shifted the pedantic flag into the status object.
        * RelaxWarnings now only show a traceback when the pedantic flag is True.
        * The relax state is now saved on a RelaxError when the pedantic rather than debugging flag is turned on.  As both flags can be given, this allows for this state saving to be activated or deactivated.
        * The relax_io.read_spin_data() function no longer skips short lines so that a warning is given for it.
        * generic_fns.sequence.validate_sequence() now also checks for the spin ID, data and error columns.  This is now used by relax_io.read_spin_data().
        * Files created by the grace.write user function are now put into a new list cdp.results_files.
        * The value.write user function now also adds to the cdp.result_files structure.
        * Modified the execution lock to have a mode.  This allows for greater control and avoid string comparison of names to determine if a script or auto-analysis acquired the lock.
        * The dauvergne_protocol is now more robust if the program is interrupted and restarted later.  The opt/results.bz2 file is now searched for, and if not the round is assumed incomplete.
        * The pymol.tensor_pdb() user function now shows the diffusion tensor using PyMOL sticks.
        * Creation of the new structure.read_xyz user function.
        * Addition of two new system tests Structure.test_read_xyz_internal() and Structure.test_read_xyz_internal2().
        * Changing the description in the user functions structure.load_spins and structure.read_xyz.
        * Code for extracting a vector between specified spins in a XYZ file has been included in the generic_fns.structure.internal.
        * Debugging in the function generic_fns.structure.main.load_spin() in order to load a spin for XYZ file properly.
        * For printing out of modified spins, a test to check whether the spin_name exists or not has been added.
        * Added the pymol_macro() method to the analysis specific API.
        * Clean up of parameters in the _create_mc_relax_data() specific API common method.
        * A number of epydoc docstring fixes.
        * The sconstruct script is only executed when it is the main loaded module or if launched by scons.
        * Improved the list of modules and packages used in the epydoc documentation.  The files and directories which are not python modules or packages are now properly skipped.


    Bugfixes:
        * The setting of the integration method in the pdc.read user function now works.
        * Fixes for the pdc.read user function back-end for the NOE PDC file.
        * Fix for the pdc.read user function back-end for reading NOE data out of the new PDC files.
        * Fix for the relaxation curve-fitting back_calc_I C function so that it works under Python 2.5.
        * Fix for the initialisation of the Bruker_import class.  This allows this module to be loaded in Python 2.4.
        * The reference counting appears to not be needed in the C modules.  This allows the modules to be compiled under Python 2.4 or lower.
        * Loosened all of the model-free tests so that the minimisation statistics are no longer checked.  This will stop users from thinking they have a problem with their version of relax, after running the test suite.
        * Removed numpy from the relaxation curve-fitting C module code.  This should help with incompatibilities (and segfault failures) between different Python versions, as this seems to be due to the numpy C interface.
        * Improved the RelaxWarning for the reading of NMRView peaks with missing assignments (bug #17876).
        * Fix for the N-state model for when only the paramagnetic centre position is optimised.
        * Fix for the grid search limits as they were being scaled iteratively for each successive spin system (bug #18030).  This only affects certain type of custom grid searches.
        * A ":" symbol in the description of a function variable was preventing the compilation of the user manual using scons (bug #18037).
        * Opened files are closed properly after writing in the final_data_extraction.py sample script.
        * If no diffusion tensor is present, creation of diffusion pdb will be skipped (final_data_extraction.py sample script).
        * Updates for the Dasha sample script for the current version of relax.
        * Updates for the diffusion tensor optimization sample script for the current version of relax.
        * Some fixes for the subprocess.Popen() calls on MS Windows.
        * Removed event.skip due to conflict with Windows (auto-analysis Rx fix in the GUI).
        * Fixes for the spin.copy GUI user function element.  This still had remnants of the residue.copy window.
        * The relax icon is not shown in "Global relax settings" window if running on a Mac.  This fixes a bug whereby closing the window causes the GUI to crash.
        * Complete redesign of the relax global settings window to fix the Mac OS X crashing (bug #18197).
        * Fix for the global settings window - it needs to inherit from UF_window!
        * Fix for the NOE auto-analysis - the column numbers for the deselected spins file are now assumed.  The residue number is assumed to be in the first column.  This is a hack until the spin selection part is better designed.
        * Fix for the bug reported as sr #2764.  The problem was that the sequence file is now in the variable sequence_file.
        * Fix for the sequence.read user function - the force flag is now being passed on.
        * Fix for the sequence.write user function - the force flag is now passed to open_write_file().
        * Fix for the sequence.write user function when the column separator is not whitespace.  The column widths are no longer fixed if the separator is not whitespace.
        * Many bug fixes for the functions of the generic_fns.mol_res_spin module.  These fixes are for when a data pipe other than the current data pipe is used.
        * Fix for the relax save states - the current data pipe is now saved and restored.  The info about which pipe was the current one was being blacklisted, so was not stored in the relax save file.
        * Fix for the atomic position check in the spin.create_pseudo user function.
        * Fix for pseudo-atom support when only a single structure is loaded.  Pseudo-atom support was only working correctly for when multiple models were loaded and atomic positions were not averaged.
        * Fix for the spectrum.read_intensities user function int_method argument for volumes.  Volume integration should be called 'point sum', but the back end code was checking against the string 'volume'.
        * Fix in one of the relaxation curve-fitting system tests - 'volume' should have been 'point sum'.
        * Fix for the PCS back-calculation function - divide by zero is now avoided.  The function was calculating the normalised bond vector between the lanthanide atom and itself.  The normalisation in this case is now avoided.
        * Fix for the spectrum user functions for when the ID order does not match those loaded.  If the order of IDs sent to spectrum.replicated did not match the order they were loaded by spectrum.read_intensities, then the spectrum.error_analysis user function would fail.  The order is no longer important.
        * Fix - the pipe switching flag is now propagated all the way to the data store add() method.  The flag was previously not sent to the method so that the creation of a new data pipe always resulted in a switch to that pipe.  This bug is normally harmless.
        * Fix for the model-free _determine_model_type() method when the spin container has no 'local_tm'.  This code was failing in certain rare circumstances (when the setting up of the diffusion tensor was forgotten).
        * Fix for structure.read_pdb for when the file contains no PDB data.  This is now caught, and a warning is given and the function exists cleanly.
        * Fix for the RelaxWarning system on Mac OS X, the base class __str__ method now returns a simple string.  On a Mac, the warning message text was in unicode whereas the __str__() method must return a standard string.  So now __str__() is using the str() method to convert.
        * Fix for the structure.vectors user function.  It no longer complains about a PDB already loaded when no PDB has been loaded.
        * Fix for the resetting of the global optimisation round in the dauvergne_protocol auto-analysis.  The value was being reset to None at every round.
        * Fix for the round determination in the dauvergne_protocol auto-analysis.  The 'opt' directory was missing in the path.
        * Fix for the saving/loading of a results file in GUI mode.  The save files were containing the ds.relax_gui object and restoring it on loading.  This caused the data storage of the GUI to change underneath the GUI resulting in a crash or race conditions.
        * Fix for the resetting of the relax data store - the cdp structure is now set to None.  Previously the data store would be cleared, but the __builtin__.cdp structure would point to the old current data pipe, keeping it in existence and causing problems in the GUI.
        * Fix for the xydxdy type Grace graphs - the dx data was not being placed in the file.
        * Fix for the structure.create_diff_tensor_pdb user function for when no element info is available.  These atoms where the element is not in the PDB file or cannot be determined should have been skipped.
        * Fix for the molmol macro user functions - one of the args 'param' should have been 'data_type'.
        * Fix for the spin_loop() calls when generating Molmol macros.  The full_info argument should have been set to True.
        * Fix for the molmol.write macro creation user function - the file arg can be None!
        * Fix for the molmol.write user function for model-free parameters.  Some of the parameters were using the ancient self.relax code path which was eliminated with the redesign of relax 1.2 to 1.3.
        * Fixes for the old scripts/optimisation_testing.py script.  This was also using the ancient self.relax code path.
        * Fix for the molmol macro of the ts parameter, the spin container variable was spelt incorrectly.
        * Fix for the data.align_tensor.calc_eta() function - divide by zeros are now avoided.  When Azz is zero, eta is now set to NaN.
        * Typo fix in the unused and incomplete dfunc function to remove compilation warnings on MS Windows.
        * Fix for the data.align_tensor.calc_R() function - divide by zeros are now avoided.  When Aa is zero, Ar is now set to NaN.
        * Fix for the test_opt_constr_bfgs_mt_S2_0_970_te_2048_Rex_0_149 model-free system test on MS Windows.  The te parameter check was too strict.
        * Another divide by zero problem is being caught in the RDC Q-factor code.
        * The dipolar_constant() and pcs_constant() functions now catch division by zero problems.


Version 1.3.10
(18 February 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.10

    Features:
        * Support for the reading of relaxation data out of the Bruker Protein Dynamics Centre (PDC) files.

    Changes:
        * Updates for 2 model-free system tests for a new system which again shows optimisation differences.

    Bugfixes:
        * Fix for a bug in the N-state model - the Q-factors and back calculated RDCs and PCSs were set to that of the last Monte Carlo simulation.
        * Fix for the N-state model error returning method for when errors are not present.


Version 1.3.9
(26 January 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.9

    Features:
        * The addition of Michael Bieri's graphical user interface - relaxGUI.

    Changes:
        * Improvements to the HTML version of the user manual (http://www.nmr-relax.com/manual/1.3/relax.html).

    Bugfixes:
        N/A


Version 1.3.8
(20 January 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.8

    Features:
        * Created a sample script to create a CSV file of model-free results for reading into spreadsheets, based on the LaTeX table generation script.
        * Extensive system tests for all the model-free models have been introduced.

    Changes:
        * Loosened the te check in value_check() so that the test_opt_constr_bfgs_back_S2_0_970_te_2048_Rex_0_149() model-free system test would pass on 32-bit Linux.
        * Renamed the model-free results LaTeX table generation script.
        * Created a test-suite module to aid in the back-calculation of relaxation data from model-free parameters independent of relax.
        * Updates for Python 3.0 using 2to3.

    Bugfixes:
        * Fix for running scripts in certain versions of python - if a file with the same name as the script lies in one of the paths in sys.path, then that file will be executed rather than the script.



Version 1.3.7
(10 January 2011, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.7

    Features:
        * Shifted the relax installation path variable from __main__ into the status singleton object, allowing relax modules to be imported outside of relax.
        * Shifted the global relax debug flag from __main__.debug to the relax status singleton, allowing the flag to be defined even when imported from outside of relax.

    Changes:
        * Speed up of the relaxation curve-fitting system tests.
        * The sample_scripts/full_analysis.py script has been renamed to sample_scripts/dauvergne_protocol.py.
        * Improvements to the test suite final print out with a table of skipped tests.
        * The data pipe system test is avoiding the frame order data pipe, allowing the test to pass without scipy installed.
        * The alignment tensor system test now uses the N-state model rather than frame order so it is always tested.
        * The frame order system and unit tests are skipped if scipy is not installed.
        * The frame order analysis is disabled if scipy is not installed.
        * The data pipe generic code now uses dep_check to see if the relaxation curve-fitting is available.
        * The system tests now use the RelaxTestLoader to allow tests to be skipped.
        * The unit vector system tests using scientific python are now being skipped if the package is not installed.
        * The structure system tests involving scientific python are now skipped if the package is not installed.
        * The RelaxTestLoader has been added as a replacement for unittest.TestLoader to handle the skipping of tests when optional Python packages are not installed.
        * Shifted the status singleton instantiation to the import level in all modules, saving execution time.
        * Big code cleanups in unit_test_runner.py

    Bugfixes:
        * Peak intensity errors can now be calculated when using volume integration and replicated spectra (bug #17457).
        * Failure of the prolate diffusion tensor in model-free analysis - if the tensor is initialised with Da = 0, the tensor is converted to being oblate.  This was introduced in relax version 1.3.6.
        * relax can now operate without scipy being installed.
        * Updated four model-free optimisation system tests to pass under 32-bit Linux.
        * Made the N_state_model.test_pcs_fit_zero_pos system test less stringent so it passes on 32-bit Linux.
        * The model_free _model_setup() method should handle no model-free model being set when reading relax 1.2 results files (bug #17417).



Version 1.3.6
(31 December 2010, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.6

    Features:
        * Addition of Michael Bieri's model-free data extraction script.
        * Added support for CCPN Analysis 2.1 peak lists (exported in Sparky format).
        * Execution locking has been implemented to prevent threaded execution from killing relax.  This will be useful for the relax GUI.
        * Scripts are now run as modules rather than using execfile(), closing a security hole.
        * Created the frame_order.domain_to_pdb() user function to associate PDB files with domains in the current data pipe.
        * Rewrote frame_order.cone_pdb() to handle all of the frame order models.
        * The sign of the RDC can be inverted to correct for the negative 15N gyromagnetic ratio.
        * Better identification of the molecule end in the internal PDB reader.
        * Implemented Monte Carlo simulations for the N-state model.
        * The grid_search() user function argument incs can now be a list with None elements to fix parameters.
        * Expanded the number of frame order models to include the 'free rotor', 'rigid', 'rotor', 'iso cone, free rotor', 'iso cone, torsionless', 'iso cone', 'pseudo-ellipse, free rotor', 'pseudo-ellipse, torsionless', and 'pseudo-ellipse'.
        * Pre-defined probabilities can now be used in the 'fixed' N-state model optimisation.
        * The Ln3+ position can be directly optimised in the N-state models.
        * The pcs.back_calc() user function now does something.
        * Created the n_state_model.elim_no_prob() to remove structures with zero probability.
        * Created the align_tensor.fix() user function for fixing the alignment tensor during optimisation.
        * The alignment tensor optimisation is now optional within the population N-state model target fn.
        * The RDCs and PCSs can now be given optimisation weights.
        * Per point comments are now included in the Grace files.
        * The RDC and PCS correlation plots now also show the experimental errors.
        * The RDC and PCS back-calculation user functions now add the alignment ID to the RDC and PCS if absent to allow both data types to be back-calculated in the absence of measured data.
        * The N-state model calculate() method now stores the back-calculated RDCs and PCSs and Q factors.
        * The PyMOL module pymol.cmd is now available within the pymol user function class, accessible as pymol.cmd from the prompt/script interface.

    Changes:
        * API documentation improvements with epydoc docstring fixes.
        * Numerous new system tests to catch bugs and prevent bugs appearing in the future.
        * Peak intensity data is now internally handled differently to improve its flexibility.  This will be beneficial for handling Bruker PDC (Protein Dynamic Center) files, relaxation dispersion data, and adding new types of relaxation data.
        * The 'scons clean' target now removes temporary relax save files.
        * The molecule type can now be specified.
        * Improved the diffusion tensor print out.
        * pipe.delete() without args will now delete all data pipes.
        * Added some checks to the dauvergne_protocol model-free analysis for the required previously optimised results.
        * Shifted the steady-state NOE specific analysis code into its own package.
        * Shifted the debug and pedantic flags into the __main__ namespace for better access from other modules.
        * Modified the specific code API to remove a number of references to spin_id, as not all analyses use spins.
        * Renamed the results_folder arg to results_dir in the NOE auto-analysis, and rearranged the args.
        * Citations now include the status if not 'published'.
        * Created a new directory 'graphics' for all relax artwork.
        * The structure.load_spins() user function now gives a RelaxWarning if no data could be found.
        * The negative cones and z-axes are now not created for the pseudo-ellipses in frame_order.cone_pdb().
        * Added some transparency to the cone in pymol.cone_pdb().
        * Modified the pymol.cone_pdb() user function to handle x, y, and z-axes.
        * Modified create_cone_pdb() to accept a pre-made structural object and to create a file only when asked.
        * Switched the names of the Pseudo_elliptic and Pseudo_elliptic2 classes.
        * Created a API common specific code set_selected_sim() method for a single global model.
        * Created a API common specific code model_loop() method for a single global model.
        * All objects placed into the relax data store structure are now stored in the XML save file.
        * Parameters can be fixed to the original values during the frame order grid search.
        * The user function argument checker arg_check.is_int_or_int_list() can now allow for None list elements.
        * The frame order model can be overwritten by frame_order.select_model().
        * Shifted to using numpy.sinc() for the frame order equations.
        * Switched the theta and phi angles in cartesian_to_spherical() to match the rest of relax.
        * Created a new module for performing coordinate transformations (maths_fns.coord_transform).
        * The pipe.display() user function now places quotation marks around the pipe names and shows which is the current data pipe.
        * The align_tensor.display() user function now prints out the generalized degree of order (GDO) value.
        * The back-calculated alignments tensors are now being stored in the current data pipe.
        * Removed the docstring length check from the code validator script.
        * The loading of RDCs and PCSs for non-existent spins now only throws a RelaxWarning.
        * The select.read() and deselect.read() user functions can now accept file handles or dummy file objects.
        * Limit arrays are now sent into the minfx generic interface for limiting simulated annealing.
        * The align_tensor.delete() user function can now be used to remove all tensors simultaneously.
        * Made a RelaxError less stringent so that the paramagnetic centre can be unfixed.
        * Initialising an alignment tensor now adds the ID to the alignment ID list.
        * Changes to the NOE auto-analysis for the GUI:  The output filename can be specified;  The folder, where results files will be placed, can be specified;  The label of heteronucleus and proton of peak lists and PDB file can be selected;  The sequence is read either by sequence file or PDB file;  Removed white spaces and progress output.
        * Changed the alignment tensor parameter scaling back to 1 as this was slowing down the optimisation.
        * The rdc.back_calc() user function without an ID arg will back-calculate RDCs for all alignments.
        * Renamed the pcs.centre() user function to paramag.centre() to abstract for the PRE.
        * Better support for RDC and PCS correlation plots with and without errors.
        * Inverted the x and y axes in the RDC and PCS correlation plots.
        * Better support for tensor-less N-state model optimisation.
        * The align_tensor.copy() tensor_to arg can now be None, this is useful for copying between data pipes.
        * Added a function for the pseudo-elliptical cosine function, this is a numerical approximation generated by series expansion.
        * Added a method for translating pymol.cmd.do() commands into specific pymol.cmd functions.  This prevents problems with commands being executed asynchronously.  For example images were being saved before ray-tracing was complete.
        * The RDC and PCS correlation plots now only show selected spins.

    Bugfixes:
        * The loading of Monte Carlo simulation data from relax 1.2 version results files has been fixed (bug #17361).
        * Bug fix for the relaxation data add_data_to_spin() function - missing data for individual spins was not properly eliminated.
        * For the 1.2 results files, the data is being extracted even if the spin is not selected.
        * Sparky peak lists from CCPN Analysis 2.1 can now be read (bug #17341).
        * Fix for the broken grace.view() user function (bug #17344).
        * Added 'CH' and 'OT' as carbon and oxygen atoms to the internal PDB reader (bug #17343).
        * The script path is now being removed from sys.path as this was causing incorrect scripts to be loaded if multiple scripts are executed sequentially or nested.
        * Fix for the 'list index is out of range' error when differently sorted peak lists, or lists with missing data are loaded (bug #17276).
        * Fix for the input of (Dxx, Dyy, Dzz, Dxy, Dxz, Dyz) ellipsoidal diffusion parameters.
        * Fixes for some currently unused, but useful, diffusion tensor internal API functions.
        * Fix for the NOE auto-analysis - the spins are now named to the value of the 'heteronuc' arg.
        * Fix for the frame_order.cone_pdb() user function - the cone is already in the PDB frame, no rotation required.
        * Fix for the average domain rotation in pymol.cone_pdb().
        * Bug fix for the frame_order.pivot() user function - it is now functional.
        * The base contents of the relax data store are no longer saved with a call to results.write().
        * Fix for the pcs.back_calc() user function for when multiple structures are loaded.
        * Fix for rdc.read() when neg_g_corr is set to True and the RDC list contains entries with None.
        * Fix for the failure of model elimination in the full analysis script (bug #13259).
        * Added a catch in iso_cone_S_to_theta() for bad order parameters > 1.
        * The attached proton PDB name is no longer hardcoded to 'H' in the dauvergne_protocol auto analysis.
        * When loading save states, data pipe names are always converted to a string to avoid unicode problems.
        * Hardcoded the factorial() function to return support for Python 2.4 and 2.5.
        * Small fixes and improvements to the rdc.back_calc() user function - align IDs are being used instead of RDC IDs so RDCs can be back-calculated even if measured RDCs are not present.  And spin info is also being checked for better error reporting to the user.
        * Fix for the alignment tensor rotation matrix - it is now always in the right handed universe.
        * Bug fix for the RDC back_calc() function - the align_id arg was being ignored.
        * Fix for the RDC back_calc() function for when N=1 in the N-state model, the bond vector structure was not correct.
        * Fixes for the N-state model target function setup for when no parameters are optimised.
        * Fix for the Grace write_xy_data() function for when data values of None are passed in.
        * Bug fix for the RDC back-calculation function.
        * Bug fix for the control of PyMOL (as a module).
        * Small fix for the grace.write_xy_header() function, the symbol numbers now range only between the legal values of 1 to 10.



Version 1.3.5
(21 May 2010, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.5

    Features:
        * Addition of the frame_order.ref_domain() user function to specify the alignment of different domains.
        * Converted the reduced J(w) mapping sample script to the relax 1.3 design to make it functional.
        * Created the 'rigid' frame order model.
        * Made the profile module optional, removing the dependency on the Python development packages.
        * Created the maths_fns.rotation_matrix.axis_angle_to_quaternion() function.
        * Created the maths_fns.rotation_matrix.quaternion_to_axis_angle() function.
        * Created the maths_fns.rotation_matrix.R_to_quaternion() function.
        * relax save files are now by default XML formatted rather than the pickle format (for better compatibility with future relax versions and between different systems).
        * Added a force flag to the state.load() user function.
        * Redesign and improvement of the frame order grid search.
        * Added a script for creating Molmol macros to represent the model-free motions.
        * Created the structure.delete() user function for deleting all structural information.
        * Spun out the automatic model-free protocol code from the full_analysis.py script.  The simplified script now simply sends in user supplied data to an automatic analysis API.
        * Expansion of the rotation_matrix module with the addition of many new conversion functions.
        * Added support for using methyl pseudo-atom RDCs.
        * Created the structure.get_pos() user function for extracting atomic positions.
        * The atomic position can now be directly supplied to pcs.centre().
        * Addition of a sample script for the determination the relative stereochemistry of organic molecules.
        * Large improvements for the creation of 2D Grace plots.
        * Anisotropic cone PDB representations can now be created.
        * The diffusion tensor within the PDB frame can now be specified, avoiding the 2304 different Euler angle conventions for a rank-2 symmetric tensor.
        * PyMOL is now being executed as a python module, if available, instead of being launched on the command line and remotely controlled.
        * Addition of the rdc.display() and rdc.write() user functions.
        * Addition of the pcs.display() and pcs.write() user functions.
        * Implemented dfunc_tensor_opt() and d2func_tensor_opt() allowing all optimisation algorithms to be used for the N-state model.
        * Creation of the rdc.corr_plot() and pcs_corr_plot() user functions for creating correlation plots of measured vs. back-calculated RDCs and PCSs.
        * Added the -i or --info option to relax.

    Changes:
        * Test suite fixes for Python 2.5.
        * Epydoc docstring improvements/fixes for the API documentation.
        * Many updates using 2to3 preparing for a transition to Python 3.x.
        * Renamed the pipe.list() user function to pipe.display().
        * Created a base class for the user function classes.  More user function back end simplifications.
        * Addition of many new RelaxError classes for the user function interface.
        * Removal of many unused Python module imports.
        * Redesign of the RelaxError classes.
        * Simplified all the argument RelaxError classes using BaseArgError.
        * Added a check for the unimplemented constraints in the frame order code.
        * Rearrangement of the handling of frame order models.  The tensor rotation Euler angles are now model independent, the 'rigid' model is better supported, and a clear isolation of the isotropic cone model has been made.
        * Shifted the current data pipe to __builtin__.cdp so that it is accessible as 'cdp' in all of relax - including user scripts (and removal of 484 calls to generic_fns.pipes.get_pipe()).
        * Specific architecture and optimisation details are now printed if the frame order system tests fail.
        * Added a function for converting the frame order matrix to the rotational superoperator.
        * Improved and expanded the output of the print_frame_order_2nd_degree() function.
        * Function renaming and argument order changes in the maths_fns.rotation_matrix module.
        * Huge simplifications to the unit tests for the maths_fns.rotation_matrix package.
        * Added a very basic, and completely empty module and class for SRLS analysis.
        * Redesign of the relax state loading for adding support for a XML formatted state file.
        * Shifted the results.write() force arg to the end.
        * Created the relax data store is_empty() method.
        * Renamed the state.load() and state.save() directory argument from dir_name to dir for consistency with the rest of relax.
        * Redesigned the relaxation curve fitting grid search for the new design of the minfx grid search.
        * Redesigned the N-state model grid search setup around the new minfx interface.
        * Redesigned the model-free grid search setup around the new minfx interface.
        * Renamed the 'grace.py' sample script to 'mf_grace_S2_vs_te.py'.
        * Added the spin_id_col arg to the rdc.read() user function.
        * Changes to the pcs.read() and rdc.read() user function interfaces.
        * Column numbering now starts at 1 rather than 0 within the user functions.
        * The relax_io.read_spin_data_file() function has been created to handle all columnar text files where each row corresponds to a spin.
        * Rewrote the tokenise() function to allow for the '&' boolean operator for residues and spins, allowing ':1&:GLY' or '@453&@N' to be parsed.
        * Renamed all the alignment ID args and variables 'id' to 'align_id' in the RDC and PCS user functions.
        * Added the relax_io.write_spin_data_file() function for writing spin specific data to a file (can be STDOUT).
        * Significant improvements to the __find_bonded_atoms() method of the internal PDB reader.
        * Improved the error handling for AICc model selection.
        * Added user variable checking to the full_analysis.py script.
        * Added functions for determining the element name and isotope number from an isotope name.
        * Added frame order methods necessary for the dx.map() user function.
        * Huge clean up / redesign of the specific analysis internal API.
        * Better layout of the user functions in the relax manual significantly dropping the page count.
        * Formatting improvements in the relax manual.
        * Removed the checking of sequence data from generic_fns.value.set().
        * Modified the alignment tensor print out to be more compact.
        * The PCS centre can now be forcefully overwritten.
        * Added the back end to the rdc.back_calc() user function (making it functional).
        * Modified all the specific analysis overfit_deselect() methods to warn when spins are deselected.
        * align_tensor.display() now prints the magnetic susceptibility tensor.
        * The rotation matrix to Euler angle algorithms have been converted to the general one of Ken Shoemake.
        * Simplifications and clean up of the prompt and script UI code.
        * Detachment of the prompt/script interface from relax allowing it to be imported by any python code.
        * Switched from using a cone angle to using an order parameter in the isotropic cone frame order model.
        * Redesigned the program introduction as an abstraction for different UIs, shifting it into the intro module.
        * Changed the program description to "Molecular dynamics by NMR data analysis".
        * Created a module for the automatic relaxation curve fitting protocol.
        * Shifted the RDC and PCS Q-factor calculation code so that it is no longer N-state model specific.
        * The RDC and PCS Q-factor calculation functions can now accept a spin_id arg.
        * Individual system tests can now be executed through the relax test suite.
        * Addition of the relax status singleton object for communicating status info between the core and the UIs.
        * Partially removed the need for downstream Fink specific modifications.
        * Creation of the NOE auto-analysis module.
        * Fixes for the structure.load_spins() user function docstring for RNA/DNA work.
        * The n_state_model.select_model() user function can now change the model.
        * Added a maximum global iteration arg and check into the dauvergne_protocol.py module.

    Bugfixes:
        * Fix for the quaternion_to_R() function (due to incorrect information in Wikipedia).
        * Character encoding fix - cannot use umlauts.
        * Fix for the kron_prod() function.
        * Compilation on Mac OS X with Python 2.6 now works.
        * Added a module containing functions for checking user function args, removing many hidden argument checking bugs.
        * Fix for the calls to transpose_14().
        * Bug fix for the relaxation curve-fitting difference plot script.
        * Fix for the spin.number() user function, the number can be None to reset the values.
        * Fix for the script() user function, the function intro flag at the end of executing an external script was not being restored.
        * Improvements to the optimisation tests (bug #14173, bug #14174, bug #14175, bug #14176, bug #14177, bug #14182).
        * Fix for the R_euler_zyz() rotation matrix function.
        * Fix for the R_to_axis_angle() rotation matrix function.
        * Prevented __find_bonded_atoms() from connecting protons in the internal PDB reader.
        * Fixes for print_frame_order_2nd_degree() for when NaN is encountered.
        * Fix for the compile_2nd_matrix_iso_cone() frame order function.
        * The func_iso_cone_elements() method was been replaced with func_iso_cone() in the frame order analysis.
        * Fix for the delete function which was failing if the file was missing.
        * Fix for the test suite, the temporary files were not always deleted if a .bz2 extension was added.
        * Fix for the reading of Xplor NOE data when a line starts with '#'.
        * Fix for the Dasha and Modelfree interfaces for when spins have too little data (bug #14428).
        * Fixes for the RDC and PCS read() functions, the alignment tensor ID had the same variable name as the spin ID.
        * Fixed the PDF manual compilation (bug #14464).
        * Fix for the retrieval of bond vectors for the N-state model.
        * Fixes for the dx.map() user function interface.
        * Epydoc docstring fixes.
        * Fix for when the selection string (i.e. spin_id) is unicode (bug #14872).
        * Fix for the PCS back calculation for when no weights are given.
        * The last weight in the'fixed' and 'population' N-state models, if supplied, was being converted to zero (1 - sum(weights)) hence the last state/structure was not being included.
        * Added the missing user functions in the mf_multimodel.py sample script (bug #14885).
        * Fix for the Monte Carlo simulations in the full_analysis.py script (bug #14941).
        * Fix for optimisation of models tm4 to tm8 in the mf_multimodel sample script when over-fitting occurs (bug #15050).
        * Removed the beta angle folding from the frame order module as it was failing.
        * Fix and updates to the generic_fns.angles.wrap_angles() function.
        * Fix for the internal structural object PDB writing - the TER records are between the ATOM and HETATM records.
        * Fixed a final model-free analysis failure in the d'Auvergne protocol, the auto-analysis behind the full_analysis.py script (bug #15874).
        * Fixes for the N-state model when RDC or PCS data is missing.
        * Fixed the Q-factor calculating functions to handle missing RDC or PCS lists.
        * Fix for the 'population' N-state model - the probabilities of each state was being set to that of the last state.
        * Constraints must be used at all times in the 'population' N-state model optimisation.
        * For the N-state model 'fixed' and 'population' models, if too many tensors are initialised in comparison to PCS and RDC alignments, then the parameter vector or parameter number was not being correctly assembled.
        * Fix for when structural models are loaded out of order.
        * Fix for the 'population' N-state model whereby the last probability can have a negative value.
        * The infinite looping around the universal solution in the dauvergne_protocol module is now being caught (for the full_analysis.py script).



Version 1.3.4
(12 August 2009, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.4

    Features:
        * The file format of peak intensity lists is now automatically detected (supporting Sparky, XEasy and NMRView).
        * Initial support for a generically formatted peak intensity file (note, this is not yet usable).
        * Error analysis for peak intensities is significantly improved with support for baseplane RMSD, a subset of spectra replicated, and all spectra replicated for both peak heights and peak volumes.
        * NOESY distance restraints (in Xplor or generic format) can now be used in the N-state model via the noe.read_restraints() user function.
        * Psuedo atoms/spin containers are now supported via the spin.create_pseudo() user function (used for the NOE distance restraints).
        * Support for multiple molecules and/or multiple models within relax.
        * Multiple molecules (as one or more PDB files) can now be read in as individual molecules of different models.
        * Multiple models (as one or more PDB files) can now be read in as multiple molecules of the same model.
        * The internal PDB writer can now generate a file with multiple molecules and multiple models.
        * The N-state model with fixed and equal probabilities is now supported.
        * The bond length values for RDCs are now hard-coded (from Ottiger, M. and Bax A., J. Am. Chem. Soc. (1998), 120, 12334-12341).
        * Added the Bruker ncproc parameter to handle Topspin's integer scaling of FID intensities (to the spectrum.read_intensities() user function).
        * Hybridisation support, present in relax 1.2, has returned allowing data pipes to be merged (i.e. to hybridise two model-free data pipes with a different diffusion tensor for sets of spins).
        * The initial code for relaxation dispersion analyses has been added (note, this is not yet usable).
        * Initial support for the new Frame Order theories, using the isotropic cone model for RDC data of domain dynamics.
        * MOLMOL macro support for plotting model-free parameter values onto the structure has returned.

    Changes:
        * The XH bond vector distribution PDB and Pymol representation is now restored.
        * The new user function class 'spectrum' contains all functions associated with spectral data.
        * Spectral data is now identified by unique spectrum ID strings.
        * The noe.read() and relax_fit.read() user functions have been merged into spectrum.read_intensities().
        * The relax_fit.mean_and_error() user function is now called spectrum.error_analysis().
        * The noe.error() user function is now called spectrum.baseplane_rmsd().
        * The new spectrum.integration_points() user function is used to specify the number of points used in a volume integration.
        * The R1 and R2 relaxation time period is now specified using relax_fit.relax_time().
        * grace.write() will now show a warning when an empty file is being created.
        * Replicated spectra are now specified explicitly via spectrum.replicated().
        * Extensive code base clean up - including formatting, unused imports, comments, typos, etc.
        * Complete redesign of the structural information storage.
        * Massive speed up of the structure.vectors() user function.
        * More element types of standard protein PDB atom names are identified (to support PDB files with a blank element column).
        * Information is now printed out when reading RDCs and PCSs to aid the user identify usage faults.
        * The RDC and PCS data is now checked before being loaded into relax.
        * The N-state model grid search now handles alignment tensor parameters.
        * For better optimisation, the grid search lower bound for alignment tensor elements has changed from 0 to -1e-3.
        * Improvement to the algorithm for determining attached atoms in the internal PDB reader - a 2 rather than 1 Angstrom radius sphere is now being searched.
        * The molecule.name() user function can now name unnamed molecules.
        * The diagonalised alignment tensor is now created.
        * Spin numbers can now be set to None, adding support for polymers where the atom name rather than number is used.
        * The Q factor is now calculated as Clore's R-factor divided by N, matching the Pales default mode (both Q factors are now calculated and stored).
        * The force flag has been introduced to the mol/res/spin naming and numbering user functions, where the default is now not to overwrite.
        * Redesign of the spin.create() and residue.create() user functions - respectively residue and molecule names and numbers are used instead of the res_id and mol_id arguments, allowing residues and molecules to be created as needed.
        * Modified the full_analysis.py script to perform 500 Monte Carlo simulations and turned on automatic looping.
        * Support for non-identical sequences in different PDB files within the same data pipe (only as different molecules, not different models).
        * Modified the structure.vectors() user function to fail if no vectors are found, saving the user a lot of sanity when fixing a non-functional script.
        * A quadratic, flat-bottomed well potential has been added for the NOE distance restraints.
        * For the N-state model, a default of inverse sixth power averaging of NOE distance restraints is being performed.
        * The pcs.centre() user function can now accept pseudo-atoms.
        * The pcs.centre() user function can now handle multiple paramagnetic centres.
        * The new maths_fns.rotation_matrix.R_axis_angle() function generates a rotation matrix from the axis-angle notation.
        * The new maths_fns.rotation_matrix.random_rot_axis() and maths_fns.rotation_matrix.R_random_axis() functions are used to generate random rotation matrices.
        * The new maths_fns.rotation_matrix.R_random_hypersphere() function generates a pure random rotation matrix.
        * The new maths_fns.rotation_matrix.quaternion_to_R() function generates a rotation matrix from a quaternion.
        * The new maths_fns.kronecker_product.kron_prod() function is used to calculate the Kronecker product.
        * Converted the user function n_state_model.set_type() to align_tensor.reduction().
        * Renamed n_state_model.set_domain() to align_tensor.set_domain().
        * The statistics ordering has been improved when profiling.
        * align_tensor.init() can now accept any type of float or int (python or numpy).
        * Removed the checks to see if the RDC or PCS data is already loaded, allowing sequential loading by a few calls to rdc.read() and pcs.read().
        * Large improvements to the information printed by the align_tensor.display() user function.
        * Removed a check for the presence of the alignment tensor so that align_tensor.init() can be used to reset the tensor values.
        * Created the six transpose functions for rank-4, 3D tensors in maths_fns.kronecker_product.transpose_ij().

    Bugfixes:
        * A bug in the Monte Carlo simulations for relaxation curve-fitting has been fixed (bug #12670).
        * Fixes for the Pymol PDB file opening and pymol.cartoon() user function.
        * The molecular centre of mass is now correctly calculated.
        * Grace plots (http://plasma-gate.weizmann.ac.il/Grace/) were sometimes corrupted due to data being stored in numpy arrays and not Python lists (bug #12679).
        * Fix for the value.read() user function, the directory and 'sep' arguments were being ignored.
        * Multiple failures of structure.load_spins() for different PDB file layouts have been fixed (bug #12735).
        * Model-free optimisation failures on Mac OS X for PowerPC (bug #12573).
        * Many PDB file reading fixes for different multi-molecule/multi-model formats.
        * The '-' character is now allowed in molecule, residue, and spin names (was a bug if the file name contains a '-' character).
        * Bug fixes for handling molecules other than proteins and RNA via the Scientific python PDB reader.
        * The internal PDB reader no longer considers the END record to be a molecule.
        * Fix for a rare circular import failure of the RelaxError and RelaxWarning systems when running with the --debug command line flag.
        * Significant simplifications of the RelaxError system, fixing a state saving bug with --debug.
        * Fix for the retarded Scientific python PDB reader splitting a perfectly good molecule into 2 when it can't recognise a residue type.
        * Linear constraints and now supported for the N-state models without probabilities.
        * Modified the full_analysis.py script to name spins if the sequence data contains no spin name info.
        * All column arguments now default to None for the RDC and PCS reading so if residue numbers are non-existent, then they will not be read from the default column.
        * Bug fixes for the N-state model with N = 1 (allowing relax to mimic Pales http://www.mpibpc.mpg.de/groups/griesinger/zweckstetter/_links/software_pales.htm).
        * Bug fix for the PCS alignment tensor fitting, the paramagnetic-nuclear spin distance was being incorrectly determined.
        * The Q factors for the RDCs and PCSs were completely incorrect (found by comparing to Pales).
        * All the value.*() user functions have now been converted from the relax 1.2 to the relax 1.3 design.
        * Fixes for some circular import issues in generic_fns.minimise and generic_fns.value.
        * All the relax_data.*() user functions have now been converted to the relax 1.3 design.
        * Bug fix for the spin.copy() user function, non-empty spin containers are no longer overwritten if the name and num are set to None.
        * Fix for the latex_mf_table.py sample script (bug #13163).
        * Rex values in XML results file not in s-1 (bug #13162).
        * Fix for the structure.create_diff_tensor_pdb() user function which was creating weird shaped ellipsoid diffusion tensor representations when 'alpha' and 'beta' were unequal (bug #13032).
        * Sparky assignments such as '004N-H' are now handled.
        * Fixed a bad apostrophe character causing the 'full_analysis.py' script to fail.
        * Removed a check disallowing multiple steady-state NOE data sets at the same spectrometer frequency.
        * Bug fix for the results reading from_xml() method, the molecule name was being evaluated causing results.read() to fail.
        * Fixes for the model-free Monte Carlo simulation methods for deselected spins.
        * Models with high te values (>200 ns) were not being eliminated in the full_analysis.py sample script (bug #13259).
        * Monte Carlo simulations were failing in the model-free.py sample script (bug #13442).
        * The model-free minimisation statistics are no longer reset by the Monte Carlo simulation setup.
        * A number of bug fixes for Python 2.6 support.
        * Model selection between data pipes of different type is now allowed.
        * Bug fix for the maths_fns.rotation_matrix.R_2vect() function as the rotation axis is not always of unit length.
        * The diffusion tensor geometric object PDB representation is now correctly generated.
        * The isotropic cone geometric object PDB representation is now correctly generated.
        * The Hetrogen section was failing with MC simulations in the structure.write_pdb() user function.
        * pymol.cartoon() was failing when multiple proteins were loaded.
        * Bug fix for the maths_fns.rotation_matrix.R_to_axis_angle() function, the axis needs to be normalised.
        * Bug fixes for the grace.write() user function.
        * Monte Carlo simulations failed when all parameters except for the diffusion tensor were fixed.
        * The diffusion and alignment tensor *_sim and *_err elements are now present and read from a results file.
        * The align_tensor.matrix_angles() user function now avoids NaN problems through arccos of numbers > 1.
        * Bug fixes for the updating of the diffusion tensor MC simulation data structures.
        * Fix for the copying of diffusion tensors data structures.
        * relax and the sample scripts are more compatible with non-Unix operating systems by using the Python os.sep and os.pardir rather than '/' and '..' for directory separators and the parent directory.
        * Caught a NaN problem in the N-state model, RDC Q factor code causing failures in MS Windows.



Version 1.3.3
(29 November 2008, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.3

    Features:
        * Dasha can be run from within relax again.
        * Art Palmer's Modelfree can be run from within relax again.
        * OpenDX execution and control is once again supported.
        * NMRView peak lists are now supported.
        * XEasy peak lists are again supported.

    Changes:
        * Internal relax cleanups by the addition of the specific model_loop() method - this should eliminate a series of potential hidden bugs.
        * The results.write() and results.display() now only support XML output.
        * More information is now extracted from the Modelfree mfout files.
        * The version of the Modelfree program is checked and if it is an old, buggy version, relax will refuse to execute it.
        * The system tests can now handle the sometimes large differences in Modelfree results between the GNU gcc and Portland C compiler versions.
        * Fixes and improvements to much of the API documentation.

    Bugfixes:
        * A failure of the minimisation set() function has been fixed.
        * The reset() user function now works again.
        * Fixes to the relax data store methods add(), to_xml() and from_xml().
        * Many fixes for the support of Art Palmer's Modelfree program.
        * The mapping of the global parameter space (diffusion tensor, etc.) for visualisation in OpenDX has been fixed.
        * state.save() no longer fails after running state.load() (bug #12437).
        * Sparky peak lists with the assignment '?-?' are now handled properly (bug #11913).
        * Error analysis in relaxation curve-fitting was incorrectly implemented with standard deviation rather than variance averaging (bug #12456).
        * A number of fixes for the LaTeX table generating sample script.
        * Fixes for the teeing and logging via the -l and -t command line arguments (bug #12489).
        * Fix for when XH bond vector data from a PDB file is missing for a spin system (bug #12487).
        * Many fixes for when structural data is missing.
        * The relax script is no longer overwritten if the log or tee file is not specified on the command line (bug #12498).
        * Missing RelaxError failure in the sequence handling code (found when trying to solve bug #12582).
        * A failure in the results.write() user function has been fixed (bug #12582).
        * Model selection no longer fails if no model is ever selected.
        * Model selection was failing if spins were deselected (bug #12591).
        * The directory name can now be part of the file name argument to results.read() (bug #12588).
        * Optimisation of only the diffusion tensor after calling fix() was failing if some spins were deselected (bug #12607).
        * The internal PDB reader was failing when the PDB file contained CONECT records (bug #12637).



Version 1.3.2
(8 October 2008, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.2

    Features:
        * The NOE analysis has been converted to the new design and is fully functional again.

    Changes:
        * Internal abstractions to the relax data store by using the generic_fns.pipes API.
        * Added more literature references to the 'full_analysis.py' script.
        * Eliminated Monte Carlo simulations are better identified during user function execution.

    Bugfixes:
        * The generation of the cone geometric object for the N-state model is fixed.
        * Fixes for the relax_curve_diff.py and latex_mf_table.py sample scripts (identified by the relax data store abstraction).
        * Fixed the reading of relax 1.2 model-free results files (identified by the relax data store abstraction).
        * Various PDB file loading issues fixed.
        * value.set() no longer fails when the parameter being set already exists (bug #12406).
        * Fix for the bug whereby model elimination does nothing for model-free models.  This fix may solve other model-free related issues (bug #12407).
        * Model elimination no longer fails when no diffusion tensor is loaded (bug #12408).
        * The error when loading the PDB file through the reading of the results file in the 'final' stage of the 'full_analysis.py' sample script is fixed (bug # 12409).
        * Model elimination is fixed in the 'full_analysis.py' script.
        * The fix() user function works again when the element argument is set to 'all'.
        * Fix for the duplication of sequence data during model selection.
        * Monte Carlo simulations were failing due to a missing sequence error (bug #12410).
        * The model elimination error "AttributeError: 'SpinContainer' object has no attribute 'params'." has been fixed (bug #12411).
        * A missing global chi-squared value was causing failure of global model selection (bug #12412).
        * Monte Carlo simulation elimination was removing the simulation not from the affected spin but from all spins (bug #12416).
        * Fix for the failure of the value.write() user function in all analysis types (bug #12418).



Version 1.3.1
(28 September 2008, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.1

    Features:
        * Complete redesign of relax (https://mail.gna.org/public/relax-devel/2006-10/msg00053.html).
        * Extension of the Grace plotting abilities to include series data such as relaxation exponential curves.
        * For easy reference, all physical constants have been shifted to the 'physical_constants.py' module.
        * Complete overhaul of the handling of structures with the introduction of a structural object API.
        * An internal structural object has been created, complete with PDB reading and writing methods, to optionally replace the Scientific python PDB object.
        * Large improvements to the API documentation by the use of epydoc formatted docstrings.
        * All spins can be looped over simply by using the spin_loop() generator function.
        * Molecules, residues, and spins are now selected by the new syntax of the spin identification string.
        * Improvements and simplifications to the 'full_analysis.py' script with all user modifiable variables shifted to the top of the script as global variables.
        * Automatic looping until convergence has been added to the 'full_analysis.py' script to further simplify usage.
        * Setting the type of nucleus is now done with the value.set() user function on a spin-by-spin basis.  This is important for RNA, small molecules and protein analyses with Ca and N data.
        * A new analysis type, the N-state model for interpreting domain motions using RDC and PCS data, is now supported.
        * The mechanical pivot-CoM analysis of the N-state model and associated cone image construction is included.
        * The consistency testing code has been ported from the 1.2 line.
        * The results file has been converted to the versatile XML format.
        * All analysis types, present and future, are automatically supported through the reading and writing of the XML results file.
        * The XML results file stores floats at full 64 bit precision in an XML attribute using the IEEE-754 byte array.

    Changes:
        * The RelaxError and RelaxWarning systems have been redesigned.  The objects are no longer placed into __builtin__ but must now be imported.
        * The unit and system test frameworks have been expanded to 1046 and 55 tests respectively covering most aspects of relax usage.
        * The inclusion of headers in the sample scripts to identify the author and age of the script.
        * Conversion of the relax data storage object into a singleton.  Rather than accessing 'self.relax.data', the singleton is now imported as needed.
        * Unit tests can now be run individually.
        * The optimisation code has been spun out into its own project, minfx (https://gna.org/projects/minfx/).  This is now a dependency.
        * The Boolean values True and False are now used instead of 1 and 0 for user function arguments.
        * The class methods of the 'generic_fns' package have been converted to module functions for greater API flexibility.
        * Complete redesign of the diffusion tensor object in the relax data store.  Many diffusion tensor attributes are calculated on the fly when accessed.
        * The 'specific_fns' package has been redesigned with the API for retrieving analysis specific methods tidied up.
        * The inevitable switch from Numeric python to numpy has occurred.
        * The system tests and unit tests can be run separately.
        * All STDOUT and STDERR output is caught by the test suite and only printed if the test fails.
        * The system tests use the unit test framework to significantly simplify the addition of new tests.
        * User scripts can now be used directly as system tests.
        * All threading code has been eliminated in preparation for replacement by the multi_processor code.
        * The precision of the 15N gyromagnetic ratio input into Art Palmer's Modelfree4 program has been increased.
        * Scientific python is no longer an essential dependency.
        * The 'unselect' user function class has been renamed to 'deselect'.
        * Big updates to the relax manual.
        * PDB files can be specified without the '.pdb' ending.

    Bugfixes:
        * The unit test and system test frameworks are now functional.
        * The failure of reduced spectral density mapping has been identified and fixed (bug #9238, bug #9562).
        * The second set of extended model-free formulae were accessing undefined functions (bug #9189).
        * Docstring fetching issues with Python 2.5 have been fixed (bug #9390).
        * The sample script for placing model-free results into a LaTeX table now works (bug #10189).
        * The default parameter values for relaxation curve fitting were incorrectly set.
        * Security:  Replaced the insecure os.tempnam() with tempfile.mktemp().
        * ZeroDivisionError fix for model elimination and Monte Carlo simulation elimination (bug #11004).
        * The handling of spins with missing XH bond vectors has been fixed (bug #11378).
        * The relax_data.display() user function is now functional again (bug #11383).
        * MS Windows with Python 2.5 is now supported.



Version 1.3.0
(19 February 2007, from /1.3)
http://svn.gna.org/svn/relax/tags/1.3.0

    Features:
        * Implementation of the PDB geometric representation of the Brownian rotational diffusion tensor using 'structure.create_diff_tensor_pdb()'.
        * Added a sample script for the creation of the PDB representation of the diffusion tensor.
        * Addition of the ability to calculate the centre of mass of the selected residues (not available as a user function).
        * The addition of PDB writing capabilities (not available as a user function).
        * Creation of the 'molmol.command()' user function to send Molmol commands to a running instance of Molmol.
        * Creation of the 'molmol.ribbon()' user function to apply the Molmol ribbon style (which is equivalent to clicking on 'ribbon' in the Molmol side menu).
        * Creation of the 'molmol.tensor_pdb()' user function for displaying the PDB geometric object of the diffusion tensor in Molmol over a loaded structure.
        * Preliminary support for PyMOL.
        * Creation of the 'pymol.view()' user function for launching PyMOL.
        * Creation of the 'pymol.cartoon()' user function for hiding everything, showing the cartoon representation, and colouring the cartoon by secondary structure.
        * Creation of the 'pymol.tensor_pdb()' user function, the equivalent of 'molmol.tensor_pdb()'.
        * A unit test framework for the test suite has been created and a few tests have been written (accessible through the --test-suite or --unit-test command line arguments).
        * Addition of the 'structure.create_vector_dist()' user function for creating a PDB representation of the XH bond vectors of selected residues from the structure.
        * Addition of the 'pymol.vector_dist()' user function for displaying the PDB representation of the XH vector distribution overlain over the structure within PyMOL.

    Changes:
        * The unmodified Hessian and turning the line search off are now specified by different regular expressions. (see task #3630)
        * Splitting of the 'pdb()' user function into 'pdb.read()' and 'pdb.vectors()' (these have been subsequently renamed). (see task #3838)
        * Created the JOBS file to describe the roles of the relax manager positions.
        * Removal of apply(func, args) calls from the minimisation code.
        * Addition of the io.file_root() function.
        * Addition of the RelaxImplementError for internal use.
        * Added the text "re-run relax with the '--debug' flag" to the RelaxFault error class.
        * Redesign of the diffusion tensor data structure 'self.relax.data.diff' for the automatic calculation of diffusion tensor parameters, vectors, and matrices when parameters are set or changed.
        * The 'pdb' user function class has been renamed to 'structure'.
        * The 'init_data()' user function has been renamed to 'reset()'.

    Bugfixes:
        * Fixed the selection of nucleic acids by name as Scientific python was prefixing 'R' to the single letter codes.



Version 1.2.15
(27 November 2008, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.15

    Bugfixes:
        * Problems with the value.write() user function have been fixed (see bug #12418).
        * Error analysis in relaxation curve-fitting was incorrectly implemented with standard deviation rather than variance averaging (see bug #12456).



Version 1.2.14
(9 August 2008, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.14

    Changes:
        * Improvements to the relax manual.
        * Copyright statements added to the sample scripts for identifying the author and date of the script.

    Bugfixes:
        * The C modules can now be compiled on Windows with Python 2.5.
        * Fixes for the calculation of the F_eta value in the consistency testing analysis.



Version 1.2.13
(19 April 2008, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.13

    Features:
        * Consistency testing has been added allowing datasets recorded at different magnetic fields to be checked using the consistency function values J(0), Feta, and FR2.
        * The 'full_analysis.py' script can now perform a model-free analysis in the absence of structural data.

    Changes:
        * Better support for MS Windows Vista in the scons build system and the relax introduction.
        * A file listing the unresolved residues is no longer necessary for running the 'full_analysis.py' script.
        * A few small documentation additions and fixes.

    Bugfixes:
        * The parameters Dpar and Dper are now properly checked upon initialisation of this spheroidal diffusion tensor.
        * Initialisation of an empty diffusion tensor to the default values of zero now works.
        * The default value of the Iinf relaxation curve fitting parameter can now be set.
        * Fix for the complete failure of the reading in of Art Palmer's Modelfree 4 'mfout' results file (see bug #8997).
        * Fix for a rare ZeroDivisionError during Monte Carlo simulations (see bug #11004).
        * relax no longer fails if XH bond vectors cannot be extracted from a PDB file (see bug #11378).
        * The relax_data.display() user function no longer fails (see bug #11383).
        * The selection of model-free model 'm0' causes Monte Carlo simulations to fail resulting in zero errors from that residue onwards (see bug #11476).
        * Another column fusion bug in Modelfree 4's 'mfout' results file can be handled (see bug #11483).
        * Optimisation fix - the steady-state NOE value, gradient, and Hessian is now properly calculated when an order parameter of exactly 0.0 is encountered.



Version 1.2.12
(17 November 2007, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.12

    Features:
        N/A

    Changes:
        N/A

    Bugfixes:
        * The 'latex_mf_table.py' sample script now works (see bug #10189).
        * The missing 'num_ri' failure when writing the model-free and J(w) mapping results files has been solved (see bug #10323).
        * Model elimination was failing in certain situations when applied to the global models (see bug #10320).



Version 1.2.11
(21 October 2007, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.11

    Features:
        * The Grace plotting abilities have been extended, especially concerning relaxation exponential curve-fitting.
        * A sample script has been added to plot the difference between the measured and back calculated peak intensities.
        * Automatic looping over iterations in the 'full_analysis.py' sample script is now possible.

    Changes:
        * The 'full_analysis.py' sample script has been significantly improved with all user modifiable options shifted to the top of the script.
        * The default CSA value is now -172 ppm.

    Bugfixes:
        * The previous release had problems reading results files from relax versions 1.2.0 to 1.2.9, but now results files from all versions can be read (see bug #8248).
        * The synopsis of the system/functional tests now says '[ Failed ]' if one the tests fails (see bug #8682).
        * relax now works with Python 2.5 (see bug #9093).
        * The writing of the model-free results file, which failed under certain circumstances because of the 'heteronuc' and 'proton' attributes, has been fixed (see bug #8996).
        * The problem whereby there is data loss for deselected residues when using 'results.write()' followed by 'results.read()' has been resolved (see bug #8953).
        * Relaxation data can now be read if deselected spin systems have a relaxation data value or error value set to 'None' (see bug #9101).
        * The fatal bug of the reduced spectral density mapping values being incorrectly calculated has been fixed (see bug #9238).
        * When using the alternate model-free parameter set {S2f, tf, S2s, ts}, the incorrect functions were being called (see bug #9189).
        * A second fatal problem in the reduced spectral density mapping code, the heteronuclear frequency being overwritten by that of the proton, has been fixed (see bug #9259).
        * Another problem with relax and Python 2.5, because of the Scientific package, has been resolved (see bug #9390).
        * The XH bond length is now correctly set in the reduced spectral density mapping analysis (see bug #9562).
        * The convergence test in the 'full_analysis.py' sample script was failing if spin systems were deselected (see bug #9892 and bug #10022).



Version 1.2.10
(12 January 2007, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.10

    Features:
        * Addition of tests to the 'full_analysis.py' script for the identification of convergence.
        * Different columns can be specified for the residue number in the 'select.read()' and 'unselect.read()' user functions.
        * More advanced selection of spin systems or residues is possible through the use of the Boolean operators 'OR', 'NOR', 'AND', 'NAND', 'XOR', or 'XNOR'.
        * Addition of a sample script for the creation a LaTeX longtable of the model-free results.
        * The rows of the model-free and reduced spectral density results files are no longer truncated for deselected spin systems, hence all data is now stored in the results file. (see bug #8059)

    Changes:
        * The relax core design diagram in the development chapter of the manual has been updated.
        * Three flow diagrams have been added to the relax manual detailing the steps of different model-free analysis protocols.
        * Spin systems are now identified when deselected by the 'eliminate()' user function.
        * The model-free Molmol cutoff for fast and slow motions has been changed from 100 to 200 ps.
        * For the clarification of bug #8059 a RelaxNoTensorError is raised instead of returning None when no diffusion tensor data is present.
        * The Scons target 'source_dist' now creates and GPG signs both the 'tar.bz2' and 'zip' source distribution packages. (see task #4087)

    Bugfixes:
        * The C modules can now be compiled on Mac OS X. (see bug #7670)
        * The order of the proton and heteronucleus dimensions and number of header lines in the XEasy text file is now automatically detected. (see bug #7676)
        * The 'full_analysis.py' script now throws a RelaxError if only one round of optimisation of the global model has been executed. (see bug #7787)
        * The model selection of the global model in the 'full_analysis.py' script has been fixed. (see bug #7863)
        * Monte Carlo simulations no longer fail if the local tm global model has been selected in the 'full_analysis.py' script. (see bug #7875)
        * The Monte Carlo simulation data in the model-free results file is now correctly read back into the program. (see bug #7755)
        * The Monte Carlo simulation state used to be turned on after reading a results file containing simulations. (see bug #7890)
        * After reading model-free results files, model selection would fail as the heteronucleus and proton data structures did not exist. (see bug #7891)
        * The model-free Molmol fast correlation time macro (te < 100 ps and tf) no longer sets the bond length to zero when no parameter is present.
        * The docstring fetching Scons target no longer fails. (see bug #8182)
        * The model-free 'S2 difference stored in a new run' test of the test suite now passes. (see bug #8183)
        * The 'source_dist' Scons target now works on MS Windows. (see bug #7678)
        * The MS Windows BAT file execution failure "python: can't open file 'C:\Program': [Errno 2] No such file or directory" has been fixed. (see bug #8201)
        * The reading in of the results files from relax versions 1.2.0 to 1.2.9 in which deselected spin system lines are truncated now works. (see bug #8248)



Version 1.2.9
(9 November 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.9

    Features:
        N/A

    Changes:
        * For Mac OS X compatibility, the interpreter has been changed from '/usr/bin/python' to '/usr/bin/env python'.

    Bugfixes:
        * The infinite chi-squared RelaxError when the chi-squared value is zero has been fixed. (see bug #7641)
        * Profiling is now functional again. (see bug #7677)



Version 1.2.8
(4 November 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.8

    Features:
        * Preliminary support for RNA/DNA. (bug #7241)
        * Significant improvements to the SCons build system (see 'scons --help').
        * Expansion and improvement of the relax development chapter.
        * The grace.write() user function works with reduced spectral density mapping. (task #4002)

    Changes:
        * MS Windows installation instructions have been added to the manual.
        * The RelaxWarning system has been added to standardise warning messages.
        * The relax manual now describes the test suite. (task #3781)
        * The 15N CSA values in the sample scripts are now all -172 ppm.
        * The ambiguity cased by supplying the option 'None' together with Newton optimisation has been resolved in the documentation. (task #3630)
        * Optimisation tests have been added to the test suite.

    Bugfixes:
        * Model selection between the global diffusion models no longer fails if all residues of the local tm models have been deselected by model elimination. (bug #7192)
        * The 'angles.py' sample script no longer fails when residue specific relaxation data is missing (corrupt input data). (bug #7224)
        * Prior to executing Modelfree4, Dasha, Molmol, Grace, or OpenDX, tests are run to determine if the binary exists, is executable, and is in the system path. (bug #7225)
        * Model elimination when using the model-free model 'm0' no longer fails. (bug #7226)
        * The strict checking of the Da and Dr diffusion tensor parameters has been relaxed to allow for optimisation imprecision. (bug #7297)
        * The reading of Modelfree4 mfout results files no longer fails when residue specific relaxation data is missing (corrupt input data). (bug #7277)
        * If optimisation returns an infinite value or a NaN value, these are now caught and a RelaxError thrown. (bug #6503, task #3621)
        * The sigma(NOE) equations of Chapter 8 of the manual have been fixed. (bug #7402)
        * Files containing relaxation data not consisting of exactly 4 columns will now be read. (bug #7583)
        * Model-free results files from relax versions prior to 1.2.5 are now properly read. (bug #7587)
        * Model selection between the global diffusion models does not fail when the local tm models are included. (bug #7616)



Version 1.2.7
(18 September 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.7

    Features:
        * The C modules now compile without problem on MS Windows.
        * The MS Windows binary distribution packages are now successfully built using the SCons build system.
        * The batch file 'relax.bat' has been created for running relax from the MS Windows command prompt.
        * The program introduction width is now 80 characters in MS Windows for proper display from the command prompt.

    Changes:
        * The program state is saved when a RelaxError occurs in debugging mode.
        * KeyboardInterupt during script execution in debugging mode will print the Python traceback.

    Bugfixes:
        * The sconstruct script no longer fails in MS Windows. (bug #6980)
        * Model selection is now functional on all operating systems. (bug #6873).
        * The use of the Unix only class 'Popen3' has been removed to allow relax to function on all non-Unix operating systems. (bug #6841)
        * If the XH bond vector length is 0, the vector is set to None rather than raising a RelaxError. (partial fix to bug #6503)
        * Fix for the sconstruct script failure on MS Windows due to ImportErrors caused by importing Unix specific code. (bug #6841)
        * Fix for ImportErrors in MS Windows preventing relax from running. (bug #6841)



Version 1.2.6
(21 July 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.6

    Features:
        N/A

    Changes:
        N/A

    Bugfixes:
        * Added the missing PDB file used by one of the OpenDX tests of the relax test-suite. (bug #6404)
        * Fixed the fatal devnull import failure for Python versions < 2.4. (bug #6403)



Version 1.2.5
(20 July 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.5

    Features:
        * The data analysis chapter has been split into four:  The NOE, relaxation curve-fitting, model-free, and reduced spectral density mapping chapters.
        * A section called the 'The core design of relax' has been added to the the development chapter of the manual.
        * The 'Values, gradients, and Hessians' chapter of the manual is now complete.  These are all the equations used during optimisation.
        * The Hessian kite diagram and the gradient construction diagram have been added to the 'Values, gradients, and Hessians' chapter of the manual.

    Changes:
        * The distribution archives now unpack to the directory 'relax-x.x.x' rather than just 'relax', where x.x.x is the version number.
        * All chapters of the manual have been edited and proofed.
        * The Sparky and XEasy peak intensity reading functions have been split to allow the easy addition of new peak intensity file types.
        * Test of AIC model selection between diffusion tensors added to the test suite.  (To catch bug #5746)
        * Changing of the local tm parameter name of 'tm' to 'local_tm' to distinguish it from the global tumbling time 'tm'. (Preparation for fixing bug #6384)

    Bugfixes:
        * Fix of bug where self.relax.data.select_sim was treated as a list. (bug #5977)
        * The value.copy() function now handles the value of None. (bug #6288)
        * The global flag is now set by the relax_data.delete() function. (bug #6383)
        * The model-free model_statistics() function now tests for the presence of relaxation data. (bug #5806)
        * Sorting of global from local parameters in 'generic_fns/value.py' simplified and fixed by changing the parameter name 'tm' to 'local_tm'. (bug #6384)
        * Model-free parameters now set in the OpenDX mapping test of the test-suite. (bug #6388)
        * Failure of model elimination because of a 'local_tm' and 'tm' mix up. (bug #6389)
        * Modification of the model-free calculate() function and elimination of the 'combined' flag from the self.model_statistics() function. (bug #5746)



Version 1.2.4
(2 May 2006, from /1.2)
http://svn.gna.org/svn/relax/tags/1.2.4

    Features:
        * Added elimination of Monte Carlo simulations to the sample scripts.
        * Creation of the relax test suite 'relax --test-suite'.
        * Creation of the committers file.
        * The hyperref LaTeX package is now used in the relax manual.
        * Addition of a chapter called 'Open source infrastructure'.
        * Rewrite of the 'Development of relax' chapter.
        * Addition of the user function 'run.hybridise()'. (task #3122)
        * The user function 'relax_data.read()' no longer deselects residues when no data is encountered. (bug #5501)
        * Residues are deselected by the user functions 'grid_search()', 'calc()', and 'minimise()' if k > n or if there is less than 3 data sets. (bug #5501)
        * Mapping parameter values onto the structure through Molmol macros. (task #3146)
        * Added support for arbitrary colour gradients in the Molmol macros. (task #3146)
        * Addition of a file for colour operations.  All X11 colours and all Molmol colours can be selected by name. (task #3146)

    Changes:
        * The 'full_analysis.py' sample script now only searches over 6^6 rather than 11^6 grid points for the ellipsoid diffusion tensor to speed up the analysis.
        * Updated the manual to replace the references to 'make' with 'sconstruct'.
        * Extension of the installation chapter.
        * Changed the square and round brackets to curly brackets and replaced ':' with '=' in the user function docstrings.
        * All the model-free Molmol functions have been moved into their own class Molmol.
        * The null device can now be opened instead of a file for writing by passing 'devnull' as the name.
        * Updated the release checklist so that the directory 'relax-x.x.x' is included in the distributions rather than just 'relax'.
        * Removed the bugs file 'docs/BUGS'.

    Bugfixes:
        * Small bugs in the sconstruct script have been removed.
        * The value reading function can now handle rows which contain no data.
        * The ellipsoid diffusion tensor was being incorrectly initialised in the 'full_analysis.py' script.
        * Another Numeric version issue.  The model m0 with no parameters which used to be handled okay by the grid search and minimisation code was failing due to changes in Numeric.
        * In certain situations, the angle folding function which is called after model-free minimisation used the wrong run name.
        * Fixed the -fPIC option segfault problem on some Linux systems. (bug #5473)
        * Changed the tm grid search which was between 6-12 ns to be between 1-12ns.
        * Fixed some grammar in the intro chapter of the manual.
        * Fixed a bug in the model-free sample script in the spheroid diffusion tensor function.
        * Removed the spaces in front of the \index{} commands from the manual LaTeX source files.
        * The diffusion parameters 'Diso', 'Dper', 'Dpar', 'Dratio', 'Dx', 'Dy', and 'Dz' are generated on the fly. (bug #5559)
        * Fixed the spacing after 'Gna!' in the manual.
        * The 'grace.write()' user function now plots the associated errors. (bug #5659)
        * Fix to the parameter errors not being scaled in the value.read() user function. (bug #5670)
        * Parameter errors were not always included in the results file. (bug #5660)
        * Removed the memory leak in the relaxation curve-fitting C modules. (bug #5602)
        * The user function 'value.set()' no longer raises RelaxError in spectral density mapping runs. (bug #5698)
        * Fix to the broken Molmol pipe. (bug #5752)
        * Fix of the failure of molmol.view() when the PDB is missing. (bug #5753)
        * Fix to the failure of relax_data.read() when relaxation data is missing. (bug #5805)
